解读http请求方式--OPTIONS

1,625 阅读2分钟

http协议的请求方式有哪些?

方法说明
GETGET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.
POSTPOST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或.
PUTPUT方法用请求有效载荷替换目标资源的所有当前表示
DELETE删除指定资源
OPTIONS用于描述目标资源的通信选项
HEADHEAD方法请求一个与GET请求的响应相同的响应,但没有响应体.简言之获取报文主体
TRACETRACE方法沿着到目标资源的路径执行一个消息环回测试。
CONNECT要求用隧道协议链接代理.
PATCHPATCH方法用于对资源应用部分修改.

为什么会发送options请求?

options属于带预检的跨域请求(preflighted request),在真正请求发送之前,浏览器会发送一个请求方法为options的预检请求,用来查询针对请求服务器支持的方法,如果得到的响应是拒绝的,比如404,500等,请求就不会发送真正的请求,

跨域分为简单跨域请求和复杂跨域请求 简单跨域请求不会发送options预检请求 复杂跨域请求会发送一个options预检请求

复杂跨域请求满足一下任何一个条件都会触发:

  1. 请求方法非GET/POST/HEAD
  2. Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
  3. 请求设置了自定义的header字段

就会在控制台中network中请求2个,一个是options请求,一个是真正的请求,如下:

image.png

解决跨域可以在app.js中设置跨域资源共享(cors),如下:

app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*"); //
    res.header("Access-Control-Allow-Headers", "Content-Type, X-Requested-Withs, SessionToken");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

请大佬们多多指点小弟!