什么是HTTP

229次阅读
没有评论

共计 2246 个字符,预计需要花费 6 分钟才能阅读完成。

什么是 HTTP

一个放学后的午后。

小明:😯王老师你知道 HTTP 是什么吗?

王老师:HTTP 呀,HTTP 是超文本传输协议缩写,它是用来在网络上传输信息的一种规则。

小明:搜噶,那它是怎么工作的呀?

王老师:它就像一种沟通的语言,当你在浏览器里输入一个网址按下回车时,浏览器就会向服务发送一个 HTTP 请求,请求这个网页的内容。

小明:然后呢?

王老师:然后服务器接受到这个请求后,会把网页的内容打包成 HTTP 响应,再发送回你的浏览器,这样你就能够看到网页上的信息和图像了。

小明:哦,原来这样啊,HTTP 就是让我们能在网上看到各种网页内容的东西了。

王老师:是的呀,当然 HTTP 还有些特点,比如它是无状态协议。

小明:啊?什么意思?

王老师:这意味着每次服务器收到请求时候,并不会记得之前和客户端的通信历史,每个请求都是独立的,服务器不会保存之前的状态信息。

小明:那岂不是很不方便,我再网上填写的表单,下一步怎么知道之前填写的什么。

王老师:是的,这就需求借助一些其他机制了,比如使用 Cookie 或者 Session,今天就说 HTTP。这个之后再给你讲。

小明:那我还听说过 TCP 和 HTTP,这几个 P 是不是都一种的呢?

王老师:(😏震惊,p 可还行)HTTP 依赖 TCP 来传输数据的,当你发送 HTTP 请求时,它会封装到 TCP 包里,然后通过网络传输到服务器。

王老师 :TCP 是一种传输协议,而 HTTP 是应用层协议,他们之间有一个重要联系就是在 HTTP 进行数据传输时依赖于 TCP 来建立可靠的传输通道,那么他们有一个叫“🤝🤝🤝 三次握手”的过程建立连接。

小明 :我去,这么复杂呢, 三次握手 是个什么操作呀。

王老师 三次握手 首先是客户端就你的那个谷歌浏览器访问网页,向服务器发送一个请求连接的数据包,这个过程叫做SYN(同步)

小明:然后呢?

王老师:然后服务器收到 SYN 后,会回复一个确认连接的数据包,同时会向客户端发送一个 SYN,这个过程叫SYN-ACK(同步 - 确认)

小明:最后一步呢?

王老师:客户端收到服务器端回复后,会再次向服务器发送一个确认连接的数据,这个过程叫做ACK(确认)。这样,三次握手完成,建立连接成功。

小明:明白了,通过这个三次握手,客户端和服务器建立了一个可靠的连接,然后才能进行 HTTP 数据的传输。

于是小明熬夜把 HTTP 详细了解了一遍。

HTTP/0.9 – One Liner (1991)

HTTP 的第一个有记录的版本是 1991 年提出的 HTTP/0.9。有史以来最简单的协议;有一个名为 GET 的方法、如果客户端访问服务器上的某个网页,他会发出以下请求。 GET /index.html  那么服务器端响应如下所示  (response body) ((connection closed))  服务器收到请求,回复 HTML 作为响应,一旦内容传输完毕,连接就会关闭。

HTTP/1.0 – 1996 年

1996 年 HTTP/1.0 比原来的版本有很大的改进。现在可以处理响应格式有 图像 视频文件 纯文本 和其他内容类型。添加了 POST 和 HEAD 方法,更改了请求和响应格式。将 HTTP 标头添加到请求和响应中,添加了状态代码来标识和响应。以下是请求和响应的样子  GET / HTTP/1.0 Host: cs.fyi User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) Accept: */*

除了请求之外,客户端还发送了它的个人信息和所需要响应的类型等。

HTTP/1.0 200 OK Content-Type: text/plain Content-Length: 137582 Expires: Thu, 05 Dec 1997 16:00:00 GMT Last-Modified: Wed, 5 August 1996 15:55:28 GMT Server: Apache 0.84

(response body) (connection closed)

响应的开头是 HTTP/1.0(HTTP 后跟版本号)、然后是状态代码 200 后面原因短句 OK。

常见的状态码  200请求成功;404请求资源不存在;500服务器错误,无法完成请求。

Content-Type:MIME 类型,告诉接收端应该如何解析该内容。Content-Length:主体的长度,字节单位。

HTTP/1.1-1999

  • 添加了新的 HTTP 方法,引入 PUT、PATCH、OPTIONS、DELETE
  • 持久连接,在 HTTP/1.0 中,每个连接只有一个请求,一旦请求完成,连接就会关闭,这会有性能影响。HTTP/1.1 引入持久连接,即连接默认情况下不会关闭,而是保持打开状态,从而允许多个顺序请求。要关闭连接,请求头 Connection:close 必须可用。客户端通常在最后一个请求中发送此标头以安全的关闭连接。
  • 管道化,客户端可以在同一个连接上向服务器发送多个请求,而无需等待服务器端响应,并且服务器必须按照请求的顺序发送响应。但是,客户端如何知道这是第一个响应下载完成并且下一个响应内容开始的点,为了解决这个问题,必须存在 Content-Length 标头,客户端可以使用它来识别响应结束的位置,并且可以开始等待下一个响应。

HTTP/2 – 2015

到现在为止,您必须确信为什么我们需要对 HTTP 协议进行另一次修订。HTTP/2 专为低延迟内容传输而设计。与旧版本 HTTP/1.1 的主要功能或区别包括

  • 二进制而不是文本
  • 多路复用 – 单个连接上的多个异步 HTTP 请求
  • 使用 HPACK 进行标头压缩
  • 服务器推送 – 单个请求的多个响应
  • 请求优先级
  • 安全
正文完
 3
XSTPLAN
版权声明:本站原创文章,由 XSTPLAN 于2024-06-03发表,共计2246字。
转载说明:本站所有资源和文章版权归作者所有,未经授权禁止转载。如有转载或引用,请注明来源。
评论(没有评论)