Http理解

2018-07-24  本文已影响0人  石器时代小古董

参考资料:
刘望舒的blog
玉刚说
cache-control
木上有水的blog

一、Http的特性

1.灵活的

可以通过Content-Type和Content-Length传输任意类型的数据

2.无连接的

一次只完成一个请求,服务端处理完请求后会立即断开链接

3.无状态的

Http协议不会记录上一次连接的状态,如果想知道上一个连接的状态只能再次发起请求。

当然可以通过cookie和session来保存上一次连接的信息

二、URL的请求格式

http://host:port abs_path

host:指主机号

port:端口号,默认是80端口

abs_path:请求资源的url

三、报文格式

请求报文的格式通常是请求行,请求报头,请求体,请求数据


image.png

响应报文不同的是会携带协议版本,响应状态码,响应的错误原因


image.png

通用报头

既可以出现在请求报头,也可以出现在响应报头中

请求报头

请求报头通知服务器关于客户端求求的信息,典型的请求头有:

响应报头

用于服务器传递自身信息的响应,常见的响应报头:

实体报头

实体报头用来定于被传送资源的信息,既可以用于请求也可用于响应。请求和响应消息都可以传送一个实体,常见的实体报头为:

四、Http缓存

我们请求服务器资源成功后,可以将请求的资源缓存在本地,当下次再使用时,可以使用本地的缓存,这样既节省了带宽又节省了时间。但是在使用本地缓存时首先有几个步骤
1. 新鲜度的检测
当我们想要使用本地缓存时,首先会向服务器验证资源是否过期。这个是通过Cache-Control(Http1.1)或者是Expire(Http1.0)来判断的。再第一次请求下数据时,服务器会对响应体追加Cache-Control:max-age,它表示这个缓存最多缓存多长时间。超过了这个时间需要向服务器验证请求的新鲜度。要结合last-modifed的时间:表示从上一次修改的时间+最大缓存时间表示它过期的时间

private 表示只对当前用户缓存
public 对所有用户缓存
no-cache:强制所有用户在使用缓存前需要向服务器再验证
only-if-cached:如果缓存存在,只使用缓存

2. 验证
如果已经超过了缓存时间,那么需要向服务器进行验证。如果验证通过可以使用本地缓存,服务端会响应304。,如果没有通过,服务器返回200,将最新的数据返回给客户端,验证的方式有:

If-Modified-Since
If-None-Match
If-Unmodified-Since
If-Range
If-Match

1.If-Modified-Since
将我们缓存的last-modifed时间取出来,并添加到If-Modified-Since中传递给服务器。告诉服务器我们缓存数据的这段时间,数据是否有更改。

2.If-None-Match和Etag
在首次请求一个url时,服务器会返回一个Etag标志,表示这个数据的版本,再下一次请求这个url时,我们会将这个Etag的值放到If-None-Match中,然后服务器会取出这个值和服务器缓存的值是否一致,如果一致代表缓存没有过期。

image.png

四、实例:

模拟刷新了一个网页,可以看到浏览器类型是:Chrom 系统是Window。
请求类型是get,上一次修改的时间和服务器返回的修改时间一致,所以返回的是304,使用本地缓存。


image.png
上一篇 下一篇

猜你喜欢

热点阅读