图解http笔记-2

持久链接

http的初始版本中,没进行一次http通讯就要断开链接。
之前传输的内容都是很小的,可是如今,当一个浏览器请求一个有很图片的html网页时,要请求html文档,也要请求图片等资源,就要进行不少次TCP的断开和链接,增长通讯的开销。
因此就有了HTTP keep-alive的方法:
只要一端没有明确提出断开链接,就保持TCP的链接。html

'Connection': 'keep-alive'

http报文内的http信息:

对于http报文来讲,分为:web

  • 请求报文 (请求端/客户端)
  • 响应报文 (响应端/服务端)

报文的结构:

结构

首部内容有如下部分组成:浏览器

  • 请求行:包含请求的方法,请求URI和HTTP版本
  • 状态行:包含代表响应结果的状态码,缘由短语和HTTP版本
  • 首部字段:包含请求和响应的各类条件和属性的各种首部,通常分为:
    • 通用首部
    • 请求首部
    • 响应首部
    • 实体首部
  • 其余:其余的HTTP的RFC内未包含的首部(cookie等)

传输中的编码

报文主体和实体主体的差别

HTTP报文的主体用于传输请求或者响应的实体主体。
一般,他们是同样的,可是当传输过程当中进行编码操做时,致使实体主体的内容发生变化,就会和报文主体产生差别。bash

压缩传输内容的编码

好比发送邮件附件时,能够使用编码使邮件的容量变小。
经常使用的内容编码有:服务器

  • gzip (GNU zip)
  • compress (UNIX系统的标准压缩)
  • deflate (zlib)
  • identity (不进行编码)

这些信息会写在HTTP报文的首部里,例如这里是我截取下来的请求某个网站时的头部:cookie

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
'Accept-Encoding': 'gzip, deflate, br'
'Accept-Language': 'zh-CN,zh;q=0.9'

该内容的解码是由客户端负责压缩app

分块传输编码

请求的编码的实体还未传输完以前,浏览器没法显示请求的页面。对于较大的数据,经过把数据分割为不少块,能让浏览器逐步显示页面。
分块传输编码会将实体分红不少部分,每一个部分都会用16进制来标记数据的大小,最后一块会使用"0(CR+LF)"来标记ide

多部分对象集合

当咱们发送邮件时,可能会包含图片,文件,视频等,采用MIME(多用途因特网扩展)机制。而在MIME中 采用了多部分对象集合的方法
当在HTTP报文中使用多部分对象集合时,回来首部字段中添加content-type,例:网站

'Content-Type': 'application/x-www-form-urlencoded'

获取部份内容的范围请求

范围请求:指定范围发送的请求
用于传输一个很大的文件的断开后继续传输。例如10000字节的资源,能够只请求5001~10000字节内的资源
若是服务器没法响应范围请求,则返回状态码200 OK和完整的实体内容编码

内容协商返回最合适的内容

包含在请求报文中的某些首部字段就是判断的基准:

Accpet:
Accept-Charset:
Accept-Encoding:
Accept-Language:
Content-Language:

内容协商的技术有:

  • 服务器驱动协商(以请求的首部字段做参考,服务器端自动处理)
  • 客户端驱动协商 (用户从浏览器显示的可选列表中手动选择)
  • 透明协商 (以上两种方法的结合)
相关文章
相关标签/搜索