当请求的凭据模式为 include 时,相应中的 Access-Control-Allow-Origin 标头的值不能是通配符 "*"

  • 如在请求定义中设置 withCredentials 标志,则会在请求中传递 cookie 等。
  • 如果服务器返回任何 set-cookie 响应头,那么必须返回 Access-Control-Allow-Credentials: true , 否则将不会在客户端上创建 cookie
  • 如果你这样设置,你需要同时指定了确切的 Access-Control-Allow-Origin 响应头,因为 Access-Control-Allow-Origin: 不具有凭证兼容

所以,当请求中携带 cookie 时, Access-Control-Allow-Origin 必须要有确切的指定,不能是通配符 (*),而 withCredentials 是跨域安全策略的一个东西。

HTTP 请求方式有许多种,有些请求会触发 CORS 预检请求。需预检的请求会使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。

  • 对于跨域请求浏览器一般不会发送身份凭证信息。如果要发送凭证信息,需要设置 XMLHttpRequestwithCredentials 属性为 truewithCredentials: true 。此时要求服务器的响应信息中携带 Access-Control-Allow-Credentials: true ,否则响应内容将不会返回。
  • 对于携带身份凭证的请求,服务器不得设置 Access-Control-Allow-Origin 的值为 “*”。因为请求头携带了 Cookie 信息。要将 Access-Control-Allow-Origin 的值设置为 http://www.zrt.local:8080
  • 另外,响应头中也携带了 Set-Cookie 字段,尝试对 Cookie 进行修改。如果操作失败,将会抛出异常。