接口302时,请求头中的location地址跨域

856 阅读1分钟

系统更换域名,并且从http升级至https,但是这时候运维过来找我页面不会重定向至登录页!

问题描述

访问系统时,服务器发现请求的接口没有带有登录信息,就会回一个状态码为 302 的重定向响应,并在响应头的 Location 中写入重定向的地址,浏览器会用 get 方法重新请求 Location 中指定的登录地址;

image.png

但是返回的location是http的,访问系统的地址是https的,控制台会报错:

Mixed Content: The page at ‘xxx‘ was loaded over HTTPS, but requested an insecure XMLHTTPRequest endpoint "xxx', This request has heen blocked the content must be served over HTTPS.

image.png

原因

这是因为浏览器的同源策略导致的,https地址中,如果加载了http资源,浏览器将认为这是不安全的资源,将会默认阻止

具体过程是浏览器会根据服务器响应接口的状态为302,并发现headers中有location,就会自动跳转到Location所指定的URL地址,跳转成功后,该ajax请求成功进入到success

但是此处协议不同,违反了浏览器的同源策略,重定向不成功,导致xhr的status为-1,

那么就得想办法把location中的重定向地址改为https的

解决

去问后端能否把location的地址改成https的,后端说改了但是不生效,不知道为啥

前端的解决办法就是在页面的head中加入:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

意思是自动将http的不安全请求升级为https 加上这句,浏览器在请求location的地址时会自动将请求升级为https