javascript - 哪个服务器需要返回 Access-Control-Allow-Origin header ?

标签 javascript cors same-origin-policy

假设我有一个 HTML 页面,由 example.com 提供。它向 targetServer.com 发出 javascript ajax 请求

哪个服务器需要返回 Access-Control-Allow-Origin="(something)"?

它是目标服务器还是提供原始 HTML 页面的服务器(即 example.com)?

[我知道这可能是显而易见的,但是网络上的文档似乎暗示目标服务器必须发送并允许“example.com”的原始 header ,但是如果这是一项安全功能,恶意的 targetServer.com 不会总是提供合适的允许来源 header 吗? example.com 会给浏览器提供一个除了 example.com 之外还允许调用的服务器列表,这是有道理的]

最佳答案

目标服务器需要设置Access-Control-Allow-Origin header 。

CORS 旨在保护服务器免受意外的跨源请求的影响。在 CORS 存在之前的世界中,浏览器的 same-origin policy 可以保护服务器免受跨源请求的影响。 。如果所有服务器自动允许 CORS,则此同源契约(Contract)将被破坏,并且服务器将收到意外请求。为了防止这种情况,CORS 规范作者让服务器负责规定允许哪些类型的跨源请求。

服务器不仅可以使用 Access-Control-Allow-Origin header 来执行此操作,还可以使用 Access-Control-Allow-CredentialsAccess -Control-Allow-MethodsAccess-Control-Allow-HeadersAccess-Control-Expose-Headers header 。这些不同的 header 使服务器可以对配置其 CORS 行为进行细粒度控制。

因此,在您的示例中,恶意服务器可以设置这些 header ,但 header 本身不会执行任何操作。客户端需要做出有意识的决定才能向恶意服务器发送请求。实际上,客户端本身必须是恶意的。

关于javascript - 哪个服务器需要返回 Access-Control-Allow-Origin header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018696/

相关文章:

javascript - javascript中的同源策略在哪里实现?

javascript - 我如何使用 jquery 从左到右或从右到左滑动图像?

javascript - 函数声明是否在 Javascript 中创建对象?

javascript - 现有的单元测试框架可以测试 NodeJs 服务器端和客户端吗?

javascript - 由于 CORS,HTTP 身份验证请求在浏览器中失败,在 Node 中正常

http - 在子域中设置 document.domain 如何影响域的 cookie?

javascript - 在运行时创建一个函数

javascript - Google reCAPTCHA、405 错误和 CORS 问题

angularjs - PUT/DELETE 出现 403 错误,但 GET/POST 有效

http - 我什么时候应该在响应 header 中真正将 "Access-Control-Allow-Credentials"设置为 "true"?