为什么在jsp上用response.sendRedirect会strict-origin-when-cross-origin
时间: 2023-07-12 19:05:42 浏览: 55
`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:forward>和response.sendRedirect的区别
`<jsp:forward>` 和 `response.sendRedirect` 都可以用于重定向请求到其他页面,但是它们有一些区别。
- `<jsp:forward>` 是在服务器端发生的重定向,而 `response.sendRedirect` 是在客户端发生的重定向。在 `<jsp:forward>` 中,服务器直接将请求转发到目标页面,浏览器并不知道发生了任何重定向,因此浏览器的地址栏中的 URL 不会改变。而在 `response.sendRedirect` 中,服务器会向客户端发送一个 302 状态码和一个新的 URL,浏览器会重新向该 URL 发送请求,因此浏览器的地址栏中的 URL 会改变。
- `<jsp:forward>` 只能用于转发请求到本应用程序内的页面,而 `response.sendRedirect` 可以用于将请求重定向到本应用程序内或其他应用程序的页面。
- `<jsp:forward>` 可以将请求转发到 JSP 页面、Servlet 或其他资源(如 HTML 文件),而 `response.sendRedirect` 只能将请求重定向到 URL。
因此,如果要将请求重定向到另一个应用程序或将请求转发到不同类型的资源,应该使用 `response.sendRedirect`。而如果要将请求转发到本应用程序内的其他页面,则应该使用 `<jsp:forward>`。