什么是HTTP协议 ?
叫做超文本传输协议,他基于TCP/IP协议基础上做传输(知道这个概念就可以)。可以看下我之前在网上看过一张很经典的图:
可以简单理解为:在 发送端 和 接收端 之间的这个超文本解析方式协议就是HTTP协议
为了通俗易懂我这里把他拆出来,先在linux上面讲解。因为不管是浏览器还是linux传输这个都是依据http协议。
1、首先通过linux的 curl 命令来请求接口:
curl -v blog.csdn.net/phoenix/web…
那么linux是怎么知道哪个是响应头,哪个是响应内容呢,就是根据换行符来决定的。仔细看上面的请求部分、响应头、响应内容,都有个换行,linux就是根据这个识别的,那么可以推测浏览器也可能是根据这个来识别。当然浏览器展示的更直观。
为什么每次会有options请求 ?
options(预检/嗅探请求)可能会导致请求变慢,每次进行接口请求时候,浏览器会先发出一个options请求,然后才发起正式的请求。
那么为什么会有options请求呢,导致它的原因是:在cros跨域请求下浏览器将请求分为两种:1、简单请求,2、非简单请求(复杂请求) ,在非简单请求下,就会有options请求。
简单请求: (属于以下几点的就是简单请求,其他的都是非简单请求)
· 请求方式有且只限于:GET、POST、 HEAD
· 请求头不超出以下字段(且没有其他自定义字段):
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
解决办法(优化):可以通过设置响应头部的 Access-Control-Max-Age 来设置预检请求有效期,即在设置的时间内只有第一次会发送出数据,下次这个接口请求(相同接口&相同参数时)不会再发出这个预检请求,
而是发送真请求。
方法1、通过nginx添加响应头
location /test/ {
add_header ‘Access-Control-Max-Age’ 600;
proxy_pass http://a**********/;
}
方法2、后端直接设置这个响应头并设置时间
****注意:在Chrome浏览器在debug状态,或者勾选上Disable cache,这个配置将失效。