图解HTTP(记录书中笔记)
一、了解web及网络基础
web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议作为规范。完成从客户端到服务器端等一系列运作流程。而协议是规则的约定。
1.2 HTTP的诞生
Tim Berners Lee博士提出了一种能让远隔两地的研究者们共享知识的设想。
最初设想的基本理念是:借助多文档之间相互关联形成的超文本,连成可相互参阅的WWW
HTTP于1990年问世,那时的HTTP并没有作为正式的标准被建立。
HTTP正式作为标准被公布是在1996年的5月,版本是HTTP/1.0
1.3 网络基础TCP/IP
计算机与网络设备要相互通信,双方必须基于相同的方法。比如:如何探测到通信目标,由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定。不同的硬件,操作系统之间的通信,所有的这一切都需要一种规则。而我们把这种规则称为协议。
像这样把与互联网相关的协议集合起来总称为TCP/IP
1.3.2 TCP/IP分层管理
分层:应用层、传输层、网络层和数据链路层
分层好处:如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需要将变动的层替换掉就可以。把各层之间的接口部分规划好之后,每个层次内部的设计就能自由改动了。
- 应用层:决定了向用户提供应用服务时的通信的活动,HTTP协议处于该层。
- 传输层:提供处于网络连接中的两台计算机之间的数据传输。
- 网络层:处理在网络上流动的数据包。数据包时网络传输的最小数据单位。
- 链路层:用来处理连接网络的硬件部分。
1.3.3 TCP/IP通信传输流
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。
这种把数据信息包装起来的做法称为封装。
1.4 与HTTP关系密切的协议:IP、TCP和DNS
1.4.1 负责传输的IP协议(网络层)
IP(Internet Protocol)网络协议。
IP协议作用:把各种数据包传送给对方(网络层)。需要满足两个重要的条件:IP地址和MAC地址
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。一般情况下,IP地址可变换,但MAC地址基本上不会更改。
ARP是一种以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
1.4.2 确保可靠的TCP协议(传输层)
TCP,提供①可靠的②字节流服务。
②所谓字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。
①可靠是指能够确认数据最终是否送达到对方。
如何确定数据是否送达呢?答案:三次握手策略。
若在握手过程中,某个阶段莫名终端,TCP协议会再次以相同的顺序发送相同的数据包。
1.4.3 负责域名解析的DNS服务(应用层)
它提供域名到IP地址之间的解析服务。
1.7 URI URL
URI就是某个协议方案表示的资源的定位标识符。URI表示用字符串标识的某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。
二、简单的HTTP协议
2.3 HTTP是不保存状态的协议
也就是说,在HTTP这个级别,协议对于发送过的请求或响应都是不做持久化处理的。
优点:这是为了更快速的处理大量事务,确保协议的可伸缩性。
缺点:比如用户登入到一家网站及时跳转到其他页面也需要保持登入状态。网站为了掌握是谁送出的请求,需要保存用户的状态。
解决:引入了Cookie技术。
2.5 告知服务器意图的HTTP方法
- GET:我想访问你的资源。
- POST:我想要把这条信息告诉你。
- PUT:传输文件(不常用,任何人都可以上传存在安全性问题)
- HEAD:获取报文首部,不反悔报文主体。
- DELETE:删除文件
- OPTIONS:询问支持方法
- TRACE:追踪路径,确认连接过程中发生的一系列操作。
- CONNECT:要求用隧道协议连接代理。
2.7持久连接节省通信量
背景:HTTP初始版本,每进行一次HTTP通信就要断开一次TCP连接。
例如:在发送请求访问HTML页面资源的同时,也会请求该HTML页面里包含的其他资源。因此,每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。
解决:
- 持久连接(旨在建立一次TCP连接后进行多次请求和响应的交互)
- 管线化(不用等待响应结束亦可以发送下一个请求)
2.8 Cookie状态管理
三、HTTP报文内的信息
HTTP报文本身是由多行数据构成的字符串文本。
大致分为报文首部和报文主体两块。中间由空行(CR+LF)来划分。并不一定要有报文主题。
3.3编码提升传输速率
3.3.1 报文主体和实体主体的差异
- 报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
- 实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
3.3.2 压缩传输的内容编码
HTTP协议中有一种被称为内容编码的功能也能进行类似的操作。内容编码指明在实体内容上的编码格式,并保持实体信息原样压缩。
3.3.3分割发送的分块传输编码
背景:在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求的页面。在传输大容量的数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。
这种把实体主体分块的功能称为分块传输编码。
使用分块传输编码的实体主体会由接收的客户端负责解码,回复到编码前的实体主体。
3.4发送多种数据的多部分对象集合。
发送的一份报文主体内可能含有多类型实体。文本,图片、视频等多个不同类型的数据。
多部分对象集合包含的对象如下:
- multipart/form-data:在WEB表单文件上传时使用。
- multipart/byteranges:状态码位206,响应报文包含了多个范围的内容时使用。
在HTTP报文中使用多部分对象集合,需要在首部字段里加Content-type。
3.5 获取部分内容的范围请求
背景:以前用户不能使用现在这个告诉带宽访问互联网。如果下载过程中遇到网络中断的情况,那就必须重新开始。
解决:需要一种可恢复的机制,所谓恢复是指能从之前下载中断处恢复下载。
3.6 内容协商返回最合适的内容
背景:同一个web网站可能存在多份相同内容的页面,比如英文和中文版的web页面,给他们内容上虽然相同,但使用的语言却不同。当浏览器的默认语言为英文或中文,访问相同的URI的web页面则会显示对应的英语版或中文版的web页面,这样的机制称为内容协商。
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以语言、字符集、编码方式等为基准判断响应的资源。
包含在请求报文中的某些首部字段就是判断的基准:
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
四、返回结果的HTTP状态码
- 200 OK
- 204 请求处理成功,但没有资源可返回
- 206 是对资源的范围请求
- 301 资源URI已更新(永久重定向)
- 302 资源URI已更新(临时重定向)
- 303和302类似,但303明确表示客户端应当采用GET方法获取资源
- 304 资源已找到但未符合条件请求
- 400 报文存在语法错误
- 401 发送请求需要由通过HTTP认证的认证信息。
- 403 请求资源的访问被服务器拒绝了
- 404 服务器上没有请求的资源
- 500 内部资源故障
- 503 服务器暂时处于超负载或正在停机维护
五、与HTTP协作的Web服务器
5.1单台虚拟主机实现多个域名
可以用一台服务器为多个客户服务,也可以以每位客户持有的域名运行各自不同的网站,这是因为利用了虚拟主机的功能。即使物理层面只有一台服务器,但只要使用了虚拟主机的功能,可以假象已具有多台服务器。
问题:域名通过DNS服务映射到IP地址之后访问目标网站,如果一台服务器托管了两个域名,当收到请求的时候就要分辨究竟是要访问哪两个域名。
解决:在相同的IP地址下,在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI
5.2 通信数据转发程序:代理、网关、隧道
5.2.1 代理
接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
代理不改变请求URL,会直接发送给前方持有资源的目标服务器
优点:利用缓存技术减少网络带宽的流量,组织内部针对特定的网站的访问控制,以获取访问日志为主要目的,等等。
5.2.2 网关
网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就能像自己拥有资源的源服务器一样对请求进行处理。
网关与代理十分相似,网关能使通信线路上的服务器提供非HTTP协议服务
优点:提高通信安全性,因为可以在客户端和网关之间的通信线路上加密以确保连接的安全。另外网关可以连接数据库,使用SQL语句查询数据。
5.2.3隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
可以使用SSL等加密手段进行通信。
目的就是确保客户端能与服务器进行安全的通信。
5.3 保存资源的缓存
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问。
优点:减少对源服务器的访问,因此也就节省了通信流量和通信时间。
5.3.1 缓存的有效期限
即使存在缓存,也会因为客户端的要求,缓存的有效期限等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器获取”新“资源。
可以使用SSL等加密手段进行通信。
目的就是确保客户端能与服务器进行安全的通信。
5.3 保存资源的缓存
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问。
优点:减少对源服务器的访问,因此也就节省了通信流量和通信时间。
5.3.1 缓存的有效期限
即使存在缓存,也会因为客户端的要求,缓存的有效期限等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器获取”新“资源。