CORS和Origin标?(CORS and Origin header?)

2019-08-22 17:17发布

当我们需要调用一个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我们可以做一个跨源请求起源头被添加。

题:

  • 什么时候这个头添加?

    • 当一个浏览器(的支持CORS)正在执行的请求它添加? (跨域或非跨域?)
    • 或者是自动添加时浏览器的“发现”该要求对象的起源是从当前原点不同...

我的意思是:什么他**不粗线是什么意思?

跨域的HTTP请求有一个Origin标。 这头提供与请求的起源服务器。 这头是由浏览器保护,不能在应用程序代码更改。 在本质上,它是相当于网络上跨文档消息中使用的消息事件中发现的起源财产。 原点头不同于较旧的referer [原文如此]报头,所述引用者是包括路径一个完整的URL。 由于路径可能包含敏感信息,引荐有时浏览器不试图保护用户隐私发送。 但是,浏览器总是会在必要时发送所需的起源头

Answer 1:

Origin标头

当这个头被添加?

在头部的阶段,发送文档的身体前(后open ,前send )。

是不是当一个浏览器(的支持CORS)正在做的请求添加? (跨域或非跨域?)

当原点不匹配从中创建了XMLHttpRequest的页面被添加,但也可在同一来源的请求一起发送。

或者它会自动添加,当浏览器的“发现”该要求对象的起源是从当前原点不同...

是。

但是,浏览器总是会在必要时发送所需的起源头。

这是XMLHttpRequest的规范的一部分; 如果你正在做一个跨域请求,请求头的额外头中发送。 此报头是如Origin: http://www.stackoverflow.com并且通过标准的以下无需用户交互的浏览器追加。


你可以阅读更多关于规范MozillaWiki的安全部分WHATWG和html5.org 。 它由(据我所知),火狐和谷歌Chrome实现。 我不相信它是W3C的一部分呢。 此外不承担原点标题是真实的 ,因为它可以通过修改borwsers或其他软件手动设置。



Answer 2:

原点头被自动添加(一般),当你做跨域请求。

为了测试它,我打开这个页面上的控制台,并做了两个不同的要求:一个是另一个域,一个用于“/”,只是在第一次拿到起源头加入。

顺便说一句,我使用jQuery的它,我真的建议你才能有相同的行为跨浏览器也使用它。

关于这一主题的补充信息,检查:

首先要注意的事情是,一个有效的CORS请求通常包含Origin标。 此Origin标头是由浏览器中加入,并且不能由用户来控制。 此报头的值是方案(例如HTTP),域(例如bob.com)和端口(只包括如果它不是一个默认端口,例如81),从所述请求发起; 例如: http://api.alice.com 。

起源报头的存在并不一定意味着该请求是一个跨来源请求。 虽然所有的跨域请求将包含Origin标,一些同源的请求可能有一个为好。 例如,Firefox不包括同源请求的Origin标。 但Chrome和Safari浏览器包括同源POST / PUT的Origin标/ DELETE请求(同源GET请求将不会有一个Origin标)。

资源



文章来源: CORS and Origin header?