2020-11-11 跨域
2020-11-11 本文已影响0人
宇宙区长李小无
CORS:跨域资源共享,来解决ajax请求在游览器中同源策略的限制。主要取决于后端设置响应头。
简单请求
- GET、POST、HEAD
- 请求头只包含以下字段:
- Accept;
- Accept-Language;
- Content-Language;
- Last-Event-ID;
- content-type只包含三种字段,multipart/form-data、application/x-www-form-urlencoded、text/plain
在发送简单请求时,浏览器自动添加origin字段,服务端会判断该字段是否合法,如果合法则返回一系列关于access-control...字段
- Access-Control-Allow-Origin(必须): */fromOrigin
- Access-Control-Allow-Credentials: false/true
是否允许浏览器发送cookie - Access-Control-Expose-Headers:客户端可以拿到的额外字段
CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma
复杂请求
PUT、DELETE或者content-type为application/json,这时浏览器会先发出一个预检请求OPTIONS
该请求头中除了origin字段,还有两个特殊的字段:
- (1)Access-Control-Request-Method
声明请求的方式; - (2)Access-Control-Request-Headers
声明请求头所携带的额外字段
服务端在校验了这些字段后,会在响应头中包含Access-Control-Allow-Origin、Access-Control-Allow-Methods为主的字段,第二个字段主要包含了服务端允许的所有服务端支持的跨域请求方式,避免重复请求。
如果上述两个字段都通过,则客户端再发起一次正常请求,否则客户端报错。