网络协议了解一下?HTTP 协议简介

2018年5月31日 3 条评论 727 次阅读 4 人点赞

今天我们来讲解当今最常使用的网络协议——HTTP 协议。当我们谈论 HTTP 时,我们同时也不可避免地涉及到网络(Web)的工作原理,这样才能更全面地理解 HTTP。本文将一同讲解 HTTP 协议与它在 Web 中的工作原理,旨在给大家一个详细、全面并且清晰的认识。

提示:本文内容使用分级标题整理,你可以据此把握文章结构。

 

HTTP 是什么

HTTP(Hypertext Transfer Protocol,超文本传输协议,“超文本”一词将在下文解释),是客户端(通常指浏览器)与 Web 服务器之间的应用层通信协议。HTTP 协议基于 TCP/IP ,你可以把 HTTP 想象成网络上的信使,负责传输诸如 HTML 文档(即网页)、图片、视频、音频等各种格式的数据内容。

两台计算机(客户端与服务器)交换数据的方式通常是通过请求-响应模型来实现的,这要求客户端和服务器共同地使用 HTTP 协议。客户端就是发送请求的计算机,而服务器就是响应请求的计算机。

HTTP 协议具有五条性质:客户端/服务器模式简单快速无连接无状态灵活。本文着重介绍其中后三条性质。

 

HTTP 的性质

无连接

HTTP 协议是无连接(connectionless)协议,即每次连接只处理一个请求

在客户端发送请求之后,客户端即关闭与服务器的连接。当服务器处理好并准备响应的时候,它重新向客户端建立连接然后发送响应内容,然后即关闭连接。

无状态

HTTP 协议是无状态(stateless)协议。通俗来讲,客户端和服务器仅仅在当前请求/响应周期中知道对方。在 HTTP 协议下,客户端和服务器处理信息时没有“记忆”。客户端和服务器的连接关闭后立刻“忘记”对方的存在,如果它们想再次连接,它们必须要重新提供信息。

仅对 HTTP 协议本身来说,重新建立的连接和第一次连接没有什么区别。

灵活性

HTTP 可以传输任何格式的数据,只要传输双方能够读取这些数据就行。一次请求或响应传输的数据类型由 HTTP 请求头中的 Content-Type 字段指明,下文会此字段。

 

为什么要使用 HTTP

HTTP 正如其名,最初是被设计用来传输“超文本”信息的。所谓超文本,就是其中不仅包含真正内容,而且含有解释说明这些内容的标记性信息。超文本的精确定义可见百度百科。HTTP 和 HTML 的“HT”都代表 Hypertext,即“超文本”。
后来,由于 HTTP 的精巧特性,各种各样的新特性被加入到 HTTP 中,HTTP 便成为了在互联网上传输信息最便捷的方式。

 

HTTP 如何工作

这是最重要的板块了(敲黑板)。

如下图,客户端在左侧,服务器在右侧。通信之前,它们必须有有效的物理连接——这是互联网(Internet)的工作了,有关这些内容不在本文的讨论范围内。

 

当成功连接建立以后,客户端向服务器发送了一个称为“HTTP 报文”的请求。由于 HTTP 协议是无连接的,客户端在发送请求后立即关闭连接,开始等待服务器的响应。
服务器在收到请求后,处理请求、准备响应,然后再次建立连接并向客户端发送响应。然后服务器和客户端完全断开连接。

 

HTTP 报文

无论是请求还是响应,HTTP 报文都有严格的格式——起始行Start line)、Headers)和正文Body)。三者一般都是纯文本,其中正文 Body 部分也可能是二进制数据。HTTP 请求报文和响应报文是有区别的,下面分别来看。

 

HTTP 请求报文

 

请求行:包含请求方法请求资源 URIHTTP 协议版本。在此例中,客户端使用 GET 方法请求向服务器请求一个网页。URI 是用来指明请求的资源,关于 URI 的详细说明可见《URI、URL 和 URN 之间的区别与联系》。最后是客户端使用的 HTTP 版本,此例为 HTTP/1.1 版本。

请求头:这部分可以包含很多字段,每个都是键-值对。此例中,Host 表示客户端发送请求至哪个地址,此例为 www.example.com;Accept 告诉服务器客户端想要什么类型的数据,这里使用的类型是 MIME 类型;Accept-Language 告诉服务器客户端接受的语言,此例为 zh-CN,即简体中文。

请求体:也称为请求数据。此例请求体为空。

本例中的 HTTP 请求报文文本如下:

GET /article/hello.html HTTP/1.1
Host: www.example.com
Accept: text/html
Accept-Language: zh-CN
 
 

HTTP 响应报文

 

状态行:包括 HTTP 协议版本状态码原因语句。其中状态码和原因语句共同表达了服务器响应状态,常见的有“200 OK”表示成功,“404 Not Found”表示找不到资源,“500 Internal Server Error”表示服务器内部错误等。

响应头:与请求报文类似,也是键-值对。一个重要的响应头字段是 Content-Type,它制定了响应内容的类型,同样用 MIME 类型表示。如果是 HTML 网页,那么此字段值为 text/html。此例中的 charset=UTF-8 表示文件编码。

响应体:也称响应正文,就是响应的数据内容。如果是 HTML 网页,那么这里面就是完整的 HTML 代码。

本例中的 HTTP 响应报文文本如下:

HTTP/1.1 200 OK
Date: Thu, 31 May 2018 05:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 20000
Connection: keep-alive

<html>
<head></head>
<body>Hello, World!</body>
</html>

写在后面

总结一下。HTTP 是基于 TCP/IP 的应用层协议,用于计算机在网络上交换数据。然后我们讲了 HTTP 的三条重要性质:无连接、无状态、灵活性。我们之所以使用 HTTP 是因为它是在互联网上传输数据的便捷方式。请求-响应周期通过 HTTP 报文进行传输,HTTP 报文由起始行、头和正文组成,但请求报文和响应报文有所不同。

本文内容到此基本结束了。本篇文章的目的是让读者对 HTTP 协议有一个基本的概念,因此涵盖内容广而浅,更加深入的内容将会在后续文章推出。

 

Jed

一名狂热的技术爱好者。

文章评论(3)

  • 小文

    坚持高产优质文章!!! :mrgreen:

    2018年5月31日
  • J2

    适合初学者 :mrgreen:

    2018年5月31日
  • ZAERA博客

    爬虫这些东西都是最基本的 :idea:

    2018年5月31日
  • 提示:有人回复时会邮件通知您