什么是http协议?

http协议是web开发经常使用的协议,虽然现在web开发都使用更加安全的https协议。 但,https只是http的扩展,增加了对http的加密。 核心依然包括http,所以对于web开发学习而言,http依然需要了解

1.http官方的介绍:

超文本传输协议 (HTTP) 是万维网的基础,通过超文本链接加载网页。HTTP 是一种应用程序层协议 ,旨在在联网设备之间传输信息,并在网络协议栈 的其他层之上运行。HTTP 上的一个典型工作流程是客户端计算机服务器发出请求,然后服务器发送响应消息

OK, 呵呵!! 很明显,介绍的很抽象,计算机的很多术语都是这样.互相交织,形成了一张巨大的知识网络......唉@!!!!!

---------先过一遍这些术语-------

1.1 超文本

其实超文本, 就是文本,文本就是一个一个的字符, 就像现在你看到的这些文本一样:) ,但是超文本与之不同的点在于, 它们的待遇不同。普通的文本,你怎么写,浏览器就怎么展示,但是对于超文本,就不一样,超文本这些字符有些组合起来,就会形成一些普通文本没有的'潜规则'。而浏览器认识这些'潜规则',所以浏览器就解析这些'潜规则',然后将这些'潜规则'展示给你看!

比如下面这段文本:

html 复制代码
<img src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/e08da34488b114bd4c665ba2fa520a31.svg"/>

浏览器就会解释为:

所以,这就是超文本的"超",基于文本,而不止于文本

1.2 应用层协议

什么叫协议呢? 其实就是「规定」, 只不过这个规定,是多方面达成共识的!是大家都承认的,是标准! 应用层协议,其实是从计算机网络的分层来说, 它位于OSI模型的应用层, 是在传输层之上,基于传输层。 网络这块,非常复杂,不是一句两句能说清的,参考wiki-OSI-模型, 网络分层有点类似,邮寄快递一样!

2.http的工作流程

http设计最初的目的就是用于浏览静态网页的,用于客户端从服务器获取网页,然后在客户端展示网页信息。如下图:

更加详细的图

3.什么是http请求

HTTP 请求是 Internet 通信平台(例如 Web 浏览器)索取其加载网站所需信息的方式。 在 Internet 上发出的每个 HTTP 请求都携带一系列编码数据,这些数据带有不同类型的信息。典型的 HTTP 请求包含如下信息:

  1. HTTP 版本类型
  2. URL
  3. HTTP 方法
  4. HTTP 请求标头
  5. 可选的 HTTP 正文。
text 复制代码
GET / HTTP/1.1    注释信息//请求行: 请求方法+http版本
--------请求头-注释信息--------
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
---------请求头-----

........空白的请求体

3.1什么是 HTTP 方法?

HTTP 方法(有时称为 HTTP 动词)指示 HTTP 请求对所查询服务器的期望操作。例如,最常见的两种 HTTP 方法是"GET"和"POST"。"GET"请求期望返回信息(通常以网站的形式),而"POST"请求通常表示客户端正在向 Web 服务器提交信息(例如表单信息,如提交的用户名和密码)

3.2什么是 HTTP 请求标头?

HTTP 标头包含以键-值对存储的文本信息,它们包含在每个 HTTP 请求(和响应中,下文将详细介绍)中。这些标头可传达核心信息,如客户端正在使用什么浏览器,正在请求什么数据。

来自 Google Chrome 网络标签页的 HTTP 请求标头示例:

3.3什么是 HTTP 请求正文?

请求正文是包含请求所传输信息的"主体"的部分。HTTP 请求的正文包含正在提交到 Web 服务器的任何信息,例如用户名和密码,或输入到表单中的任何其他数据。

4.什么是 HTTP 响应?

HTTP 响应是 Web 客户端(通常是浏览器)从 Internet 服务器收到的用于响应 HTTP 请求的内容。这些响应根据 HTTP 请求中的要求传达有价值的信息。

典型的 HTTP 响应包含:

  1. HTTP 状态代码
  2. HTTP 响应标头
  3. 可选的 HTTP 正文

4.1什么是 HTTP 状态代码?

HTTP 状态代码是 3 位数代码,最常用于指示 HTTP 请求是否已成功完成。状态代码分为以下 5 个区块:

  1. 1xx 信息性
  2. 2xx 成功
  3. 3xx Redirection
  4. 4xx 客户端错误
  5. 5xx 服务器错误
  6. "xx"表示 00 到 99 之间的不同数字 以数字"2"开头的状态代码表示成功。例如,在客户端请求网页后,最常见的响应状态码为"200 OK",这表示请求已正确完成。 如果响应以"4"或"5"开头,则表示存在错误,不会显示网页。以"4"开头的状态代码表示客户端错误(一种常见情况是在 URL 输入错误时遇到"404 NOT FOUND"状态代码)。以"5"开头的状态代码表示服务器端出了问题。状态码也可以"1"或"3"开头,分别表示信息响应和重定向。 更加详细的状态码

4.2什么是 HTTP 响应标头?

与 HTTP 请求非常相似,HTTP 响应也带有标头,用于传达重要的信息,例如在响应正文中发送的数据的语言和格式。 来自 Google Chrome 网络标签页的 HTTP 响应标头示例:

4.3什么是 HTTP 响应正文?

成功回应"GET"请求时,HTTP 响应通常具有包含所请求信息的正文。在大多数 Web 请求中,正文是 HTML 数据,Web 浏览器会将其转换为网页。

5.为什么http是无状态的?

首先解释一下: http无状态,意思是,每个http请求都是独立的,彼此之间没有任何联系,不会构成所谓的互相关联和依赖的情况。

为什么这么设计,我的理解是,最初http被设计的时候,只是用于客户端获取服务端的静态页面,所以当时既不需要登陆,也不需要其他复杂的操作,所以是不需要状态的。在后面的迭代发展中, web服务器需要和客户端保持状态,是通过http所发送的内容来实现,而不是通过http本身来实现。常常使用cookies、会话管理器、隐藏表单字段等技术来维护状态。

因为无状态,也带来了很多好处:

  1. 简化了服务器的设计:由于服务器不需要保存状态信息,因此实现起来比较简单和直接。这使得HTTP协议相对容易理解和实现。

  2. 易于无状态组件之间的交互:因为每个请求都是独立的,所以可以通过不同的服务器或基础设施组件处理不同的请求,而不需要担心用户的状态信息。这对构建可扩展和互操作性强的系统非常有用。

  3. 提高了服务器的伸缩性:因为不用跟踪状态信息,所以可以更容易地水平扩展(添加更多服务器)以处理更多的请求。没有状态信息,就不需要担心同步状态数据或者用户的后续请求必须发送到原先处理它的那个服务器。

  4. 便于缓存:无状态请求可以更容易地被缓存处理,因为响应不依赖于客户端的状态。

6. http1.1中增加的keep alive

HTTP Keep-Alive,又称为持久连接(Persistent Connection),是HTTP协议的一个机制,允许同一个TCP连接上发送和接收多个HTTP请求/响应,而不是为每个请求/响应建立新的连接。这是HTTP/1.1协议的一个标准特性(在HTTP/1.0中,它是一个可选的扩展)

Keep-Alive的好处包括:

  1. 减少延迟:由于不需要为每个请求打开新的连接,可以减少因连接建立(如三次握手)带来的时间延迟,从而使网页或API的加载时间更快。

  2. 减少CPU和内存使用:频繁地建立和关闭连接会增加CPU的使用率以及内存的使用量,使用Keep-Alive可以有效地减轻服务器的资源压力。

  3. 减少网络拥塞:减少了连接的总数,减轻了网络的拥塞情况,提高了网络利用率。

  4. 提高HTTP性能:由于连接可以被重用,连续的请求和响应之间不需要重新建立连接,减少了握手次数,整体HTTP性能得到提升。

  5. 更有效的TCP连接:TCP连接的性能随着时间提高(例如,慢启动阶段之后),重用连接可以让TCP连接保持在性能较优状态。

当然,对于长时间不活动的持久连接,服务器通常会设置一个超时时间,并在连接空闲到一定时间后关闭它,以释放资源。对于高并发的Web服务器,合理配置Keep-Alive及其超时时间是提高网络性能的一个重要手段。

参考链接🔗

developer.mozilla.org/en-US/docs/...
www.w3schools.com/whatis/what...
www.cloudflare.com/zh-cn/learn...
en.wikipedia.org/wiki/HTTP
developer.mozilla.org/en-US/docs/...

相关推荐
椰椰椰耶2 小时前
【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))
网络·网络协议·http
DieSnowK3 小时前
[项目][WebServer][CGI机制 && 设计]详细讲解
linux·开发语言·c++·http·项目·webserver·cgi机制
看山还是山,看水还是。3 小时前
《网络通信原理》
http·网络安全·智能路由器·信息与通信·信号处理
运维小白。。14 小时前
Nginx 反向代理
运维·服务器·nginx·http
城南云小白15 小时前
web基础+http协议+httpd详细配置
前端·网络协议·http
一叶飘零_sweeeet19 小时前
为什么 Feign 要用 HTTP 而不是 RPC?
java·网络协议·http·spring cloud·rpc·feign
时之彼岸Φ21 小时前
Web:HTTP包的相关操作
网络·网络协议·http
秋已杰爱21 小时前
HTTP中的Cookie与Session
服务器·网络协议·http
W215521 小时前
LINUX网络编程:http
网络·网络协议·http
DieSnowK1 天前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver