2月阅读周·HTTP权威指南:HTTP概述报文与连接篇

举报
叶一一 发表于 2025/02/23 15:25:57 2025/02/23
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍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畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。