-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
浏览器同源策略/跨域方案 #21
Comments
跨域方案跨域资源共享跨域资源共享(CORS,Cross-Origin Resource Sharing)是浏览器为 AJAX 请求设置的一种跨域机制,让其可以在服务端允许的情况下进行跨域访问。主要通过 HTTP 响应头来告诉浏览器服务端是否允许当前域的脚本进行跨域访问。 跨域资源共享将 AJAX 请求分成了两类:简单请求和非简单请求。其中简单请求符合下面 2 个特征。
任意一条要求不符合的即为非简单请求。 对于简单请求,处理流程如下:
所以对于简单请求,服务器只需要设置响应头中的 Access-Control-Allow-Origin 即可。 当处理非简单的请求时,浏览器会先发出一个预检请求(Preflight)。这个预检请求为 OPTIONS 方法,并会添加了 1 个请求头部字段 Access-Control-Request-Methods,值为跨域请求所使用的请求方法。 下图是一个POST请求以及预检请求的请求报文和响应报文。因为添加了不属于上述简单请求的头部字段 在服务端收到预检请求后,除了在响应头部添加 Access-Control-Allow-Origin 字段之外,至少还会添加 Access-Control-Allow-Methods 字段来告诉浏览器服务端允许的请求方法,并返回 204 状态码。 在上面的例子中,服务端还根据浏览器的 Access-Control-Request-Headers 字段回应了一个 Access-Control-Allow-Headers 字段,来告诉浏览器服务端允许的请求头部字段。 浏览器得到预检请求响应的头部字段之后,会判断当前请求服务端是否在服务端许可范围之内,如果在则继续发送跨域请求,反之则直接报错。比如上述例子服务器若未回应 Access-Control-Allow-Headers 字段,则会抛出错误 Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response. 与跨域相关的协议头
|
壮哥,加个vx呗 |
浏览器的同源策略(Same Origin Policy)
源(Origin)是由 URL 中 protocol、host(domain)以及 port 共同组成的部分。协议、主机名(域名)、端口号完全相同时,才是同源
访问非同源资源时就会产生跨源,即跨域。同源策略就是用来限制其中一些跨源访问的:
iframe
的 domCookie
、Storage
https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy
The text was updated successfully, but these errors were encountered: