HTTP之我见

引子

HTTP(HyperText Transfer Protocol),超文本传输协议,是一个应用层协议,它是互联网上应用最为广泛的一种网络协议,都听说过HTTP协议,但是HTTP协议到底用来干啥,有什么特点,可能就不是很清楚了,在这里我写一些对HTTP的介绍和常见HTTP状态码的解析,帮助大家也帮助自己加深对HTTP的理解。

什么是HTTP

HTTP,超文本传输协议,是一种应用层协议,最初是为了约定HTML的发布与接受方法和规范,它使用在客户端与服务端之间,确保计算机能够正确快速的传输超文本文档,属于TCP/IP的一个子集。

HTTP的特点

HTTP特点有很多,在这里重点阐述HTTP的一个重要特点——无状态。

HTTP早期为了便于使用与设计,是一种无状态的应用层协议,所谓无状态,就是说我第一次请求A数据和我第二次请求A数据,两者之间是相互独立的,并没有什么关系,协议本身是不会保存之前一切的请求和响应报文的信息,这个特性使得HTTP能够更简单的实现,同时能够更快的处理事务。

但是随着网络的发展,我们的网页常常需要对用户的状态做一些处理,例如用户登录某个电商网站,那么在一定时间内,用户使用电商网站的时候就不该再次重新登录,而是网站能够记录用户的登录状态。所以再HTTP 1.1中引入了cookie技术用来最用户的状态做存储。

HTTP消息的简要组成

HTTP消息简单来说由两部分组成,一个是头部(Header),另一部分即体(Body)。

头部大小一般不超过32K,用来存储报文信息的一些属性,请求报文的头部一般包括如下内容:

  • 请求行
  • 请求首部字段
  • 通用首部字段
  • 实体首部字段

响应报文头部如下:

  • 状态行
  • 响应首部字段
  • 通用首部字段
  • 实体首部字段

另一部分,主体部分则是需要传输的具体信息,例如请求主体中的一些参数,响应主体中的HTML文档等等。

HTTP的建立连接过程

HTTP是应用层协议,它是基于TCP这个传输层协议的,所以在建立连接时也需要经历TCP三次握手:

  1. 客户端发送一个带有SYN标志的数据包(喂喂喂,服务器,我想和你通信)
  2. 服务端响应,返回一个SYN/ACK标志的数据包(嗯明白,我收到了你的通信请求了)
  3. 客户端返回一个ACK标志的数据包,握手结束(嗯,明白了)。

那么我们平时的HTTP数据具体是怎么传输的呢,这里就要说到一点网络分层的知识了,网络一般分为五层,自上而下如下:

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

而HTTP报文发送就是从应用层开始,图如下:

HTTP.jpg

发送端在层与层之间传输信息时,每经过一层就会打上一层的首部,反之,接收端就会逐层解包,最后拿到自己想要的信息。

HTTP常见状态码解释

1XX 消息

以1开头的状态码一般用来表示一些消息,代表请求已接收,需要继续处理,由于在HTTP 1.0 协议中没有定义任何1xx状态码,所以除非在某些实验条件下,一般服务器禁止向此类客户端发送1xx响应。

  • 100

    客户端应该继续发送请求,这个状态码表示服务器已经受到了客户端的部分请求,请求没有被拒绝,客户端应该继续发送请求的剩余部分,如果客户端请求已经完成,那就忽略该响应,等待服务器的最终响应。

2xx 成功

这一类状态码一般表示服务器已经成功接收、理解并接受了客户端请求。

  • 200 OK

    表示从客户端发送来的请求已经被服务端正确处理了。

  • 204 No Content

    表示请求处理已经成功,但是并没有资源可以返回,即响应报文没有实体部分,一般在客户端需要向服务端发送消息,但是不需要对客户端发送新的信息时使用。

  • 206 Partial Content

    表示客户端对请求的内容有范围要求,而服务端返回了符合要求的范围部分的内容。

3xx 重定向

这一类状态码表示服务器需要对请求做一些特殊的跳转处理,以保证能正确的处理请求。

  • 301 Moved Permanently

    永久重定向,表示客户端请求的内容以及被分配到了一个新的URL,以后应该使用资源现在所致的URI,也就是说,如果以及把资源保存成为了某个书签的话,需要更新书签的引用。

  • 302 Found

    临时重定向,表示客户端请求的资源暂时被分配到了某个新的URI,希望本次请求能使用新的URI访问,一般像跳转进行手机端页面还是PC端页面的展示时会用到这个状态码。

  • 303 See Other

    与302类似,但是该状态码明确要求客户端已GET方法重定向到某个新的URI上。

    当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
    301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使用时大家都会这么做。

  • 304 Not Modified

    客户端发送了一个带有附送条件的其请求,服务端表示资源能够找到,但是并没有符合条件的资源。

  • 307 Temporary Redirect

    与302相同,但是会遵守标准,不会把POST请求转成GET请求。

4XX 客户端错误

这一类状态表示响应发送错误,并且这个这个错误是由于客户端发生错误引起的。

  • 400 Bad Request

    服务端无法理解这个请求,请求是不是错了。

  • 401 Unauthorized

    请求页面需要认证,此时会弹出一个用于认证的对话框。

  • 403 Forbidden

    客户端没有权限访问该内容,所以服务端拒绝客户端的访问请求,一般在FTP控制中会用到,在某些后台管理系统中,从未授权的IP源发送的请求也会被拒绝。

  • 404 Not Found

    这几乎是最常见的客户端错误了,平时在生活中就能碰到,表示请求的资源在服务器中没有,找不到所请求的资源。

5XX 服务器错误

这一类状态码表示遇到了错误,并且错误是由服务器本身的问题所引起的。

  • 500 Internal Server Error

    服务器内部错误,表示服务器内部程序出错了。

  • 503 Service Unavailable

    服务器不可用,有两种情况,一种是服务器处于维护中,另一种就是服务器处于超负荷状态,例如抢票、秒杀等活动。

常见的状态码就是上面这些了,了解HTTP状态码的含义,对WEB开发时遇到的问题能够准确的定位,也能加深对WEB的理解,同时,某些时候状态码也会与状况不一致,有时候WEB应用程序内部发生错误,依旧会返回200 OK,这种时候就要具体问题具体分析了。

小结

HTTP的简要说明就到这里了,但是HTTP远不止这点内容,关于HTTP有两个资源推荐大家阅读。

图解HTTP:这本书用配图的方式介绍了HTTP,比较适合学习理解。

HTTP协议:这是HTTP的官方文档,英语不错还有时间的筒子们可以看看,也可以作为查阅地址。

代码转载自:https://pan.quark.cn/s/a4b39357ea24 本文重点阐述了利用 LabVIEW 软件构建的锁相放大器的设计方案及其具体实施流程,并探讨了该设备在声波相位差定位系统中的实际运用情况。 锁相放大器作为一项基础测量技术,其核心功能在于能够精确锁定微弱信号的频率参数并完成相关测量工作。 在采用 LabVIEW 软件开发的锁相放大器系统中,通过计算测量信号与两条参考信号之间的互相关函数,实现对微弱信号的频率锁定,同时输出被测信号的幅值信息。 虚拟仪器技术是一种基于计算机硬件平台的仪器系统,其显著特征在于用户可以根据实际需求自主设计仪器功能,配备虚拟化操作界面,并将测试功能完全由专用软件程序实现。 虚拟仪器系统的基本架构主要由计算机主机、专用软件程序以及硬件接口模块等核心部件构成。 虚拟仪器最突出的优势在于其功能完全取决于软件编程,用户可以根据具体应用场景灵活调整系统功能参数。 在基于 LabVIEW 软件开发的锁相放大器系统中,主要运用 LabVIEW 软件平台完成锁相放大器功能的整体设计。 LabVIEW 作为一个图形化编程环境,能够高效地完成虚拟仪器的开发工作。 借助 LabVIEW 软件,可以快速构建锁相放大器的用户操作界面,并且可以根据实际需求进行灵活调整和功能扩展。 锁相放大器系统的关键构成要素包括测量信号输入通道、参考信号输入通道、频率锁定处理单元以及信号幅值输出单元。 测量信号是系统需要检测的对象,参考信号则用于引导系统完成对测量信号的频率锁定。 频率锁定处理单元负责实现测量信号的锁定功能,信号幅值输出单元则负责输出被测信号的幅值大小。 在锁相放大器的实际实现过程中,系统采用了双路参考信号输入方案来锁定测量信号。 通过分析两路参考信号之间的相...
边缘计算环境中基于启发式算法的深度神经网络卸载策略(Matlab代码实现)内容概要:本文介绍了在边缘计算环境中,利用启发式算法实现深度神经网络任务卸载的策略,并提供了相应的Matlab代码实现。文章重点探讨了如何通过合理的任务划分与调度,将深度神经网络的计算任务高效地卸载到边缘服务器,从而降低终端设备的计算负担、减少延迟并提高整体系统效率。文中涵盖了问题建模、启发式算法设计(如贪心策略、遗传算法、粒子群优化等可能的候选方法)、性能评估指标(如能耗、延迟、资源利用率)以及仿真实验结果分析等内容,旨在为边缘智能计算中的模型推理优化提供可行的技术路径。; 适合人群:具备一定编程基础,熟悉Matlab工具,从事边缘计算、人工智能、物联网或智能系统优化方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究深度神经网络在资源受限设备上的部署与优化;②探索边缘计算环境下的任务卸载机制与算法设计;③通过Matlab仿真验证不同启发式算法在实际场景中的性能表现,优化系统延迟与能耗。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注算法实现细节与仿真参数设置,同时可尝试复现并对比不同启发式算法的效果,以深入理解边缘计算中DNN卸载的核心挑战与解决方案。
要查看 HTTP 报文,你可以使用 **Wireshark** 或其他抓包工具来捕获和分析网络流量。以下是详细的操作步骤: --- ### ✅ 使用 Wireshark 查看 HTTP 报文 #### 1. **启动 Wireshark** - 打开 Wireshark。 - 确保你已经安装了 **Npcap** 驱动(见上一个问题的解决方法)。 #### 2. **选择正确的网络接口** - 在主界面中,选择你当前使用的网络接口(如 `以太网`、`WLAN`)开始抓包。 #### 3. **过滤 HTTP 流量(可选)** 在顶部的过滤栏输入: ``` http ``` 这样只会显示 HTTP 协议的数据包。 > 如果你想查看 HTTPS 的明文报文,需要配置 TLS 解密,请参考相关问题。 #### 4. **打开浏览器访问一个 HTTP 网站** 例如访问:[http://example.com](http://example.com) #### 5. **停止抓包** 点击红色按钮 ■ 停止抓包。 #### 6. **查找并查看 HTTP 请求/响应报文** - 在数据包列表中找到与你访问的网站相关的 HTTP 请求(GET 方法)或响应(HTTP/1.1" 200 OK) - 双击该数据包,进入详情页。 #### 7. **查看完整的 HTTP 报文内容** 在中间面板中展开: ``` Hypertext Transfer Protocol ``` 你会看到完整的请求行、请求头、响应行、响应头等内容。 --- ### 🧾 示例:HTTP 请求报文结构 ```http GET /index.html HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 ... Accept: text/html,application/xhtml+xml... Connection: keep-alive ``` ### 🧾 示例:HTTP 响应报文结构 ```http HTTP/1.1 200 OK Date: Mon, 08 Apr 2024 12:34:56 GMT Server: Apache/2.4.1 (Unix) Content-Type: text/html; charset=UTF-8 Content-Length: 1234 <!DOCTYPE html> <html> <head>...</head> <body>...</body> </html> ``` --- ### 🧪 进阶操作:跟踪 TCP 流 如果你想查看完整的 HTTP 对话(客户端发送请求 + 服务器返回响应): 1. 找到任意一个 HTTP 数据包 2. 右键 → `Follow` → `TCP Stream` 3. 弹出窗口中会显示完整的通信内容(包括 HTML 内容) --- ### 🔒 注意事项 - 如果访问的是 HTTPS 网站,Wireshark 默认只能看到加密内容,需额外配置才能解密。 - 若看不到任何 HTTP 包,请确认是否设置了正确过滤器或访问了 HTTPS 站点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值