HTTP笔记|青训营

116 阅读2分钟

什么是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,这个配置将失效。