cors跨域请求
2017-06-12 17:35
155 查看
说明
协议(http,https等),域名,端口任何一个不同,浏览器请求将会发生跨域请求。跨域资源共享(cors)允许web应用服务器进行跨域访问控制。从而使跨域数据传输得以安全进行。cors需要客户端和服务器同时支持,目前所有的浏览器都支持该机制。
跨资源共享标准新增了一组http首部字段,允许服务器声明那些源站有权限访问哪些资源。对那些可能对服务器数据产生副作用的的http请求方法(特别是GET以外的http请求),浏览器必须使用OPTIONS方法发起一个预检请求(preflight request),从而获知服务器是否允许该跨域请求。
服务器确认允许之后,才发起实际的http请求。
简单请求
某些请求不会触发 CORS 预检请求。本文称这样的请求为“简单请求”。同时满足一下所有条件可视为简单请求。
1.使用如下方法:HTTP,HEAD,POST
2.content-type属于以下几种:application/x-www-form-urlencoded,multipart/form-data,text/plain
跨域请求服务器返回Access-Control-Allow-Origin: *,表明Origin(请求来源)所指定的任何域名都可以访问,如果写某几个,则除了所写的以外都不可以访问。
非简单请求
预检请求当满足以下任何一个条件时,使用 OPTIONS方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。
1.使用了以下任何一个http方法:PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH
2.人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。即不属于以下集合的,该集合为:Accept,Accept-Language,Content-Language,Content-Type ,DPR,Downlink,Save-Data,Viewport-Width,Width.
3.content-type不属于以下几种:application/x-www-form-urlencoded,multipart/form-data,text/plain
HTTP 请求首部字段
如预检请求中,在OPTIONS头中有Origin:
它不包含任何路径信息,只是服务器名称。
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Sid
向服务器说明请求使用POST方法,且有自定义的头Sid。
HTTP 响应首部字段
Access-Control-Allow-Origin: *
服务器返回Access-Control-Allow-Origin允许来自任意域名的请求
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Sid, Content-Type
服务器返回Access-Control-Allow-Origin允许来自任意域名的请求。允许的方法和允许携带的header。
Access-Control-Expose-Headers: X-Another-Custom-Header
首部字段指定了服务端允许的首部字段集合。
Access-Control-Max-Age:
首部字段指明了预检请求的响应的有效时间.
Access-Control-Allow-Credentials: true
相关文章推荐
- react中fetch之cors跨域请求的实现方法
- 浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
- Java实现CORS跨域请求的实现方法
- Java实现CORS跨域请求
- 启用 CORS 来解决这个问题(ajax跨域请求)
- CORS--跨域请求原理
- 跨域请求解决方法(JSONP, CORS)
- JQuery Mobile, Cordova的跨域CORS请求
- spring mvc+Ajax跨域请求-CORS方式
- CORS跨域请求之简单请求与非简单请求
- CORS——跨域请求那些事儿
- Nginx反向代理、CORS、JSONP等跨域请求解决方法总结
- 跨域请求的完美解决方法(JSONP, CORS)
- 跨域请求两种方法 jsonp和cors的实现
- Ajax请求的跨域(CORS)问题
- WebApi Ajax 跨域请求解决方法(CORS实现)
- Java - Spring MVC 实现跨域资源 CORS 请求
- Nginx反向代理、CORS、JSONP等跨域请求解决方法总结
- 跨域请求——jsonp与cors
- Springmvc 支持 cors跨域请求