HTTP知识总结

HTTP是基于TCP/IP协议的应用层协议,用于客户端和服务器之间的通信,默认80端口。我们按照他的发展历程的时间顺序开始说。

1. HTTP/0.9

1990年提出的,是最早期的版本,只有一个命令GET。

2. HTTP/1.0

缺点:每个TCP连接只能发送一个请求。
解决方法:Connection:keep-alive

3.HTTP/1.1

1997年1月提出,现在使用最广泛的。

特性

  1. 长连接:TCP连接默认不关闭,可以被多个请求复用。对于同一个域名,大多数浏览器允许同时建立6个持久连接。默认开启Connection:keep-alive。
  2. 管道机制:在同一个TCP连接里,可以同时发送多个请求。但是服务器还是要按照请求的顺序进行响应,会造成“队头阻塞”。

在google 中在同一个域名下,能够实现了一个连接进行并发请求 (多路复用)

通用首部字段

1、Cache-Control:操作缓存的工作机制

  • public:明确表明其他用户也可以利用缓
  • private:缓存只给特定的用户
  • no-cache:客户端发送这个指令,表示客户端不接收缓存过的响应,必须到服务器取;服务器返回这个指令,指缓存服务器(客户端)不能对资源进行缓存。其实是不缓存过期资源,要向服务器进行有效期确认后再处理资源。
  • no-store:指不进行缓存
  • max-age:缓存的有效时间(相对时间)
  • s-maxage: 代理服务器的缓存

2、Connection:

  • Connection:keep-Alive (默认持久连接)
  • Connection:不再转发的首部字段名

3、Pragma:兼容http1.0,与Cache-Control:no-cache含义一样。但只用在客户端发送的请求中,告诉所有的中间服务器不返回缓存。形式唯一:

Pragma:no-cache

请求首部字段

  1. Accept:通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级 q表示优先级的权重值,默认为q = 1.0,范围是0~1(可精确到小数点后3位,1为最大值)当服务器提供多种内容时,会先返回权重值最高的媒体类型
  2. Accept-Charset:支持的字符集及字符集的相对优先顺序,跟Accept一样,用q来表示相对优先级。这个字段应用于内容协商机制的服务器驱动协商。
  3. Accept-Encoding:支持的内容编码及内容编码的优先级顺序,q表示相对优先级。内容编码:gzip、compress、deflate、identity(不执行压缩或者不会变化的默认编码格式)。可以使用*作为通配符,指定任意的编码格式。
  4. Accept-Language:能够处理的自然语言集,以及相对优先级。
  5. Referer: 能知道请求URI从哪个页面发起
  6. HOST: 明确支出请求的主机名(请求头中必须存在的字段)

响应首部字段

  1. ETag:资源的匹配信息
  2. Location: 令客户端重定向至指定URI

实体首部字段

  1. Allow 资源可支持的HTTP方法
  2. Content-Encoding 实体主体适用的编码方式
  3. Content-Language 实体主体的自然语言
  4. Content-Length 实体主体的大小(单位:字节)
  5. Content-Location 替代对应资源的URI
  6. Content-Type 实体主体的媒体类型 Expires 实体主体过期的日期时间
  7. Last-Modified 资源的最后修改日期时

HTTP缓存机制

缓存分类

  1. 强制缓存
    在缓存数据未失效的情况下,可以直接使用缓存数据;在没有缓存数据的时候,浏览器向服务器请求数据时,服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中。
  • Expires:缓存过期时间(HTTP1.0)
    缺点:生成的是绝对时间,但是客户端时间可以随意修改,会导致误差
  • Cache-Control :HTTP1.1,优先级高于Expires

private: 客户端可以缓存
public: 客户端和代理服务器都可缓存
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用协商缓存来验证缓存数据(后面介绍)
no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发

Expires和Cache-Control决定了浏览器是否要发送请求到服务器,ETag和Last-Modified决定了服务器是要返回304+空内容还是新的资源文件。

  1. 协商缓存
    浏览器第一次请求数据时,服务器会将缓存标识与数据一起返回给客户端,客户端将二者备份至缓存数据库中。再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。
  • Last-Modified / If-Modified-Since

Last-Modified:服务器在响应请求时,告诉浏览器资源的最后修改时间。
If-Modified-Since:再次请求服务器时,通过此字段通知服务器上次请求时,服务器返回的资源最后修改时间。

缺点:Last-Modified 标注的最后修改时间只能精确到秒,如果有些资源在一秒之内被多次修改的话,他就不能准确标注文件的新鲜度了。如果某些资源会被定期生成,当内容没有变化,但 Last-Modified 却改变了,导致文件没使用缓存;有可能存在服务器没有准确获取资源修改时间,或者与代理服务器时间不一致的情形。

  • Etag / If-None-Match(优先级高于Last-Modified / If-Modified-Since)

Etag:给资源计算得出的一个唯一标志符。
If-None-Match:再次请求服务器时,通过此字段通知服务器客户端缓存数据的唯一标识。

缓存判断顺序

  1. 先判断Cache-Control,在Cache-Control的max-age之内,直接返回200 from cache;
  2. 没有Cache-Control再判断Expires,再Expires之内,直接返回200 from cache;
  3. Cache-Control=no-cache或者不符合Expires,浏览器向服务器发送请求;
  4. 服务器同时判断ETag和Last-Modified,都一致,返回304,有任何一个不一致,返回200。

具体过程如下图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值