为何抓到的包有2条重复的请求?(一条OPTIONS,一条GET/POST/其他)

抓包的时候,有时会看到浏览器发送了2次接口相同的请求,第一条是OPTIONS,不会返回任何数据,也就是response body 里面没有内容,调第二次相同的接口会有response body 里会显示实际请求的数据。

为何抓到的包有2条重复的请求?(一条OPTIONS,一条GET/POST/其他)_第1张图片

OPTIONS请求:

options请求的官方定义:OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

用白话说就是:在发生正式的请求之前,先进行一次预检请求。看服务端返回一些信息,浏览器拿到之后,看后台是否允许进行访问。

为什么会用到OPTIONS请求?

1、产生了复杂的请求

  首先说下简单请求,复杂请求就是它的对立面。

(1 )get/post/head请求

(2 )content-type 为text/plain、multipart/form-data、application/x-www-form-urlencoded

 eg:   如果是使用application/json做数据交互的话,那么就是为复杂请求,需要先发个options

2、跨域

什么是跨域?

概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。

eg:  

URL 是否跨域 说明

http://www.a.com/a.js

http://www.a.com/b.js

同一域名下 允许

http://www.a.com/lab/a.js

http://www.a.com/script/b.js

同一域名下不同文件夹 允许

http://www.a.com:8000/a.js

http://www.a.com/b.js

同一域名,不同端口 不允许

http://www.a.com/a.js

https://www.a.com/b.js

同一域名,不同协议 不允许

像如果协议、端口不同,就需要通过后台去解决。像springboot 或ssm项目都有不同的解决办法

 

总结:只要是带自定义header的跨域请求,在发送真实请求前都会先发送OPTIONS请求,浏览器根据OPTIONS请求返回的结果来决定是否继续发送真实的请求进行跨域资源访问。所以复杂请求肯定会两次请求服务端。

 

你可能感兴趣的:(fiddler抓包)