JavaWeb-HTTP

2024-01-10 06:07:06
一、概念

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协议到底长什么样子。

(1)请求数据格式
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&param2=value2

请求数据分为3部分:

  • 请求行:请求数据的第一行。其中POST表示请求方式,/表示请求资源的路径,HTTP/1.1表示协议及版本;
  • 请求头: 第二行开始,格式为key: value形式;

? ? ? ? ? ? ? ? Host:表示请求的主机名

? ? ? ? ? ? ? ? User-Agent:浏览器的版本,笔者这里用的浏览器是Chrome

? ? ? ? ? ? ? ? Accept:表示浏览器接的资源类型

? ? ? ? ? ? ? ? Accept-Language:浏览器偏好的语言,服务器常常根据此返回不同语言的见面

? ? ? ? ? ? ? ? Accept-Encoding:表示浏览器可以支持的压缩类型

  • 请求体:POST请求的最后一部分,存放请求参数,GET请求没有这一部分,参数会在请求资源的路径最后携带
(2)响应数据格式
HTTP/1.1 200 OK
Server: Tengine
Content-Type: text/html
Transfer-Encoding: chunked

<html>
    <head>
        <title>Hello</title>
    </head>
</html>
  • 响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述
  • 响应头:第二行开始,格式为key: value格式

? ? ? ? ? ? ? ? Content-Type:表示响应内容的类型,例如text/html, image/jpeg

? ? ? ? ? ? ? ? Content-Length:表示响应内容的长度(字节数)

? ? ? ? ? ? ? ? Content-Encoding:表示响应压缩算法

? ? ? ? ? ? ? ? Cache- Control:表示客户端如何缓存

  • 响应体:最后一部分。存放响应数据
三、思考

我们可以思考一下,客户端浏览器遵循HTTP协议请求服务端时,服务端会遵循HTTP协议的格式解析请求报文,例如判断请求方式(GET还是POST或其它),根据不同请求方式解析请求参数。这是一个通用的过程,而且与我们的业务逻辑是不相关的。因此,这部分的通用处理是否可以统一处理呢?又由谁处理呢?读者可以关注下一篇文章关于TomCat的介绍。(正在完成中)

四、HTTP的特点
  • 基于TCP协议,面向连接,安全
  • 基本请求-响应模型,一次请求对应一次响应
  • 无状态,每次请求-响应是独立的,这种特点的优点是响应速度快,缺点是多次请求之间不能共享数据。

文章来源:https://blog.csdn.net/buzzkiller/article/details/135489872
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。