Skip to content

图解HTTP笔记 1-5

1.Web及网络基础

1. Web 是建立在 HTTP 协议上通信的
  1. 作为页面的文本标 记语言的 HTML(HyperText Markup Language,超文本标记语言);
  2. 作为文档传递协议的 HTTP ;
  3. 指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)。WWW 这一名称,是 Web 浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web。
2. TCP/IP协议族

定义:
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之 间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为 协议(protocol)。

通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集

TCP/IP协议族里边最重要的一点就是分层,按层次分为以下4层:应用层,传输层,网络层和数据链路层。(TCP/IP协议分为四层,OSI是七层模型)

应用层:

1
2
3
4
5
6
1. 决定了向用户提供应用服务时通信的活动。
    TCP/IP 协议族内预存了各类通用的应用服务。  
比如:
    FTP(File Transfer Protocol,文件传输协议)
    DNS(Domain Name System,域名系统)服务就是其中两类。
2. HTTP 协议也处于该层。

传输层:

1
2
3
4
1. 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
2. 在传输层有两个性质不同的协议:  
    TCP(Transmission Control Protocol,传输控制协议)  
    UDP(User Data Protocol,用户数据报协议)。

网络层:

1
2
3
4
网络层用来处理在网络上流动的数据包。
数据包是网络传输的最小数据单位。
该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。

链路层(又名数据链路层,网络接口层):

1
2
3
用来处理连接网络的硬件部分。
包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。
硬件上的范畴均在链路层的作用范围之内。

流程

客户端            服务端
应用层: HTTP客户端      HTTP客户端
    ↓↑          ↑↓
传输层: TCP         TCP
    ↓↑         ↑↓
网络层: IP          IP
    ↓↑         ↑↓
链路层:网络         网络
    ↓↑ 网络之间的通信 ↑↓

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通 信。发送端从应用层往下走,接收端则往应用层往上走。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1 首先作为发送端的客户端在应用层(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。

2 接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,
并在各个报文上打上标记序号及端口号后转发给网络层。

3 在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。
这样一来,发往网络的通信请求就准备齐全了。

4 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。
当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。
3. 与HTTP协议关系密切的协议

负责传输的IP协议。
按层次分:IP网际协议位于网络层。
作用:是把各种数据包传送给对方。(而要确保确实传送到那里,需要满足各类条件。重要的是IP地址和MAC地址)IP地址指明了节点被分配的地址,MAC地址是网卡所属的固定地址。

1
2
ARP协议通过MAC地址就行通信。IP间的通信以来MAC地址。ARP协议是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。这种机制称为路由选择(routing)

确保可靠性的TCP协议
按层次分:TCP协议位于传输层
作用:提供可靠地字节流服务。是指:为了方便传输,将大块数据分割成以报文段(segment)为的单位的数据包进行管理。而可靠地传输服务是指:能够把数据准确可靠地传给对方。

为了准确无误地将数据送达目标出,TCP协议采用了三次握手策略。

1
2
3
4
握手过程中使用了TCP的标志(flag)---SYN(synchronize)和ACK(acknowledgement)
1. 发送端:首先放松一个带SYN标志的数据包给对方。
2. 接收端:收到后,回传一个带有SYN/ACK标志的数据包表示传达确认信息。
3. 发送端:再回传一个带ACK标志的数据包,代表“握手”结束。

负责域名解析的DSN服务
按层次分:DNS服务和HTTP协议一样位于应用层的协议。
作用:提供域名到IP地址之间的解析服务。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

1
2
3
4
5
URI和URL
URI(Uniform Resource Identifier,统一资源标识符)   
URL(Uniform Resource Locator,统一资源定位符)
URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。
采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp、mailto、telnet、file 等。
1
2
3
4
5
6
7
8
http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1
http 协议方案名
user:pass 登录信息(认证)
www.example.com 服务器地址
80 服务器端口
dir/index.html 带层次的文件路径
uid = 1 查询字符串
#ch1 片段标识符

2. 简单的HTTP协议

  1. HTTP协议和TCP/IP协议族内的其他众多的协议相同 用于客户端和服务器之间的通信。(应用HTTP协议时,必定是一端担任客户端角色,另一端担任服务器端角色)

  2. 通过请求和响应的交换达成通信。(请求必定由客户端发出,而服务器端回复响应) HTTP协议规定:请求从客户端发出,最后服务端响应该请求并返回。换句话说,肯定是从客户端开始建立通信的,服务器端在没有接收到请求之前不会响应。

    请求报文:①请求方法 ②请求URI ③协议版本 ④可选的请求首部字段 ⑤可选的内容实体

    响应报文:①协议版本 ②状态码 ③原因短语 ④可选的响应首部字段 ⑤ 可选的实体

  3. HTTP是不保存状态的协议(为了实现保持状态功能,引入了Cookie技术) 协议本身不保留之前一切的q请求或响应的报文的信息,这是为了更加快速的处理事物,确保协议的可伸缩性,而特意把http协议设计成如此简单的

  4. 请求URI定位资源

    HTTP协议使用URI定位互联网上的资源。

  5. 告知服务器意图的HTTP方法
    GET:获取资源。GET用来请求访问已被URI识别的资源。 POST:传输实体主体。 PUT:传输文件 HEAD:获得报文首部。HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。 DELETE:删除文件 OPTIONS:询问支持的方法 TRACE:追踪路径 CONNECT:要求用随到协议连接代理

  6. 持久连接:建立一次TCP连接后进行多次请求和响应的交互

    • 持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
    • 持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载
    • HTTP/1.1中,所有的连接默认都是持久连接。
  7. 管线化(pipelining):持久连接使得多数请求以管线化方式发送成为可能。

  8. Cookie管理状态信息:服务器端发送的响应报文有Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发哦送出去。

3. HTTP报文内的HTTP信息

1.HTTP报文
1
2
3
4
```
用于HTTP协议交互信息被称为HTTP报文。请求端的HTTP报文叫做请求报文,响应端的叫做响应报文。 
大致分为 报文首部和报文主体两块。两者由最初出现的空行划分。通常,并不一定有报文主体。
```
2.报文结构
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
报文:报文首部  空行 报文主题

请求报文:                   响应报文:
请求行                         状态行
请求首部字段                  响应首部字段
通用首部字段                  通用首部字段
实体首部字段                  实体首部字段
其他                      其他
空行                      空行
报文主体                        报文主体

请求行:包含请求的方法,请求URI和HTTP版本 状态行: 包含表明响应结果的状态码,原因短语和HTTP版本 首部字段:包含请求和响应的各种条件和属性的各类首部(一般有4种首部:通用首部,请求首部,响应首部,实体首部)

3.编码提升传输速率
1
2
3
4
HTTP 在传输数据时可以按照数据原貌直接传输,
但也可以在传输过程中通过编码提升传输速率。
通过在传输时编码,能有效地处理大量的访问请求。
但是,编码的操作需要计算机来完成,因此会消耗更多的 CPU 等资源。

报文主体和实体主体的差异
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

发送多种数据的多部分对象集合

1
2
3
4
5
1.multipart/form-data  
在 Web 表单文件上传时使用。

2. multipart/byteranges
状态码 206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。

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

1
2
3
4
5
Accept
Accept-Charset
57Accept-Encoding
Accept-Language
Content-Language

4. 返回结果的HTTP状态码

状态码的职责是当客户端想服务器端发送请求时,描述返回的请求结果。

1
2
3
4
5
1XX     信息性状态码       接收的任务正在处理
2XX     成功状态码        请求正常处理完毕
3XX     重定向状态码       需要进行附加操作以完成请求
4XX         客户端错误状态码             服务器无法处理请求
5XX     服务器错误状态码             服务器处理请求出错

2XX 的响应结果表明请求被正常处理

1
2
3
200 OK
204 No Content
206 Partial Content

3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求

1
2
3
4
5
6
7
301 Moved Permanently  永久性重定向
302 Found 临时性重定向
303 See Other  请求对应的资源存在着另一个URI,应使用GET方法定向过去请求的资源
304  Not Modified  客户端发送附带条件的请求,服务器端允许访问资源,但未满足条件。

304 虽然被划分在 3XX 类别中,但是和重定向没有关系。
附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。

4XX 的响应结果表明客户端是发生错误的原因所在

1
2
3
4
400 Bad Request 表示请求报文中存在语法错误
401 Unauthorized
403 Forbidden
404 Not Found

5XX 的响应结果表明服务器本身发生错误

1
2
500 Internal Server Error  服务器端在执行请求时发生了错误
503 Service Unavailable  服务器暂时处于超负载火正在进行停机维护,现在无法处理请求

5. 与HTTP协作的Web服务器

1.通信数据转发程序 :代理、网关、隧道
  1. 代理

    代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

    使用代理服务器的理由有:利用缓存技术(稍后讲解)减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。

    代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一种是是否会修改报文。

    缓存代理
    代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。

    透明代理
    转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。

  2. 网关

    网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

    网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务。

    利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。

  3. 隧道

    隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

    隧道可按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信
    隧道本身不会去解析 HTTP 请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。