CORS
Access-Control-Allow-Origin【控制是否允许浏览器交付返回数据给ajax】
前端发出的请求如果是附带身份验证(withCredentials:true)而后端的Access-Control-Allow-Origin如果设置的是*那么这个请求会失败,在Options预请求时会被拦截下来。
with-credentials=”true” ajax 告诉 浏览器 控制是否发送cookie
Access-Control-Allow-Credentials 服务器告诉 浏览器 是否允许返回给ajax(默认不允许)
Access-Control-Allow-Credentials: true【控制浏览器是否允许with-credentials=”true”请求的数据交付给ajax】
这个是服务端返回数据时携带的头,浏览器接受数据发现ajax请求有 Credentials,返回头没有Credentials,就禁止返回给ajax,ajax获取不到数据。
如果设置Acces-Control-Allow-Origin为*(任何域),则Access-Control-Allow-Credentials头不能设置为true
也就是:
- 当携带cookie 时,Acces-Control-Allow-Origin 不能为* 号
这样就是所有的ajax都可以【携带本地cookie】访问服务器。浏览器会拒绝。
仅仅access-control-allow-origin * 所有域名下ajax都可以【不携带cookie,with-credentials=”false”】访问服务器,接收返回数据。
Access-Control-Allow-Headers
如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的
非简单请求
非简单请求的预检命令
非简单请求,会有“预检命令”
预检命令会发送 content-type method,看服务器是否支持此类型跨域。
预检Access-Control-Request-Headers:content-type,所以response的Access-Control-Allow-Headers也要有content-type。
Access-Control-Max-Age
预检命令缓存时间