当前位置: 首页 > news >正文

浏览器发送HTTP请求的过程

浏览器发送HTTP请求的过程在这里插入图片描述

浏览器发送HTTP请求的过程是一个复杂但有序的步骤,‌主要包括以下几个阶段:‌
在这里插入图片描述

1.‌构建请求‌

  用户在浏览器地址栏输入URL并按下回车键,‌浏览器首先会构建HTTP请求行信息,‌包括请求方法(‌如GET、‌POST)‌、‌请求资源路径和HTTP版本(‌如HTTP/1.1)‌。‌

  URL(‌Uniform Resource Locator,‌统一资源定位符)‌是一种用于标识某一处资源的地址,‌在互联网上用于定位信息所在的位置。‌它最初是由蒂姆·伯纳斯-李(‌Tim Berners-Lee)‌在1991年创建,‌并在1994年被互联网工程任务组(‌IETF)‌采纳为标准(‌RFC 1738)‌。‌URL的格式通常包括以下几个部分:‌
(1)协议‌:‌指定访问资源所使用的协议类型,‌如HTTP、‌HTTPS、‌FTP等。‌它告诉浏览器如何访问指定的资源。‌
(2)主机名‌:‌存放资源的服务器的域名系统(‌DNS)‌主机名或IP地址。‌它标识了资源所在的服务器的位置。‌
(3)端口号‌(‌可选)‌:‌指定服务器上的端口号,‌用于访问资源。‌如果省略,‌则使用协议的默认端口,‌如HTTP的默认端口是80,‌HTTPS的默认端口是443。‌
(4)路径‌:‌指定资源在服务器上的路径。‌它告诉服务器需要访问哪个具体的资源。‌
(5)查询字符串‌(‌可选)‌:‌提供额外的参数信息,‌用于指定对资源的进一步操作或过滤条件。‌它以问号(‌?)‌开始,‌后面跟随参数名和值,‌多个参数之间用与号(‌&)‌分隔。‌
(6)锚点‌(‌可选)‌:‌也称为片段标识符,‌用于指定资源内部的一个特定位置。‌它以井号(‌#)‌开始,‌后面跟随锚点的名称。‌

  URL是互联网上资源定位和访问的基础,‌通过URL,‌我们可以访问网页、‌图片、‌视频、‌文件等各种类型的资源。‌在Web开发中,‌URL的设计和管理对于网站的可用性和搜索引擎优化(‌SEO)‌都非常重要。‌


2.‌查找缓存‌

  在发送请求之前,‌浏览器会检查本地缓存中是否有请求的资源。‌如果找到未过期的缓存资源,‌则直接返回该资源副本,‌结束请求。‌
在这里插入图片描述
浏览器缓存文件存储在用户配置文件的特定文件夹中,‌具体路径如下:‌
(1)Google Chrome‌:‌在Windows系统中,‌路径通常为C:\Users[用户名]\AppData\Local\Google\Chrome\User Data\Default\Cache23。‌

(2)Microsoft Edge‌:‌在Windows系统中,‌路径通常为C:\Users[用户名]\AppData\Local\Microsoft\Edge\User Data\Default\Cache2。‌

(3)Mozilla Firefox‌:‌在Windows系统中,‌路径通常为C:\Users[用户名]\AppData\Local\Mozilla\Firefox\Profiles[随机字符串].default\Cache23。‌

在macOS系统中,‌浏览器缓存通常位于~/Library/Caches/下的相应浏览器名称文件夹中1。‌


3.‌DNS解析‌

  如果缓存查找失败,‌浏览器需要知道服务器的IP地址才能发起请求。‌此时,‌浏览器会进行DNS解析。‌
在这里插入图片描述

  DNS解析是指将域名(‌如:www.example.com)‌转换为对应的IP地址(‌如:192.0.2.1)‌的过程,‌它是互联网服务中的一个核心环节。‌DNS解析由分布式的DNS系统来管理,‌包括根域名服务器、‌顶级域名服务器、‌权威域名服务器和本地域名服务器等多个层级。‌通过DNS解析,‌用户可以通过简单易记的域名来访问互联网上的各种服务和资源,‌而无需记住复杂的IP地址。‌DNS解析不仅提高了用户访问互联网的便捷性,‌也是互联网基础设施的重要组成部分‌。‌

(1)浏览器首先会搜索自身的DNS缓存。‌
(2)如果缓存中没有找到,‌浏览器会搜索操作系统的DNS缓存。‌
(3)如果操作系统缓存中也没有,‌浏览器会向本地配置的DNS服务器(‌通常是互联网服务提供商提供的)‌发起DNS解析请求。‌
(4)DNS解析过程可能涉及递归查询,‌包括根DNS服务器、‌顶级域DNS服务器和权威DNS服务器,‌直到找到对应的IP地址。‌


4.‌建立TCP连接(‌三次握手)‌‌

  浏览器使用解析得到的IP地址和端口号(‌默认HTTP为80端口)‌,‌与服务器建立TCP连接。‌
在这里插入图片描述

  TCP(‌传输控制协议)‌是一种面向连接的、‌可靠的、‌基于字节流的运输层通信协议。‌在TCP/IP协议中,‌TCP协议通过三次握手(‌Three-way Handshake)‌来建立一个可靠的连接。‌
以下是三次握手的具体过程:‌
(1)客户端发送SYN包请求建立连接。‌客户端发送一个TCP包,‌其中SYN(‌同步序列编号)‌标志位被设为1,‌表示这是一个连接请求。‌同时,‌客户端会随机生成一个初始序列号(‌Sequence Number)‌,‌用于标识从这个TCP包开始的数据流。‌
(2)服务器响应SYN-ACK包。‌服务器收到客户端的连接请求后,‌会发送一个应答的TCP包。‌这个包中SYN标志位也被设为1,‌同时ACK(‌确认应答)‌标志位也被设为1,‌表示这是一个对客户端连接请求的应答,‌并且服务器也同意建立连接。‌服务器同样会生成一个自己的初始序列号。‌
(3)客户端发送ACK包,‌连接正式建立。‌客户端收到服务器的应答后,‌会再发送一个TCP包,‌其中ACK标志位被设为1,‌表示对服务器应答的确认。‌同时,‌这个包中还会包含对服务器初始序列号的确认(‌即服务器序列号+1)‌。‌

  完成这三次握手后,‌客户端和服务器之间的TCP连接就建立了,‌它们可以开始传输数据。‌这个过程确保了双方都准备好进行数据传输,‌并且都知道了对方的初始序列号,‌从而可以正确地组装和排序接收到的数据包。‌


5.‌发送HTTP请求‌

(1)连接建立后,‌浏览器发送HTTP请求到服务器。‌
(2)请求报文包括请求行、‌请求头部(‌可选请求正文)‌。‌
(3)请求行包含请求方法、‌URL路径和HTTP版本。‌
(4)请求头部提供额外的信息,‌如主机名、‌用户代理、‌接受的内容类型等。‌

HTTP/1.1协议中共定义了八种方法(‌有时也叫“动作”)‌,‌来表明Request-URL指定的资源不同的操作方式:‌
(1)GET‌:‌请求指定的页面信息,‌并返回实体主体。‌
(2)HEAD‌:‌类似于GET请求,‌但返回的响应中没有具体的内容,‌用于获取报头。‌
(3)POST‌:‌向指定资源提交数据进行处理请求(‌例如提交表单或者上传文件)‌,‌可能会导致新的资源的建立和/或已有资源的修改。‌
(4)PUT‌:‌从客户端向服务器端传送的数据取代指定的文档内容。‌
(5)DELETE‌:‌请求服务器端删除指定的页面。‌
(6)CONNECT‌:‌HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器端。‌
(7)OPTIONS‌:‌允许客户端查看服务器端的性能。‌
(8)TRACE‌:‌回显服务器端收到的请求,‌主要用于测试或诊断


6.‌服务器处理请求‌

(1)服务器接收到请求后,‌根据请求行中的路径和方法处理请求。‌
(2)解析请求行和请求头部。‌
(3)根据请求生成响应内容(‌如HTML页面、‌图片等)‌。‌


7.‌服务器发送响应‌

  服务器处理完请求后,‌生成HTTP响应报文并通过TCP连接发送回客户端。‌响应报文包括状态行、‌响应头部和响应体。‌

HTTP请求的状态码是服务器对客户端请求的响应状态标识,‌由三位数字组成,‌分为五类:‌
(1)‌1xx(‌信息性状态码)‌‌:‌表示请求已被接受,‌需要继续处理。‌如:100 Continue,‌表示客户端应继续发送请求。‌
(2)‌2xx(‌成功状态码)‌‌:‌表示请求已成功被服务器接收、‌理解并处理。‌如:200 OK,‌表示请求成功。‌
(3)‌3xx(‌重定向状态码)‌‌:‌表示需要进一步操作以完成请求。‌如:301 Moved Permanently,‌表示请求的资源已永久移动到新的URL。‌
(4)‌4xx(‌客户端错误状态码)‌‌:‌表示请求包含语法错误或无法被服务器理解。‌如:404 Not Found,‌表示请求的资源不存在。‌
(5)‌5xx(‌服务器错误状态码)‌‌:‌表示服务器在处理请求时遇到了错误。‌如:500 Internal Server Error,‌表示服务器内部错误。‌


8.‌客户端处理响应‌

(1)浏览器接收到服务器的响应后,‌根据响应头部中的信息处理响应体。‌
(2)解析HTML文档,‌并渲染页面。‌
(3)可能发出额外的请求来获取嵌入的资源(‌如CSS、‌JavaScript、‌图片等)‌。‌


9.‌关闭连接(‌四次挥手)‌‌

根据HTTP版本和连接头部,‌决定是否关闭TCP连接。‌
(1)HTTP/1.0默认每次请求后关闭连接,‌除非指定Connection: keep-alive。‌
(2)HTTP/1.1默认保持连接,‌除非指定Connection: close。‌
这个过程确保了客户端和服务器之间能够有效地交换信息,‌使用户能够访问和浏览Web内容。
在这里插入图片描述


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ABC 368 G - Add and Multiply Queries
  • [Day 63] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • PyTorch踩坑记录1
  • SQLserver中的DATEADD使用、avg使用、Round使用
  • iOS profiles文件过期如何更新
  • Linux环境下使用Git把代码上传到云端
  • Codeforces Round 968 (Div. 2 ABCD1D2题) 视频讲解
  • 【计算机组成原理】汇总三、存储系统
  • 机械学习—零基础学习日志(如何理解概率论4)
  • 京准同步:北斗授时设备(北斗校时服务器)操作指南
  • MVVM分层思想
  • 图形学论文笔记
  • Qt WebSocket
  • 10款主流图纸加密软件大盘点(为图纸穿上隐形衣)
  • 幅频特性曲线分析及使用WPF绘制
  • java中具有继承关系的类及其对象初始化顺序
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • log4j2输出到kafka
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PaddlePaddle-GitHub的正确打开姿势
  • php中curl和soap方式请求服务超时问题
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 计算机在识别图像时“看到”了什么?
  • 深入浅出Node.js
  • 使用parted解决大于2T的磁盘分区
  • 使用SAX解析XML
  • 王永庆:技术创新改变教育未来
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #单片机(TB6600驱动42步进电机)
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (1)(1.13) SiK无线电高级配置(六)
  • (7)STL算法之交换赋值
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (web自动化测试+python)1
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (动态规划)5. 最长回文子串 java解决
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (回溯) LeetCode 131. 分割回文串
  • (论文阅读40-45)图像描述1
  • (全注解开发)学习Spring-MVC的第三天
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (实战篇)如何缓存数据
  • (四)鸿鹄云架构一服务注册中心
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (学习日记)2024.01.09
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)SpringBoot3---尚硅谷总结
  • (译)计算距离、方位和更多经纬度之间的点
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .apk文件,IIS不支持下载解决
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。