当我们需要调用Ajax请求时,我们这样做:
if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
else
{
var versions = ["Microsoft.XmlHttp",
"MSXML2.XmlHttp",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.5.0"
];我已经知道,使用XMLHttpRequest-2,我们可以提出一个跨源请求和,其中添加了origin。
问题:
- Is it added when a browser (that support CORS) is performing a request ? ( cross domain or non-cross-domain?)
- Or is it added automatically when the browser "sees" that the request target origin is different from the current origin...
我的意思是:粗体线是什么意思?
跨源HTTP请求有一个原产地报头.此标头向服务器提供请求的来源。此标头受浏览器保护,不能从应用程序代码中更改。本质上,它是在跨文档消息传递中使用的消息事件上发现的原始属性的网络等效。源标头不同于旧的引用程序sic标头,因为引用程序是一个完整的URL,包括路径。由于路径可能包含敏感信息,因此浏览器有时不会发送引用,以保护用户隐私。但是,浏览器总是在必要的时发送所需的源标头。
发布于 2013-04-13 14:06:11
原产地报头
当添加这个标题的时候?
在标头阶段,在发送文档正文之前(在open之后,在send之前)。
它是在浏览器(支持CORS)执行请求时添加的吗?(跨域还是非跨域?)
当原点与创建XMLHttpRequest的页面不匹配时添加,但也可以在相同的原点请求中发送。
或者当浏览器“看到”请求目标源与当前源不同时,它会自动添加.
是。
但是,在必要时,浏览器将始终发送所需的原产地标头。
这是XMLHttpRequest规范的一部分;如果您正在进行跨域请求,则在请求标头中会发送额外的报头。该标头是例如Origin: http://www.stackoverflow.com,由标准跟踪浏览器附加,不需要用户交互。
您可以在MozillaWiki安全科、WHATWG和html5.org中阅读有关规范的更多信息。据我所知,它是由FireFox和Google实现的。我不相信这是W3C的一部分。此外,不假定原始标头是真,因为它可以由修改的硼砂器或其他软件手动设置。
发布于 2013-04-13 13:51:46
当您执行跨域请求时,源标头将自动添加(通常)。
为了测试它,我打开了这个页面上的控制台,并发出了两个不同的请求:一个是针对另一个域的请求,另一个是“/”的请求,第一个请求是添加了源标头。
顺便说一句,我正在使用JQuery,我建议您也使用它,以便具有相同的跨浏览器行为。
有关这一主题的补充信息,请查看以下内容:
首先要注意的是,一个有效的CORS请求总是包含一个。此源标头由浏览器添加,不能由用户控制。该报头的值是请求来源的方案(例如http)、域(例如bob.com)和端口(仅当它不是请求的默认端口(例如81)时才包括在内;例如:http://api.alice.com。 Origin的存在并不一定意味着请求是一个跨源请求。虽然所有跨源请求都将包含一个原产地头,但一些相同来源的请求也可能包含一个。例如,火狐在相同来源的请求中不包括原产地标题。但是Chrome和Safari在相同来源的POST/PUT/DELETE请求上包含了一个Origin (相同来源的GET请求不会有)。
来源
https://stackoverflow.com/questions/15988323
复制相似问题