假设我有一个 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-Credentials
、Access -Control-Allow-Methods
、Access-Control-Allow-Headers
和 Access-Control-Expose-Headers
header 。这些不同的 header 使服务器可以对配置其 CORS 行为进行细粒度控制。
因此,在您的示例中,恶意服务器可以设置这些 header ,但 header 本身不会执行任何操作。客户端需要做出有意识的决定才能向恶意服务器发送请求。实际上,客户端本身必须是恶意的。
关于javascript - 哪个服务器需要返回 Access-Control-Allow-Origin header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018696/