HTTP1.x 、HTTP2.0、HTTP头部信息

  1. HTTP协议
  2. http1.0
  3. http1.1
  4. http1.0和http1.1的区别
  5. http2.0
  6. http1.1和http2.0的区别
  7. http头部字段

 

http协议(超文本传输协议)


是客户端和服务器端两者通信共同遵循的一些规则。主要内容是定义了客户端如何向服务器请求资源,服务器如何响应客户端请求。


http1.0


HTTP 1.0规定浏览器与服务器只保持短暂的连接, 每进行一次 HTTP 通信就要断开一次 TCP 连接。

比如, 使用浏览器浏览一个包含多张图片的 HTML 页面时, 在发送请求访问 HTML 页面资源的同时, 也会请求该 HTML 页面里包含的其他资源。 因此,每次连接只是传输一个文档和图像,造成无谓的 TCP 连接建立和断开, 增加通信量的开销,影响客户机和服务器的性能

                  

 

http1.1


持久连接节省通信量:   (Connection:Keep-Alive / close)

 为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent onnections, 也称为 HTTP keep-alive 或 HTTP connection reuse) 的方法。 一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

特点: 在一个TCP连接上可以传送多个HTTP请求和响应,只要任意一端没有明确提出断开连接, 则保持 TCP 连接状态。

好处:减少了重复建立和断开 TCP 连接的所的消耗和延迟, 减轻了服务器端的负载。 另外, 减少开销的那部分时间, 使 HTTP 请求和响应能够更早地结束, 这样 Web 页面的显示速度也就相应提高了。

在 HTTP/1.1 中, 所有的连接默认都是持久连接, 但在 HTTP/1.0 内并未标准化。 虽然有一部分服务器通过非标准的手段实现了持久连接,但服务器端不一定能够支持持久连接。 毫无疑问, 除了服务器端, 客户端也需要支持持久连接。

                              

 

使用 Cookie 的状态管理。

HTTP 是无状态协议, 它不对之前发生过的请求和响应的状态进行管理。 也就是说, 无法根据之前的状态进行本次的请求处理。假设要求登录认证的 Web 页面本身无法进行状态的管理(不记录已登录的状态) , 那么每次跳转新页面不是要再次登录, 就是要在每次请求报文中附加参数来管理登录状态。不可否认, 无状态协议当然也有它的优点。 由于不必保存状态, 自然可减少服务器的 CPU 及内存资源的消耗。 从另一侧面来说, 也正是因为 HTTP 协议本身是非常简单, 所以才会被应用在各种场景里。

保留无状态协议这个特征的同时又要解决类似的矛盾问题, 于是引入了 Cookie 技术。 Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息, 通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时, 客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后, 会去检查究竟是从哪一个客户端发来的连接请求, 然后对比服务器上的记录, 最后得到之前的状态信息

 

上图展示了发生 Cookie 交互的情景, HTTP 请求报文和响应报文的内容如下。上图展示了发生 Cookie 交互的情景, HTTP 请求报文和响应报文的内容如下。‘

                                                   

 

保存资源的缓存

缓存是指代理服务器或客户端本地缓存(浏览器或磁盘)内保存的资源副本。 利用缓存可减少对源服务器的访问, 因此也就节省了通信流量和通信时间。

当客户端请求资源时,先判断本地缓存是否有效,如果有效, 就不必再向服务器请求相同的资源了, 可以直接从本地磁盘内读取。若判定缓存过期后, 会向源服务器确认资源的有效性。 若判断浏览器缓存失效, 浏览器会再次请求新资源。(强缓存和协商缓存

 

节约带宽

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

 

获取部分内容的范围请求。

HTTP1.1还支持传送内容的一部分以前的网络,如果在下载大的图片或文件的过程中遇到网络中断的情况, 那就必须重头开始。 为了解决问题, 需要一种可恢复的机制。 所谓恢复是指能从之前下载中断处恢复下载。要实现该功能需要指定下载的实体范围。 像这样, 指定范围发送的请求叫做范围请求(Range Request) 。对一份 10000 字节大小的资源, 如果使用范围请求, 可以只请求 5001~10000 字节内的资源。

这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这就是我们平时说的断点续传。(执行范围请求时, 会用到首部字段 Range 来指定资源的 byte 范围。Range: bytes=XXXX表示要求服务器从文件XXXX字节处开始传送

 

用单台虚拟主机实现多个域名。(HOST域)

一台 Web 服务器可搭建多个独立域名的 Web 网站。

HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。 比如, 提供 Web 托管服务(Web Hosting Service) 的供应商, 可以用一台服务器为多位客户服务, 也可以以每位客户持有的域名运行各自不同的网站。 这是因为利用了虚拟主机(Virtual Host, 又称虚拟服务器) 的功能。即使物理层面只有一台服务器, 但只要使用虚拟主机的功能, 则可以假想已具有多台服务器。

 客户端使用 HTTP 协议访问服务器时, 会经常采用类似 www.hackr.jp 这样的主机名和域名。在互联网上, 域名通过 DNS 服务映射到 IP 地址(域名解析) 之后访问目标网站。 可见, 当请求发送到服务器时, 已经是以 IP 地址形式访问了。所以, 如果一台服务器内托管了 www.tricorder.jp 和 www.hackr.jp 这两个域名, 当收到请求时就需要弄清楚究竟要访问哪个域名。在相同的 IP 地址下, 由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站, 因此在发送 HTTP 请求时, 必须在 Host 首部内完整指定主机名或域名的 URI。

 

 

http1.0 和 http1.1 的区别 


  • 长连接: http1.0 需要使用keep-alive参数来告知服务器端要建立一个长连接,而 http1.1 默认支持长连接。(connection头)
  • 节约带宽:http1.1支持头部信息和主体分两次发送,并且支持断点续传(只发送信息的部分内容,Range)
  • 缓存处理:请求得到的资源缓存在本地,下次请求前会先查看本地缓存,若缓存失效再请求服务器
  • Host头处理:允许web服务器上的多个虚拟站点共享同一个ip和端口。(一台WEB服务器上(同一个IP地址和端口号)使用不同的主机名创建多个虚拟WEB站点)

 

HTTP 1.1主要是通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能

  • 连接管理:connection:keep-alive,close
  • 控制缓存行为:Cache-Control:max-age,no-store,no-cache;
  • 请求资源所在域:host:主机名+域名

 

http2.0


相比 HTTP 1.x,HTTP 2.0 大幅度提升了web心梗,在与 HTTP/ 1.1完全语义化兼容的基础上,进一步减少了网络延迟。主要是在底层传输做了很大的改动和优化:

(1)二进制分帧。HTTP/2采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。(突破 HTTP1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量

(2) 首部压缩。HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。

(3 )多路复用:允许多个请求-响应通过一个TCP 连接并发完成

(4) 服务器推送。服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应。比如浏览器向服务器请求一个主页,服务器很可能会响应主页内容,logo,样式表等,因为服务器知道客户端会用到这些信息,避免客户端解析 HTML 后再发送这些请求。这相当于在一个HTML文档中集合了所有资源,适合加载静态资源。服务器推送过来的数据缓存在客户端,客户端需要时直接从本地加载资源,不用走网络,速度自然是快很多。

                                             

                                                                                http2.0 多路复用 

                                   

                                          

 

http1.1 和 http2.0 的区别 


  1. 二进制分帧。HTTP/2采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。可以改善传输性能,实现低延迟和高吞吐量
  2. 首部压缩。HTTP/2 对消息头进行压缩传输,能够节省消息头占用的网络的流量。
  3. 多路复用:允许多个请求-响应通过一个TCP 连接并发完成
  4. 服务器推送。当客户端请求数据时,服务器会将客户端能够用到的信息一同传送回来并缓存在客户端。适合静态资源加载,

详情

 

 

HTTP请求头


HTTP/1.1 通用首部字段。

  • 通用首部字段是指, 请求报文和响应报文双方都会使用的首部。

 

Cache-Control。通过指定首部字段 Cache-Control 的指令, 就能操作缓存的工作机制。

Connection。Connection 首部字段具备如下两个作用:控制不再转发给代理的首部字段。管理持久连接。

Date。首部字段 Date 表明创建 HTTP 报文的日期和时间。

Via。使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报文的传输路径。报文经过代理或网关时, 会先在首部字段 Via 中附加该服务器的信息, 然后再进行转发。

 

ETag。是一种可将资源以字符串形式做唯一性标识的方式。 服务器会为每份资源分配对应的 ETag 值。另外, 当资源更新时, ETag值也需要更新。 生成 ETag 值时, 并没有统一的算法规则, 而仅仅是由服务器来分配。

 

详细的介绍:最详细的http协议、tcp/ip协议(图解)


 

 

!!总结关于HTTP长短连接

理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。HTTP持久连接其实就是数据传输完成了不主动断开TCP连接,不进行挥手,这样下次就不用再握手。
        在HTTP/0.9时代:每个HTTP请求都要经历一次DNS解析、三次握手、传输和四次挥手。反复创建和断开TCP连接的开销巨大,这就是短连接。
        在HTTP/1.0时代:请求头部支持携带Connection: Keep-Alive,即是在向服务端请求持久连接。如果服务端接受持久连接,则会在响应header中同样携带Connection: Keep-Alive,这样客户端便会继续使用同一个TCP连接发送接下来的若干请求。(Keep-Alive的默认参数是[timout=5, max=100],即一个TCP连接可以服务至多5秒内的100次请求)
        在HTTP/1.1时代:持久连接成为默认的连接方式;由于长链接有个串行导致的阻塞弊端,因此提出了pipelining概念,支持同时发送多个请求,但是依然有缺点,就是回来的顺序是按照请求的先后顺序。
        在HTTP/2.0时代:提出了multiplexing技术,能够让多个请求和响应的传输完全混杂在一起进行,通过streamId来互相区别。这彻底解决了串行阻塞问题,同时还允许给每个请求设置优先级,服务端会先响应优先级高的请求

来自:HTTP请求、Socket连接、TCP连接的关系

 

 

参考: 这个比较详细

最详细的http协议、tcp/ip协议(图解)

综合阐述http1.0/1.1/2和https

HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

HTTP/2 相比 1.0 有哪些重大改进?

http头部信息:Http头域字段详解

host头信息:主机名与域名

http头中的host字段详解

为什么有了URL还需要一个host域

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值