处理 CORS 问题:Blob 请求和 `strict-origin-when-cross-origin` 提示
在现代 web 开发中,跨源资源共享(CORS)是一个常见的问题,尤其是在处理文件下载和 Blob 对象时。本文将探讨在请求服务端接口时,如何解决由于请求头包含 Blob 导致的 strict-origin-when-cross-origin 提示。

原因分析 :
Chrome 计划在85版开始 将其切换默认策略 no-referrer-when-downgrade 更换到 strict-origin-when-cross-origin. `strict-origin-when-cross-origin对于请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP).
什么是 CORS?
CORS(Cross-Origin Resource Sharing)是一种机制,允许或限制网页向不同源(域)请求资源。浏览器出于安全考虑,通常会限制跨域请求,只有在服务器明确允许的情况下,浏览器才能成功完成请求。
问题背景
当你在前端请求一个返回 Content-Type: text/csv 的接口时,如果请求头中包含 blob,可能会遇到 strict-origin-when-cross-origin 的提示。这意味着浏览器在跨域请求中,限制了所发送的请求头和数据,可能会导致请求被拒绝。
CORS 策略
strict-origin-when-cross-origin:这是一种安全策略,要求在跨域请求中,浏览器只发送源信息,而不发送完整的请求头。如果请求中包含未被服务器允许的自定义头(如blob),浏览器将拒绝该请求。
解决方案
1. 修改服务器的 CORS 设置
确保服务器的 CORS 设置允许请求中包含的所有必要头。服务器应在响应中添加以下头信息:
Access-Control-Allow-Origin: * |
2. 使用标准的请求头
尽量避免使用非标准或自定义的请求头,使用标准头(如 Content-Type)可以减少出现 CORS 问题的可能性。
3. 使用 fetch API 正确处理 Blob
使用 fetch API 发送请求时,确保设置适当的请求头。以下是一个下载文件并处理 Blob 的示例:
async function downloadFile() { |
4. 预检请求
在某些情况下,浏览器会发送一个 OPTIONS 请求作为预检请求。确保服务器能够正确处理这个请求,并返回适当的 CORS 头信息。
总结
strict-origin-when-cross-origin 提示通常是由于请求头未被服务器允许而导致的。通过正确配置服务器的 CORS 设置、使用标准请求头以及适当地处理 Blob 对象,您可以有效解决这个问题。





