HTTP(Hypertext Transfer Protocol,超文本传输协议),是客户端(通常指浏览器)与 Web 服务器之间的应用层通信协议。HTTP 协议基于 TCP/IP,你可以把 HTTP 想象成网络上的信使,负责传输诸如 HTML 文档、图片、视频、音频等各种格式的数据。
两台计算机(客户端与服务器)交换数据的方式通常是通过请求-响应模型来实现的,这要求客户端和服务器共同地使用 HTTP 协议。客户端就是发送请求的计算机,而服务器就是响应请求的计算机。
HTTP 协议具有五条性质:客户端/服务器模式、简单快速、无连接、无状态、灵活。本文着重介绍其中后三条性质。
本文地址:https://www.jeddd.com/article/http-protocol-overview.html
HTTP 的性质
无连接
HTTP 协议是无连接(connectionless)协议,即每次连接只处理一个请求。
在客户端发送请求之后,客户端即关闭与服务器的连接。当服务器处理好并准备响应的时候,它重新向客户端建立连接然后发送响应内容,然后即关闭连接。
无状态
HTTP 协议是无状态(stateless)协议。通俗来讲,客户端和服务器仅仅在当前请求/响应周期中知道对方。在 HTTP 协议下,客户端和服务器处理信息时没有“记忆”。客户端和服务器的连接关闭后立刻“忘记”对方的存在,如果它们想再次连接,它们必须要重新提供信息。
仅对 HTTP 协议本身来说,重新建立的连接和第一次连接没有什么区别。
灵活性
HTTP 可以传输任何格式的数据,只要传输双方能够读取这些数据就行。一次请求或响应传输的数据类型由 HTTP 请求头中的 Content-Type 字段指明,下文会此字段。
为什么要使用 HTTP
HTTP 正如其名,最初是被设计用来传输“超文本”信息的。所谓超文本,就是其中不仅包含真正内容,而且含有解释说明这些内容的标记性信息。超文本的精确定义可见百度百科。HTTP 和 HTML 的“HT”都代表 Hypertext,即“超文本”。
后来,由于 HTTP 的精巧特性,各种各样的新特性被加入到 HTTP 中,HTTP 便成为了在互联网上传输信息最便捷的方式。
HTTP 如何工作
当成功连接建立以后,客户端向服务器发送了一个称为“HTTP 报文”的请求。由于 HTTP 协议是无连接的,客户端在发送请求后立即关闭连接,开始等待服务器的响应。
服务器在收到请求后,处理请求、准备响应,然后再次建立连接并向客户端发送响应。然后服务器和客户端完全断开连接。
本文地址:https://www.jeddd.com/article/http-protocol-overview.html
HTTP 报文
无论是请求还是响应,HTTP 报文都有严格的格式——起始行(Start line)、头(Headers)和正文(Body)。三者一般都是纯文本,其中正文 Body 部分也可能是二进制数据。HTTP 请求报文和响应报文是有区别的,下面分别来看。
HTTP 请求报文
请求行:包含请求方法、请求资源 URI 和 HTTP 协议版本。在此例中,客户端使用 GET 方法请求向服务器请求一个网页。URI 是用来指明请求的资源,关于 URI 的详细说明可见《URI、URL 和 URN 之间的区别与联系》。最后是客户端使用的 HTTP 版本,此例为 HTTP/1.1 版本。
请求头:这部分可以包含很多字段,每个都是键-值对。此例中,Host 表示客户端发送请求至哪个地址,此例为 www.example.com;Accept 告诉服务器客户端想要什么类型的数据,这里使用的类型是 MIME 类型,可以参考 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 报文进行传输。尽管请求报文和响应报文的格式有所不同,但它们都是由起始行、头部和正文三部分组成的。
References
本文地址:https://www.jeddd.com/article/http-protocol-overview.html
坚持高产优质文章!!!
爬虫这些东西都是最基本的