启动HTTP GET或POST请求时:
答案 0 :(得分:1)
一切都通过HTTP浏览器沙箱(不仅仅是AJAX调用!IFRAMEs基于相同的条件有限制,针对不同的事情 - 即,你无法控制另一个域/主机/端口/ proto上的IFRAME的内容,只需加载页面并查看加载内容的URI。JS中的内容是禁止的)是在客户端而不是服务器端完成的:您的浏览器将主动拒绝查询没有的内容:
对于AJAX,这会导致一个大的红色“由于安全而无法获得” - 发生错误。对于某些浏览器,请求确实发生:有一种方法可以使用访问控制头来绕过此限制。这些有效地告诉您的浏览器“我对 x ”很友好,其中x是域的通配符列表(其中 * 表示所有内容)。
为了解决这个问题,浏览器将执行请求,如果CORS未启用,则会主动触发异常(XMLHttpRequest: x is not allowed by y
)。但是,请求已经发生。
显而易见的解决方案是添加一个Access-Control-Allow-Origin标头,以表示对此站点的跨域查询是可以的。但是,请记住两件事:
因此,您需要一个针对IE的JSONP回退。但是,请记住所有这些都是客户端,并不能保证没有任何浏览器会主动忽略CORS或webkit安全模型。整个模型还依赖于客户端Host
解析。
答案 1 :(得分:1)
如果问题是“这是真的”,那么答案就是否定。
浏览器执行允许JavaScript跨域创建GET和POST请求。他们不允许的是javascript从跨域请求中读取响应。
HTTP标头中的“主机”表示发送请求的主机,而不是导致主机的网站。 HOST是必要的,因为服务器通常是共享的,一个服务器可能托管许多单独的网站,因此他们需要知道正在请求哪一个。
创建网站的网站通常(虽然并非总是)在“REFERER”HTTP标头中标识。
答案 2 :(得分:0)
支持CORS的服务器将检查请求中的Origin
标头。该值将如您所述,请求指定的服务器。在它的回复中,服务器将发送一个名为Access-Control-Allow-Origin
的标头。如果匹配Origin
,则浏览器将接受响应。它显然也要求浏览器支持CORS。
维基百科有一个相当不错的explanation of how it works。
答案 3 :(得分:-1)
Host
HTTP请求标头始终是请求转到的域。
如果您使用XMLHTTPRequest
方法启动HTTP GET或POST请求,那么如果发送它的JavaScript代码,它将不允许您发送请求与您发送请求的URL不在同一个域中 - 除非浏览器支持跨源资源共享。
如果浏览器 支持cross-origin resource sharing (CORS),那么它会将您的请求发送到其他域,但会有一个额外的Origin
标头,表明所投放的网站提出请求的JavaScript。如果服务器允许该请求,它将使用Access-Control-Allow-Origin
标头回复,列出它将接受请求的域。