一个例子搞明白生成HTTP消息的原理

写在前面的话( •̀ .̫ •́ )✧
最近在努力搞明白HTTP相关的知识,可能后续还会更新其他关于网络的其他知识,一种知识点千百种写法,有理解不到位的地方请大佬们指出,本篇文章的插图来自于:《网络是怎样连接的》

1. 关于浏览器-Web服务器的通讯

浏览器-Web服务器之间的通讯,我这里类比于老板-秘书之间的对话。

  • 老板:“一分钟,我要xxx的全部资料”
    • 秘书%&#$*~经过一系列操作:(分析主体:提取出来要的资料是关于xxx的,寻找有xxx资料的位置,拿到xxx资料,跑回办公室给老板双手奉上)
  • 秘书:“老板,这是你要的xxx的全部资料”

  • 浏览器:“一秒钟,请给我xxx网页的数据”

    • 浏览器发送请求:浏览器发起HTTP请求,包括请求方法(如GET)、目标资源的URL和请求头信息(如浏览器类型)。
    • 委托操作系统处理:浏览器将请求交给操作系统,操作系统的网络栈(如TCP/IP协议栈)负责处理这些请求。
    • 协议栈打包数据并交给网卡协议栈将请求数据封装成网络数据包,并为这些数据包添加传输层和网络层所需的头信息,如目的IP地址和端口号。打包好的数据包被传递给网卡,随后网卡通过物理网络(如以太网或无线网络)将数据发送出去。
    • 数据包经过交换机到路由器:数据包首先可能经过局域网内的交换机,然后被传输到路由器,由路由器负责将数据包发送到更广阔的互联网。
    • 数据包到达Web服务器:数据包在互联网中经过多个路由器的转发,最终到达目标Web服务器。
    • Web服务器发送响应:Web服务器处理接收到的请求,并生成相应的响应消息(如HTML页面、图片等),这些响应消息沿着类似的网络路径返回给浏览器。
  • Web服务器:“好的,这就是你要的数据”


2. HTTP协议原理

HTTP是一种基于客户端-服务器的协议,它使用请求-响应模式进行通信:

  • 客户端:通常是浏览器或者其他软件,它发起请求
  • 服务器:接收请求并发送响应通常是托管网页的服务器

请求的基本流程如下:

  • 客户端(如浏览器)构造一个 HTTP 请求并发送到服务器。
  • 请求包括请求行(包含请求方法、资源路径和 HTTP 版本)、消息头(提供附加信息,如主机、用户代理等)和消息体(通常在 POST 请求中包含数据)。

3. HTTP请求消息的构造

请求行 – 消息头 – 消息体
HTTP消息的格式(a)请求消息如下:
在这里插入图片描述
注:什么是URI?
URI(Uniform Resource Identifier,统一资源标识符)是一种用于唯一标识资源的标准化字符串,可以用来标识网页、文件、服务或任何可以通过网络访问的资源。
它主要有两种形式:URL(Uniform Resource Locator,统一资源定位符)和 URN(Uniform Resource Name,统一资源名称)。 URL 是最常见的 URI 形式,用于指定资源的地址,图中的URI一般情况下指的是资源路径哦!

3.1 关于请求行

举个栗子:
例如我们的URL是这样:http 是协议,www.example.com 是域名,/index.html 是资源路径。

http://www.example.com/index.html

输入URL:当我们在浏览器输入一个URL并按下回车时,浏览器会自动构造一个HTTP请求,URL可供浏览器解析出“想要访问的资源”的位置。
具体解释一下请求行,主主要包含以下三个部分:

  • 请求方法:通常是GET,表示我们想要获取资源
  • 资源路径:URL中的路径部分-- /index.html
  • HTTP版本:HTTP/1.0 、HTTP/1.1

因此构造出来的请求行是这个样子。

GET /index.html HTTP/1.1

3.2 关于消息头和消息体

消息头和消息体没什么好讲的哈哈,很好理解,我写了一张消息头的常见表如下,可以大概看一遍,然后具体可以看第五部分:请求与响应实例,结合具体例子就没那么抽象了。

头字段描述HTTP/1.0HTTP/1.1
Host请求的目标主机和端口号(必须字段)×
User-Agent发起请求的客户端信息
Accept客户端愿意接受的媒体类型
Accept-Charset客户端愿意接受的字符集
Accept-Encoding客户端可接收的内容编码方式
Accept-Language客户端愿意接受的语言类型×
Authorization请求的认证信息
Cache-Control缓存指令×
Connection控制连接管理(如keep-alive和close)
Cookie客户端存储的Cookie数据×
Content-Length请求正文的长度
Content-Type请求正文的媒体类型
Date报文创建时间
Expect指定客户端所期望的特定服务器行为×
From请求发送者的电子邮件地址
If-Match对比实体标记(ETag)以决定更新或操作×
If-Modified-Since资源的最后修改时间,对比是否需要更新
If-None-Match如果实体未修改则返回304×
If-Range条件请求头,检查部分请求×
If-Unmodified-Since只有在资源未被修改时,请求才会成功×
Max-Forwards指定转发的最大次数×
Pragma报文指令
Proxy-Authorization代理的认证信息
Range请求资源的范围部分×
Referer引导客户端到该请求的源页面地址
TE传输编码接受请求×
Upgrade协议升级×
Via指示通过哪些代理或网关传输×
Warning通告可能的问题×

说明:
√ 表示该头字段在对应版本中可用。
× 表示该头字段在对应版本中不可用。


4. Web服务器响应消息的构造

响应的基本流程和请求基本是相似的。
HTTP消息的格式(b)响应消息如下:在这里插入图片描述
这里的状态码主要有下面几种:
HTTP状态码概要:
1xx:告知请求的处理进度和情况
2xx:成功
3xx:需要进一步操作
4xx:客户端错误,例如404 not found
5xx:服务器错误


5. 请求与响应实例

1条请求消息中只能写1个URI,如果需要获取多个文件,需要发送多次请求。

当我们输入一个网址时,想要拿到这个网页的数据,需要发送一次请求,如果这个网页中包含一个图片时,如果写过html的朋友一定知道,图片是在网页的相应位置嵌入形如<img src=“image1.jpg”>,当遇到图片相关的标签时,会在屏幕上留出显示图片的空间,然后再次访问Web服务器。所以下面的这个实例中中需要2次请求和2次响应。
在这里插入图片描述

5.1 请求消息

在这里插入图片描述

5.2 响应消息

在这里插入图片描述

本篇Over!撒花!(●'◡'●)
哪里有疑问请评论或私信!感谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值