http协议

http基本格式

  • 请求报文:请求行(请求方法,请求url,http版本),消息报头(报文首部[请求行,请求首部字段{Accept,Accept-Language,Authorization,Cookie,Host,Referer,User-Agent},通用首部字段{Connect,Date,Transfer-Encoding,Update,Via,Cache-Control},实体首部字段{字段名和字段值组成,中间通过:分隔}],空行,报文主体),请求内容。

  • 响应报文:状态行(http版本,状态码,原因语句),消息报文(报文首部[状态行,响应首部字段{Age,Set-Cookie,Server,Retry-after,Refresh},通用首部字段,实体首部字段{Allow,Content-Location,Content-Encoding,Content-Length,Content-MD5,Content-Type}{字段名和字段值组成,中间通过:分隔}],空行,报文主体),响应内容。

找到一个思维导图,如下:

高清链接

HTTP的304

当客户端缓存了资源但是不确定是否是最新版本的时候,就会发送一个条件请求。客户端请求头重会有一个If-Modified-Since字段,值为服务器上次返回的Last-Modified响应头中的日期值,或If-None-Match请求头,值为服务器上次返回的ETag响应头的值。
服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回HTTP/304 Not Modified响应,但没有响应体.客户端收到304响应后,就会从缓存中读取对应的资源.

HTTP/1.1 304 Not Modified
Date: Wed, 20 Sep 2017 02:55:00 GMT
ETag: W/"4e5-Zg3sHPCCzRN/HV5jc1sXjQ"
Server: openresty
X-Proxy-Latency: 0

GET /hello HTTP/1.1
Host: wyc.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
If-None-Match: W/"4e5-Zg3sHPCCzRN/HV5jc1sXjQ"
原文地址:https://www.cnblogs.com/mentalidade/p/7058249.html