《图解HTTP》读书笔记(一)——HTTP协议及HTTP报文

前言

       本系列记录了在阅读《图解HTTP》这本书的时候遇到的关键点,其中一半内容是书中的原话,外加一半我的个人理解,如果有错误烦请大家指出。本文是本系列的第一篇,主要记录了HTTP协议的一些基础和简单的HTTP报文组成。

简单的HTTP协议

1.HTTP协议用于客户端和服务端之间的通信
       HTTP协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。HTTP协议能够明确区分哪端是客户端,哪端是服务器端。
2.通过请求和响应的交换达成通信
       HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。
在这里插入图片描述
3.HTTP是不保存状态的协议
       HTTP是一种不保存状态,即无状态的协议。HTTP协议自身不对请求和响应作持久化处理,也就是说哪怕是对于完全相同的两次请求,客户端也只能以常规的形式请求,而不能用类似“上一条的响应是什么来着?”的形式来获得响应。这是为了更快的处理大量事务,确保协议的可伸缩性。
       HTTP虽然是无状态协议,但为了实现期望的保持状态功能,引入了cookie技术。有了cookie再用HTTP协议通信,就可以管理状态了。
4.告知服务器意图的HTTP方法
       方法用来描述本次请求的意图,例如:GET方法通常表示获取资源,POST方法通常表示传输实体主体(注意:这里说的是通常情况下,GET方法同样可以用来传输实体主体)。

  • GET方法:GET方法用来请求访问已被URI识别的资源,指定的资源经服务器解析后返回响应内容。
  • POST方法:POST方法用来传输实体主体,POST方法与GET方法的主要区别是,POST方法的主要目的不是获得响应的主体内容。
  • PUT方法:PUT方法用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
  • HEAD方法:和GET方法一样,但是不返回报文主体只返回头部,用于确定URI的有效性及资源的更新日期等(确认缓存时)。
  • DELETE方法:DELETE方法用于删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源。
  • OPTIONS方法:OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
  • TRACE方法:TRACE方法是让Web服务器将之前的请求通信返回给客户端。客户端通过TRACE方法可以查询发送出去的请求是怎样被代理中转服务器加工修改的。(通常不会用到)
  • CONNECT方法:CONNECT方法要求在与代理服务器通信时建立隧道,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

5.持久连接节省通信量
       初始版本的HTTP协议中,每进行一次HTTP通信就要建立一次TCP连接,如果请求数量较多时,每次请求就会造成无谓的TCP连接和断开,大大增加了通信量的开销。为了解决这个问题HTTP/1.1想出了持久连接(keep-alive)的方法,其特点是只要没有一方明确提出断开连接,就保持TCP连接状态(HTTP/1.1以后所有连接都是默认长连接)。
       持久连接使多数请求以管线化方式发送请求成为可能,不用等待响应也可发送下一个请求。这样就能够做到同时并行发送多个请求而不需要一个一个等待响应了。例如:当请求一个包含十张图片的页面时,使用管线化技术将大大加快页面加载速度。

HTTP报文内的HTTP信息

1.HTTP报文
       用于HTTP协议交互的信息称为HTTP报文,客户端的称为请求报文,服务端的称为响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。HTTP报文大致可分为首部和主体两块,二者由CR+LF产生的空行分隔(注:不一定要有报文主体)。
在这里插入图片描述

2.请求报文和响应报文的结构
       上图显示了HTTP报文的结构,其中报文首部分为:请求/状态行、请求/响应首部、通用首部、实体首部四部分组成,具体内容将在本系列的后续章节看到。
3.编码提升传输速率
        HTTP在传输数据时可以按照原数据传输,但也可以在传输过程中通过编码提升传输速度,但是编码操作需要计算机来完成,因此会消耗更多的CPU资源。

  • 压缩传输的内容编码:HTTP协议中的内容编码的功能类似压缩文件的操作,内容编码指明用在实体内容上的编码格式,并保持实体信息原样压缩,最终由客户端解码。
  • 分割发送块传输编码:在HTTP通信中,请求编码的实体资源尚未全部传输完成之前浏览器是无法显示的。所以在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。

4.获取部分内容的范围请求
       该功能能够指定下载的实体范围,像这样指定范围发送的请求叫做范围请求,执行范围请求时,会用到首部字段Range来指定资源的byte范围。
在这里插入图片描述
       针对范围请求,响应会返回206 Partial Content的响应报文,对于多重范围的范围请求(Range: bytes=0-3000, 5000-7000),响应会在首部字段Content-Type表明multipart/byteranges后返回响应报文。如果服务器无法响应范围请求,则会返回状态码200和完整的实体内容。
5.内容协商返回最合适的内容
       同一个Web网站可能有多份相同内容的页面,比如英文版和中文版。当浏览器默认的语言为英文或中文时,访问相同URI时则会显示出对应的英文或中文的页面,这样的机制称为内容协商。内容协商会以语言、字符集、编码方式等为基准判断响应的资源,然后提供给客户端最为合适的资源。协商技术主要有三种类型:

  • 服务器驱动协商:以请求的首部字段作为参考,在服务器端自动处理。但对于用户来说,以浏览器发送的信息作为判定标准并不一定能得到最合适的内容。
  • 客户端驱动协商:用户从浏览器显示的可选列表中手动选择,还可以用js脚本在Web页面上自动进行选择。
  • 透明协商:两者的结合体,是由服务端和客户端各自进行内容协商。

小结

       本系列的下一篇将带来HTTP状态码和Web服务器的相关知识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值