2022-01-12 07:38:25
HTTP 1.0 和 HTTP 1.1 的主要区别体现在以下几个方面:
HTTP 1.0:默认使用短连接,即每进行一次 HTTP 操作就建立一次连接,任务结束后立即中断连接。当网页中包含多个 Web 资源(如 JavaScript 文件、图像、CSS 文件等)时,每遇到一个资源浏览器就会重新建立一次 TCP 连接,导致大量“握手”和“挥手”报文占用带宽。不过,HTTP 1.0 也提供了长连接选项,可在请求头中加入Connection: Keep-alive。
HTTP 1.1:默认采用长连接模式,请求报文会通知服务端保持连接打开,为后续数据交互服务。一个网页打开后,TCP 连接不会关闭,客户端再次访问同一服务器时会继续使用已建立的连接。当然,若不想使用长连接,可在请求头中加入Connection: close。此外,一些服务器软件(如 Apache)支持设置超时时间,超时时间内无新请求则关闭连接。实现长连接需要客户端和服务端都支持。

状态响应码
HTTP 1.0:仅定义了 16 种状态码。
HTTP 1.1:新加入了大量状态码,仅错误响应状态码就新增了 24 种。例如:
100 (Continue):在请求大资源前的预热请求。
206 (Partial Content):范围请求的标识码。
409 (Conflict):请求与当前资源的规定冲突。
410 (Gone):资源已被永久转移且无已知转发地址。
缓存处理
HTTP 1.0:主要使用Expires和If-Modified-Since作为缓存判断标准。服务器用Expires标记响应体的有效时间,在标记时间内请求会获得缓存;初次返回响应体时用Last-Modified标记资源最后修改时间,客户端请求头用If-Modified-Since询问该时间后资源是否被修改。若未修改,服务器返回304 not modified,表示缓存可用;若修改过,返回200 OK和全新资源内容。
HTTP 1.1:引入了更多缓存控制策略,如Entity tag、If-Unmodified-Since、If-Match、If-None-Match等缓存头,还增加了Cache-Control请求头特性,大大增加了缓存机制的灵活性和扩展性。
带宽优化及网络连接的使用
HTTP 1.0:存在浪费带宽现象,如客户端只需对象的一部分,服务器却发送整个对象,且不支持断点续传功能。
HTTP 1.1:在请求头引入了range头域,允许只请求资源的某个部分,返回码为206 (Partial Content),方便开发者充分利用带宽和连接。同时,HTTP 1.1 还引入了状态码100,用于处理大文件请求,服务器可通过该状态码指示请求是否会被正常响应。此外,HTTP 1.1 对内容编码和传输编码做了区分,内容编码总是端到端的,传输编码总是逐跳的,还加入了Accept-Encoding头部,让客户端指示能处理的内容编码。

HTTP 1.0:请求报文中不会加入主机名,如请求资源 URL 为
HTTP 1.1:在请求头中加入了Host字段,如请求报文为:
服务器端可以根据Host字段确定客户端想要请求的真正网址。