HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口

简介: 【6月更文挑战第23天】HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。

HTTP请求的基本流程可以分为以下几个步骤:

  1. 构建请求行

    • 浏览器根据用户提供的URL来构建一个HTTP请求。请求行包括三个部分:请求方法(如GET、POST)、请求的资源路径和HTTP版本号。
  2. 查找浏览器缓存

    • 在真正发送请求之前,浏览器会先检查本地缓存中是否有这个请求的响应结果。如果有且没有过期,那么就直接使用缓存中的数据,否则继续执行下一步。
  3. 准备IP地址和端口号

    • 根据URL中的域名解析出服务器的IP地址,并确定需要连接的TCP端口(默认为80或443)。
  4. 等待TCP队列(仅适用于HTTP/1.1):

    • 如果是HTTP/1.1版本的请求,在建立TCP连接之前还需要确认当前请求是否需要在建立TCP连接前排队等候。这是因为HTTP/1.1允许复用TCP连接以提高性能。
  5. 建立TCP连接

    • 使用TCP协议与服务器建立连接。这涉及到三次握手过程,确保客户端和服务器之间的通信通道已经准备好。
  6. 发送HTTP请求头

    • 一旦TCP连接建立成功,浏览器将开始发送HTTP请求报文。首先发送的是请求行,接着是一系列的请求头,它们包含了关于请求的各种信息,如Accept、Cookie、User-Agent等。
  7. 发送HTTP请求体

    • 对于POST、PUT等带有请求体的方法,此时浏览器会发送请求体数据。例如表单提交的数据会被编码后随请求一起发送到服务器。
  8. 服务器处理请求

    • 服务器接收到完整的请求后,会对请求进行处理。这可能涉及数据库查询、文件操作或其他业务逻辑。
  9. 服务器返回响应

    • 处理完成后,服务器构建HTTP响应报文并将其通过已建立的TCP连接发送回给客户端。响应报文包含状态行、响应头以及可选的响应体。
  10. 关闭TCP连接

    • 完成数据传输后,通常情况下TCP连接会被关闭。但在HTTP/1.1中,如果请求头指定了Connection: keep-alive,则该连接可能会被保持一段时间以便重用。
  11. 浏览器接收响应

    • 浏览器从TCP连接中读取响应数据,解析响应报文并展示给用户。
  12. 更新浏览器缓存

    • 如果响应头指示了某些内容应该被缓存,浏览器会将其存储起来,以便后续的请求可以直接使用。

以上就是HTTP请求的基本流程。需要注意的是,不同的HTTP版本(如HTTP/1.0、HTTP/1.1和HTTP/2)之间存在一些差异,但基本原理是相同的。

相关文章
|
10月前
|
数据采集 人工智能 Java
1天消化完Spring全家桶文档!DevDocs:一键深度解析开发文档,自动发现子URL并建立图谱
DevDocs是一款基于智能爬虫技术的开源工具,支持1-5层深度网站结构解析,能将技术文档处理时间从数周缩短至几小时,并提供Markdown/JSON格式输出与AI工具无缝集成。
477 1
1天消化完Spring全家桶文档!DevDocs:一键深度解析开发文档,自动发现子URL并建立图谱
|
4月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
345 3
|
11月前
|
数据采集 缓存 JavaScript
数据抓取的缓存策略:减少重复请求与资源消耗
本教程聚焦于提升爬虫效率与稳定性,通过结合缓存策略、代理IP技术(如爬虫代理)、Cookie和User-Agent设置,优化数据采集流程。以知乎为例,详细讲解如何抓取指定关键词的文章标题和内容。内容涵盖环境准备、代码实现、常见问题及解决方案,并提供延伸练习,帮助读者掌握高效爬虫技巧。适合具备Python基础的初学者,助你规避网站机制,顺利获取目标数据。
320 2
数据抓取的缓存策略:减少重复请求与资源消耗
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
879 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
11月前
|
JSON 监控 网络协议
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
1202 9
|
11月前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
348 1
|
11月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
461 5
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
472 0
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
310 0
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
252 0

热门文章

最新文章

推荐镜像

更多
  • DNS