简单请求
- 请求中携带Origin头部告知来自哪个域
- 响应中携带Access-Control-Allow-Origin头部表示允许哪些域
- 浏览器方行
服务端的内容是否有效,是客户端来决定的,如果服务端响应中包含客户端域名,客户端则会应用服务端的返回结果
复杂请求
跨域访问资源:请求头部
- Origin(RFC6454):一个页面的资源可能来自多个域名,在AJAX等子请求中标明来源于某个域名下的脚本,以通过服务器的安全校验
- origin = “Origin:” OWS origin-list-or-null OWS”
- Access-Control-Request-Method
- 在preflight预检请求(OPTIONS)中,告知服务器接下来的请求会使用那些方法
Access-Control-Request-Headers
Access-Control-Request-Methods
- 在preflight预检请求的响应中,告知客户端后续请求允许使用的方法
- Access-Control-Allow-Headers
- 在preflight预检请求的响应中,告知客户端后续请求允许携带的头部
- Access-Control-Max-Age
- 在preflight预检请求的响应中,告知客户端该响应的信息可以缓存多久
- Access-Control-Expose-Headers
- 告知浏览器哪些响应可以供客户端使用,默认情况下只有Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pargma可供使用
- Access-Control-Allow-Origin
- 告知浏览器允许哪些域访问当前资源,*表示允许所有与。为避免缓存错乱,响应中需要携带Vary: Origin
- Access-Control-Allow-Credentials
- 告知浏览器是否可将Credentials暴露给客户端使用,Credentials包含Cookie,authorization类头部、TLS证书等。