哪个服务器需要返回Access-Control-Allow-Origin标头?

时间:2014-06-03 15:09:39

标签: javascript cors allow-same-origin

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

哪个服务器需要返回Access-Control-Allow-Origin =“(某事)”?

是targetServer还是提供原始HTML页面的服务器(例如example.com)?

[我知道这可能是显而易见的,但网络上的文档似乎暗示targetServer必须发送和“example.com”的allow-origin标头但是如果这是一个安全功能,恶意的targetServer.com不会总是提供合适的allow-origin标头吗?有意义的是,除了example.com之外,example.com还会向浏览器提供允许调用的服务器列表。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

你误解了安全问题。

CORS的目的是防止其他网站上的Javascript从您的网站上读取敏感信息。

因此,您的网站必须明确说明允许哪些来源读取其数据。