HTTP:HyperText Transfer Protocol,超文本传输协议。读者应该不是第一次接触这个名词,但可能仍然不是很理解,笔者将逐一解释。
HyperText(超文本):根据维斯百科,Hypertext?is?text?displayed on a?computer display?or other?electronic devices?with references (hyperlinks) to other text that the reader can immediately access.? 翻译:超文本是显示在计算机显示器或其他电子设备上的文本,其中包含读者可以立即访问的其他文本的引用(超链接)。说白了,就是一段包含跳转链接的文本,其中的链接可以跳转至一个新的文本,一张图片,一段音频,一段视频等等语义扩大后的文本。
Transfer(传输):最开始的计算机是没有网络的,所有的文本也只能在本机上编辑,查看。随着网络的诞生,文本可以由一台计算机发送给另一台计算机,这个过程就是传输。
Protocol(协议):所谓协议,其实就是一种约定,或者称为一种格式。由于超文本需要在计算机之间传输,为了识别传输的文本内容,那么就需要约定一种传输文本的格式。好比写信:我们通常由称呼开始,接着是正文,最后是写信人的署名和日期。计算机科学中的协议实质上也是一种类似的规范。在后续介绍到HTTP的请求数据格式与响应数据格式后,读者会加深对协议的理解。
认识一个东西最好的方式就是直接看看他。于是,我们直接来看看HTTP协议到底长什么样子。
POST / HTTP/1.1
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,is;q=0.8,en;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Host: www.baidu.com
Referer: https://www.baidu.com/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
sec-ch-ua-platform: "macOS"
param1=value1¶m2=value2
请求数据分为3部分:
? ? ? ? ? ? ? ? Host:表示请求的主机名
? ? ? ? ? ? ? ? User-Agent:浏览器的版本,笔者这里用的浏览器是Chrome
? ? ? ? ? ? ? ? Accept:表示浏览器接的资源类型
? ? ? ? ? ? ? ? Accept-Language:浏览器偏好的语言,服务器常常根据此返回不同语言的见面
? ? ? ? ? ? ? ? Accept-Encoding:表示浏览器可以支持的压缩类型
HTTP/1.1 200 OK
Server: Tengine
Content-Type: text/html
Transfer-Encoding: chunked
<html>
<head>
<title>Hello</title>
</head>
</html>
? ? ? ? ? ? ? ? Content-Type:表示响应内容的类型,例如text/html, image/jpeg
? ? ? ? ? ? ? ? Content-Length:表示响应内容的长度(字节数)
? ? ? ? ? ? ? ? Content-Encoding:表示响应压缩算法
? ? ? ? ? ? ? ? Cache- Control:表示客户端如何缓存
我们可以思考一下,客户端浏览器遵循HTTP协议请求服务端时,服务端会遵循HTTP协议的格式解析请求报文,例如判断请求方式(GET还是POST或其它),根据不同请求方式解析请求参数。这是一个通用的过程,而且与我们的业务逻辑是不相关的。因此,这部分的通用处理是否可以统一处理呢?又由谁处理呢?读者可以关注下一篇文章关于TomCat的介绍。(正在完成中)