跨域访问分为两种:
- 简单请求
-
简单请求
GET/HEAD/POST方法之一- 头部仅包含:
AcceptAccept-LanguageContent-LanguageContent-Type
Cotnent-type的值只能是:text/plainmultipart/form-dataapplication/x-www-form-urlencoded
简单请求的交互:
- 请求中携带
Origin头部告知来自哪个域 - 服务端设置
Access-Control-Allow-Origin即可复杂请求
访问资源前需要先发起preflight预检请求(方法为options)询问何种请求是被允许的
复杂请求的交互:
- 先发起预检请求
- 请求头中带上
Access-Control-Request-MethodAccess-Control-Request-Headers
- 响应头中返回
Access-Control-Allow-MethodAccess-Control-Allow-HeadersAccess-Control-Max-Age
- 请求头中带上
- 预检请求通过之后,再发起正式请求
- 请求头部跟预检请求差不多,再加一个
Origin - 响应头中返回
Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-MethodAccess-Control-Expose-HeadersAccess-Control-Allow-CredentialsAccess-Control-Max-Age
- 请求头部跟预检请求差不多,再加一个
可以发现预检请求主要是检查请求方法和请求头是否合法,合法才发起正式请求
