跨域场景下Chrome/Edge未发送预检OPTIONS请求但Firefox正常
我在向同域及跨域服务器发送的请求头中均携带了Authorization令牌,服务器已配置针对OPTIONS预检请求返回如下响应头:
HTTP/1.1 204 No Content Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: https://10.26.97.22:10251(该值会动态设置为请求的源地址) Vary: Origin Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Headers: authorization Access-Control-Max-Age: 86400 Connection: keep-alive
上述响应头来自Firefox,在Firefox中请求可以正常工作,触发预检的POST请求也能顺利完成。但Chrome和Edge均无法正常请求,无额外错误提示,仅显示请求失败并抛出错误net::ERR_RESPONSE_HEADERS_TRUNCATED。
以下是Firefox下成功完成的POST请求响应头:
HTTP/1.1 200 OK Connection: keep-alive Date: Tue, 07 Nov 2023 00:05:49 GMT Content-type: application/json X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: https://10.26.97.22:10251(同样是动态设置的值) Vary: Origin Strict-Transport-Security: max-age=31536000 Referrer-Policy: no-referrer Content-Security-Policy: default-src 'none'; font-src 'self' data:; script-src 'self'; connect-src *; img-src 'self'; style-src 'self';base-uri 'self';form-action 'self'; Cache-Control: no-cache
我已尝试过清除浏览器缓存、使用无痕模式打开站点,以及禁用Web安全启动Chrome,仅在禁用Web安全时请求才能正常工作。
对比常规Chrome和Firefox的预检请求头如下:
常规Chrome的预检请求头:
Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Access-Control-Request-Headers: authorization Access-Control-Request-Method: POST Connection: keep-alive Host: 10.26.97.30:10261 Origin: https://10.26.97.22:10251 Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: cross-site User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
Firefox的预检请求头:
OPTIONS /homepage HTTP/1.1 Host: 10.26.97.30:10261 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0 Accept: */* Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Access-Control-Request-Method: POST Access-Control-Request-Headers: authorization Origin: https://10.26.97.22:10251 DNT: 1 Sec-GPC: 1 Connection: keep-alive Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: cross-site Pragma: no-cache Cache-Control: no-cache
内容的提问来源于stack exchange,提问作者banapaya
相关产品推荐
相关产品推荐

