OPTIONS 方法在跨域请求(CORS)中的应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OPTIONS 方法在跨域请求(CORS)中的应用相关的知识,希望对你有一定的参考价值。

参考技术A OPTIONS 方法比较少见,该方法用于请求服务器告知其支持哪些其他的功能和方法。通过 OPTIONS 方法,可以询问服务器具体支持哪些方法,或者服务器会使用什么样的方法来处理一些特殊资源。可以说这是一个探测性的方法,客户端通过该方法可以在不访问服务器上实际资源的情况下就知道处理该资源的最优方式。

既然比较少见,什么情况下会使用这个方法呢?

采用Ajax跨域调用接口的时候,浏览器会自动发起一个 OPTIONS 方法到服务器。

自动发起的 OPTIONS 请求,其请求头包含了的一些关键性字段:

服务器收到预检请求后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。

上面的HTTP回应中,关键的是Access-Control-Allow-Origin字段,表示orgin 可以请求数据。该字段也可以设为星号,表示同意任意跨源请求。

CORS跨域请求限制-options预检请求

 1 var express = require("express");
 2 var app = express();
 3 
 4 // app.get("/a", function(req,res){
 5 //     // 设置" * "号表示允许任何域名来源的请求
 6 //     res.setHeader(‘Access-Control-Allow-Origin‘, ‘*‘);
 7 //     res.json({"a":100});
 8 // })
 9 
10 
11 // options预检请求
12 app.options("/a", function(req, res){
13     console.log(111111)
14     res.setHeader(Access-Control-Allow-Origin, *);  //允许请求的来源
15     res.setHeader(Access-Control-Allow-Headers, X-Test-Cors);  //允许当前自定义请求头访问
16     res.setHeader(Access-Control-Allow-Methods, POST, PUT, PATCH ,DELETE);  //允许使用当前三个请求方法
17      //跨域请求时间,单位为秒,即允许缓存该响应1000秒,在该时间范围内,不会再重复发预检请求
18     res.setHeader(Access-Control-Max-Age, 1000);
19     res.end(); //结束预检请求
20 })
21 
22 
23 // POST请求
24 app.post("/a", function(req,res){
25     res.setHeader(Access-Control-Allow-Origin, *);  //允许请求的来源
26     res.setHeader(Access-Control-Allow-Headers, X-Test-Cors);  //允许当前自定义请求头访问
27     res.setHeader(Access-Control-Allow-Methods, POST, PUT, DELETE);  //允许使用当前三个请求方法
28     res.json({"a":100});
29 })
30 
31 app.listen(3000);

 

以上是关于OPTIONS 方法在跨域请求(CORS)中的应用的主要内容,如果未能解决你的问题,请参考以下文章

在跨域ajax post中的回调函数中获取未定义

http options请求

CORS跨域请求限制-options预检请求

使用 CORS 的 OPTIONS 请求宁静的跨域

客户端ajax请求为实现Token验证添加headers后导致正常请求变为options跨域请求解决方法

cors跨域之简单请求与预检请求(发送请求头带令牌token)