CORS - 为什么需要Access-control-allow-origin标头?

时间:2013-08-05 14:51:16

标签: http cross-domain

前提:

当网站(http://example.com)尝试发出跨域请求时,浏览器会向标头Origin: http://example.com的跨源服务器(http://other-server.com)发送HTTP请求。如果http://other-server.com处的服务器批准http://example.com作为有效来源,那么它将1)无错误地响应并且2)将响应标头设置为Access-control-allow-origin: http://example.com

我的问题是 - 为什么有必要在响应中设置Access-control-allow-origin标头?没有错误的响应是否已经确认服务器(http://other-server.com)允许跨源请求?

1 个答案:

答案 0 :(得分:2)

这一额外的确认层使服务器在支持CORS方面具有很大的灵活性。例如:

1)设置Access-Control-Allow-Origin标头时,服务器有很多选择。它可以使用*值来允许所有客户端,也可以使用原始的实际值(例如http://example.com)来限制客户端的范围。如果服务器确实支持CORS,但不支持所有来源,则它可以正确响应,但Access-Control-Allow-Origin可以设置为http://notyourorigin.com

2)CORS通过Access-Control-Allow-MethodsAccess-Control-Allow-Headers预检响应标头提供更大的灵活性。这些标题超出了简单的二进制成功/错误HTTP状态,并提供了有关服务器支持和不支持的更多细微信息。

如上面的示例所示,没有任何上下文的错误响应可能会让用户感到非常困惑。如果你发出一个CORS请求,而你所得到的只是一个错误响应,你就不知道为什么那个请求失败了。你做错了吗?服务器是否支持CORS?如果没有任何附带信息,这很难搞清楚。 Access-Control-*为用户提供了更多上下文,因此他们可以有效地调试他们的CORS请求。