2月阅读周·HTTP权威指南:HTTP概述报文与连接篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
HTTP概述
Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。HTTP是现代全球因特网中使用的公共语言。
报文
HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。
从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的HTTP报文。HTTP请求和响应报文的格式很类似。
HTTP报文包括以下三个部分。
- 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
- 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。
浏览器发送了一条HTTP请求报文。这条请求的起始行中有一个GET命令,且本地资源为/tools.html。这条请求说明它使用的是1.0版的HTTP协议。请求报文没有主体,因为从服务器上GET一个简单的文档不需要请求数据。服务器会回送一条HTTP响应报文。这条响应中包含了HTTP的版本号(HTTP/1.0)、一个成功状态码(200)、一个描述性的原因短语(OK),以及一块响应首部字段,在所有这些内容之后跟着包含了所请求文档的响应主体。Content-Length首部说明了响应主体的长度,Content-Type首部说明了文档的MIME类型。
连接
报文是如何通过传输控制协议(Transmission Control Protocol, TCP)连接从一个地方搬移到另一个地方去的。
TCP/IP
HTTP是个应用层协议。HTTP无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP。
TCP提供了:
- 无差错的数据传输;
- 按序传输(数据总是会按照发送的顺序到达);
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。
因特网自身就是基于TCP/IP的,TCP/IP是全世界的计算机和网络设备常用的层次化分组交换网络协议集。TCP/IP隐藏了各种网络和硬件的特点及弱点,使各种类型的计算机和网络都能够进行可靠的通信。
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出现错序了。
用网络术语来说,HTTP协议位于TCP的上层。HTTP使用TCP来传输其报文数据。与之类似,TCP则位于IP的上层。
连接、IP地址及端口号
在HTTP客户端向服务器发送报文之前,需要用网际协议(Internet Protocol, IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
建立一条TCP连接的过程与给公司办公室的某个人打电话的过程类似。首先,要拨打公司的电话号码。这样就能进入正确的机构了。其次,拨打要联系的那个人的分机号。
在TCP中,你需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。
这就行了,但最初怎么获得HTTP服务器的IP地址和端口号呢?当然是通过URL了!我们前面曾提到过,URL就是资源的地址,所以自然能够为我们提供存储资源的机器的IP地址。我们来看几个URL:
http://207.200.83.29:80/index.html
http://www.netscape.com:80/index.html
http://www.netscape.com/index.html
第一个URL使用了机器的IP地址,207.200.83.29以及端口号80。
第二个URL没有使用数字形式的IP地址,它使用的是文本形式的域名,或者称为主机名(www.netscape.com)。主机名就是IP地址比较人性化的别称。可以通过一种称为域名服务(Domain Name Service, DNS)的机制方便地将主机名转换为IP地址,这样所有问题就都解决了。第2章会介绍更多有关DNS和URL的内容。
最后一个URL没有端口号。HTTP的URL中没有端口号时,可以假设默认端口号是80。有了IP地址和端口号,客户端就可以很方便地通过TCP/IP进行通信了。
步骤如下:
(a) 浏览器从URL中解析出服务器的主机名;
(b) 浏览器将服务器的主机名转换成服务器的IP地址;
(c) 浏览器将端口号(如果有的话)从URL中解析出来;
(d) 浏览器建立一条与Web服务器的TCP连接;
(e) 浏览器向服务器发送一条HTTP请求报文;
(f) 服务器向浏览器回送一条HTTP响应报文;
(g) 关闭连接,浏览器显示文档。
总结
HTTP是个应用层协议。HTTP无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP。
在HTTP客户端向服务器发送报文之前,需要用网际协议(Internet Protocol, IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)