同源策略和跨域
大约 2 分钟
同源策略和跨域
同源策略(Same-Origin Policy)最早由Netscape公司提出,是浏览器的一种安全策略
- 同源: 协议 域名 端口号 均一致
- 跨域: 违背同源策略就是跨域,
- 具体表现: 如果在
a.com
的页面中向b.com
的服务器的发送请求报文,则其响应报文会被浏览器拦截.
CROS跨域(源)资源共享
CROS(Cross-Origin Resource Sharing)跨域(源)资源共享,解决跨域资源共享的解决方案.
特点: 不需要在客户端做特殊操作,解决跨域的步骤完全在服务器中进行.
工作原理: 通过设置一个响应头来告诉浏览器该请求允许跨域
Access-Control-Allow-Origin: *
完整访问控制请求头
Access-Control-Allow-Origin: URL或*
指定了允许访问该资源的外域Access-Control-Expose-Headers: 自定义响应头名1, 自定义响应头名2
使得客户端能够获取到自定义的响应头Access-Control-Max-Age: <delta-seconds>
指定了 preflight 请求的结果能够被缓存多久Access-Control-Allow-Credentials: true
指定跨域请求时候能够携带验证信息,如cookieAccess-Control-Allow-Methods: <method>[, <method>]*
设置请求允许的方法,默认仅支持 GET POST HEADAccess-Control-Allow-Headers: <field-name>[, <field-name>]*
设置允许的请求头的头名,默认仅支持9个请求头
CORS请求分类
- 简单请求 :
- 请求方式必须为:
GET
POST
HEAD
- 请求头必须: 不能包含自定义请求 ,仅能包含默认支持9个请求头
- 简单请求仅会在客户端和服务端之间发送一次请求,
- 请求方式必须为:
- 预检请求 :
- 请求方式: 除去
GET
POST
HEAD
之外的请求 - 请求头为: 请求头中包含自定义的头部 或包含
application/json
- 预检请求会在客户端和服务端之间发送两次请求,第一次会发送OPTIONS类型的请求进行预检,之后才会发送真正的请求
- 请求方式: 除去
预检请求
在浏览器和服务器通信前,浏览器会先发送OPTIONS类型的请求进行预检,以获知服务器是否允许该实际请求,
服务器响应OPTIONS类型的请求后浏览器才会发送真正的请求并携带真实的数据