跨域发送 PUT 请求的时候,浏览器会发送一个 OPTIONS 请求作为 preflight 请求。
然而请求的时候浏览器却报错:
Access to XMLHttpRequest at 'http://example.com/api/v3/app/1' from origin 'http://example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
字面意思就是 CORS 请求不允许重定向。但问题是我这链接并没有重定向呀?
打开开发者工具 Network 一看,服务器返回 Status Code: 307 Internal Redirect
, 有个 header: Non-Authoritative-Reason: HSTS
,redirect 的地址恰好是对应 HTTPS 的地址。
心想是不是 Nginx 开启 HSTS 造成的,但检查了一下,并没有开启 HSTS,而且通过请求工具测试发出 OPTIONS 请求,返回的也是204 No Content
, 但是在浏览器里请求还是 307.
试过清理浏览器缓存,一开始正常了,也是返回204 No Content
,但是过几天后,又是出现307 Internal Redirect
然而今天通过抓包工具 Charles 抓取了一下,发现 Chrome 并没有真正发出这个 OPTIONS 请求,怀疑是直接读取了缓存。
那么这到底是哪来的缓存导致的?
1
virusdefender 2020-04-12 09:58:09 +08:00 1
hsts 的话,可能这个域名某些环境下会返回 hsts 头,然后这东西是有有效期的,过期了就好了
chrome://net-internals/#hsts 这里面看下 |