http协议的请求方式有哪些?
| 方法 | 说明 |
|---|---|
| GET | GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据. |
| POST | POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或. |
| PUT | PUT方法用请求有效载荷替换目标资源的所有当前表示 |
| DELETE | 删除指定资源 |
| OPTIONS | 用于描述目标资源的通信选项 |
| HEAD | HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体.简言之获取报文主体 |
| TRACE | TRACE方法沿着到目标资源的路径执行一个消息环回测试。 |
| CONNECT | 要求用隧道协议链接代理. |
| PATCH | PATCH方法用于对资源应用部分修改. |
为什么会发送options请求?
options属于带预检的跨域请求(preflighted request),在真正请求发送之前,浏览器会发送一个请求方法为options的预检请求,用来查询针对请求服务器支持的方法,如果得到的响应是拒绝的,比如404,500等,请求就不会发送真正的请求,
跨域分为简单跨域请求和复杂跨域请求
简单跨域请求不会发送options预检请求
复杂跨域请求会发送一个options预检请求
复杂跨域请求满足一下任何一个条件都会触发:
- 请求方法非
GET/POST/HEAD时 - Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
- 请求设置了自定义的header字段
就会在控制台中network中请求2个,一个是options请求,一个是真正的请求,如下:
解决跨域可以在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();
});
请大佬们多多指点小弟!