我正在阅读 Cross-Origin Resource Sharing标准,有一件事对我来说没有意义。
假设我想从域 A 向域 B 发送请求,包括授权 header 。据我了解,域 B 上的服务器需要通过发送 header Access-Control-Allow-Headers 来接受这一点。
这有什么意义?我认为同源策略是为了保护来自域 B 的数据不泄露到域 A 上的网站。我不明白 A 向 B 发送哪些 header 有什么关系。
最佳答案
请注意,预检请求存在的全部原因是为您在 CORS 之前无法执行的请求提供保护。每个简单的请求(例如不需要预检的请求)都可以使用现有机制完成。例如,没有自定义 header 的 GET 请求类似于 JSONP 请求,而没有自定义 header 的 POST 请求类似于 JavaScript form.submit()。服务器必须已经准备好接收来自其他域的这些类型的请求,因为它们可以在没有 CORS 的情况下执行。
CORS 为服务器引入了一系列新的 HTTP 方法和 header 。为了验证服务器是否准备好响应这些请求,引入了预检的概念。预检验证在将实际请求发送到服务器之前是否允许特定的 HTTP 方法/ header 组合。
为什么不发送实际的请求,而只是阻止客户端接收响应呢?实际请求可能会产生副作用(例如,更新或删除数据库条目),而仅发送请求就可能触发副作用。
发送预检并验证 HTTP header ,确保服务器不会对 CORS 引入的新型请求感到惊讶。
关于html - Access-Control-Allow-Headers header 有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17992042/