http
请求方法包括:post
、get
、put
、delete
、options
等
对于除get
请求以外的http
请求
如果存在跨域请求
浏览器必须首先使用options
方法询问服务端是否允许跨域请求,然后才发起真正的请求,options
请求称为预检请求
http请求首部字段,预检请求发送给服务器
origin
- 预检请求或实际请求的原域名
- 不管是否为跨域请求
origin
字段总是被发送
access-control-request-method
- 预检请求
- 将实际请求的
http
方法告诉服务器
access-control-request-headers
- 预检请求
- 将实际请求所携带的首部字段告诉服务器
http响应首部字段
access-control-allow-origin
- 服务器允许跨域访问的域
- 对于不需要携带身份凭证
- 服务器可以配置该属性为“*”
access-control-allow-origin: www.baidu.com
access-control-allow-methods
- 服务器允许跨域请求的方法
- 用于预检请求的响应
access-control-allow-headers
- 服务器允许跨域请求携带的首部字段
- 用于预检请求的响应
- 可以自定义
access-control-allow-headers: app-id
access-control-allow-credentials
- 服务器允许跨域请求携带身份凭证(
cookies
、authorization headers
、tls client certificates
等) - 如果允许,设置为
true
- 如果不允许则不需要设置,因为此属性只有
true
一个可选值 - 并且对于附带身份凭证的请求
access-control-allow-origin
不能使用通配符
access-control-allow-credentials: true
access-control-expose-headers
- 服务器允许浏览器访问的头
- 默认情况下:
- 浏览器只能获取到
cache-control
、content-language
、content-type
、expires
、last-modified
等
access-control-max-age
- 服务器设置
options
预检的缓存时长(以秒为单位) - 在缓存时长内
- 这个域不再发起预检请求
- 可以直接发起真正的
http
请求
access-control-max-age: 28800
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持3w代码。
发表评论