简单请求

  • 请求中携带Origin头部告知来自哪个域
  • 响应中携带Access-Control-Allow-Origin头部表示允许哪些域
  • 浏览器方行

image.png
服务端的内容是否有效,是客户端来决定的,如果服务端响应中包含客户端域名,客户端则会应用服务端的返回结果

复杂请求

image.png

跨域访问资源:请求头部

  • Origin(RFC6454):一个页面的资源可能来自多个域名,在AJAX等子请求中标明来源于某个域名下的脚本,以通过服务器的安全校验
    • origin = “Origin:” OWS origin-list-or-null OWS”
  • Access-Control-Request-Method
    • 在preflight预检请求(OPTIONS)中,告知服务器接下来的请求会使用那些方法
  • Access-Control-Request-Headers

    • 在preflight预检请求(OPTIONS)中,告知服务器接下来请求会传递那些头部

      跨域访问资源:响应头部

  • 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证书等。