cors是作为中间件解决跨域,实现代码
npm i cors
const cors=require('cors')
app.use(cors())
注意事项
- cors只需要在服务端配置,客户端不用配置
- cors在浏览器中有兼容性,只支持XMLHttpRequest Level2开启了cors的服务端口(ie10+,Chrome4+,FireFox3.5+)
cors响应头部Access-Control-Allow-Origin:*表示来自任何域的请求
//实现方式
response.setHeader('Access-Control-Allow-Origin','*')
//也可以指定为某个域名只有http://wcg.cn这个域名可以访问到
response.setHeader('Access-Control-Allow-Origin','http://wcg.cn')
cors响应头部Access-Control-Allow-Headers,客户端仅支持向服务器发送以下九个请求头:
Accept
Accept-Language
Content-Language
DPR
Downlink
Save-Data
Viewport-Width
Width
Content-Type(值只限于text/plain、multipart/form-data、application/x-www-form-urlencoded)
当客户端发送额外的头信息,需要在服务端,通过Access-Control-Allow-Headers声明
response.setHeader('Access-Control-Allow-Headers','Content-Type, X-Custom-Header')
cors响应头部Access-Control-Allow-Methods,cors仅支持客户端向服务端发送的GET,POST,HEAD请求,如果客户端发送的请求包括其他的如DELETE,PUT请求资源则需要声明
response.setHeader('Access-Control-Allow-Methods','GET,POST,HEAD,DELETE,PUT')
//允许所有
response.setHeader('Access-Control-Allow-Methods','*')
简单请求
满足两大条件:
- 请求方式为GET,POST,HEAD三者之一
- http头部信息不超过以下字段: Accept
Accept-Language
Content-Language
DPR
Downlink
Save-Data
Viewport-Width
Width
Content-Type(值只限于text/plain、multipart/form-data、application/x-www-form-urlencoded)
预检请求
包括下列任何一个请求
- 请求方式为GET,POST,HEAD之外的请求
- 请求头包括自定义头部
- 例如向服务器发送了application/json格式的数据,即简单请求的对立
预检请求浏览器会先发送OPTION请求预检,以获取服务器是否允许请求,服务器响应成功预检后才会正式请求并响应数据
预检请求和简单请求区别
- 简单请求:客户端与服务器只发生一次请求
- 预检请求:客户端与服务端发送两次请求,一次预检请求option之后发生一次真正的请求