为什么在jsp上用response.sendRedirect会strict-origin-when-cross-origin
时间: 2023-07-12 15:05:42 浏览: 95
`strict-origin-when-cross-origin` 是浏览器的一种安全策略,主要是为了防止跨站点攻击。当使用 `response.sendRedirect` 方法将请求重定向到另一个域名时,浏览器会检查当前页面的来源(即 origin)和重定向后的 URL 的来源是否相同。如果来源相同,浏览器会直接访问重定向后的 URL,否则会将请求发送到重定向后的 URL,并在请求头中添加 `Referer` 字段,值为当前页面的 URL。
在 JSP 页面中使用 `response.sendRedirect` 方法时,如果重定向的 URL 和当前页面的 URL 不在同一个源(即协议、主机名和端口号都不相同),浏览器会按照上述安全策略处理。因此会出现 `strict-origin-when-cross-origin` 的情况。
为了避免这种情况,可以使用 CORS 技术或 JSONP 技术等方法实现跨域访问。如果需要使用 `response.sendRedirect` 方法,可以将重定向的 URL 设置为当前页面的相对路径或同一域名下的绝对路径,这样就不会触发跨域访问限制了。
相关问题
使用java进行 response.sendRedirect提示Referrer Policy: strict-origin-when-cross-origin
如果在Java中使用`response.sendRedirect`方法进行定向时遇到"Referrer Policy: strict-origin-when-cross-origin"的问题,可以尝试在重定向之前设置`response.setHeader("Referrer-Policy", "no-referrer")`来解决。
示例代码如下:
```javaresponse.setHeader("Referrer-Policy", "no-referrer");
response.sendRedirect("your_redirect_url");
```
这样设置之后,响应头中的Referrer-Policy字段将被设置为"no-referrer",从而避免了Referrer Policy相关的问题。
请注意,这只是一个解决方案之一,具体的处理方法可能会因为你的项目结构和使用的框架而有所不同。确保在重定向之前设置响应头,并且根据你的项目需求进行相应的调整。
设计两个jsp文件,分别为source.jsp和target.jsp,在source.jsp中分别用JSP动作和response.sendRedirect()跳转到target.jsp。实现出来,观察地址栏变化
source.jsp代码:
```
<%@ page language="java" %>
<html>
<head>
<title>Source Page</title>
</head>
<body>
<h1>Source Page</h1>
<jsp:forward page="target.jsp"/>
<%--response.sendRedirect("target.jsp");--%>
</body>
</html>
```
target.jsp代码:
```
<%@ page language="java" %>
<html>
<head>
<title>Target Page</title>
</head>
<body>
<h1>Target Page</h1>
</body>
</html>
```
在source.jsp中,我们使用了两种方式进行跳转,分别是使用JSP动作和response.sendRedirect()。其中JSP动作使用的是jsp:forward,而response.sendRedirect()使用的是注释掉的那行代码。
当我们访问source.jsp时,会自动跳转到target.jsp页面。使用JSP动作跳转时,地址栏不会发生变化,而使用response.sendRedirect()跳转时,地址栏会发生变化。
使用JSP动作跳转时,地址栏显示的是source.jsp的地址,即:
```
http://localhost:8080/source.jsp
```
而使用response.sendRedirect()跳转时,地址栏显示的是target.jsp的地址,即:
```
http://localhost:8080/target.jsp
```
阅读全文