一次完整的http请求过程是怎样的?

一次完整的http请求过程是怎样的?我们打开浏览器 在地址栏输入 www wukong com 几秒后浏览器打开悟空问答的页面 那么这几秒钟内发生了哪些事情 我就带大家一起看看完整的流程 解析 URL 浏览器首先会对输入的 URL 进行验证 如果不合法的时候 那么会把输入的文字传给默认的搜索引擎 比如你只在地址栏输入 悟空问答 几个字 如果 URL 通过验证 那么可以解析得到协议 http 或者 https 域名 wukong 资源 首页 等信息 DNS 查询 浏览器会先检查域名信息是否在缓存中 再检查域名是否在

一次完整的http请求过程是怎样的?

我们打开浏览器,在地址栏输入\www.wukong.com\,几秒后浏览器打开悟空问答的页面,那么这几秒钟内发生了哪些事情,我就带大家一起看看完整的流程:

解析URL

浏览器首先会对输入的URL进行验证,如果不合法的时候,那么会把输入的文字传给默认的搜索引擎,比如你只在地址栏输入“悟空问答”几个字。

如果URL通过验证,那么可以解析得到协议(http或者https)、域名(wukong)、资源(首页)等信息。

一次完整的http请求过程是怎样的?

DNS查询

  • 浏览器会先检查域名信息是否在缓存中。
  • 再检查域名是否在本地的Hosts文件中。
  • 如果还不在,那么浏览器会向DNS服务器发送一个查询请求,获得目标服务器的IP地址。

TCP封包及传输

这时候浏览器获得了目标服务器的IP(DNS返回)、端口(URL中包含,没有就使用默认),浏览器会调用库函数socket,生成一个TCP流套接字,也就是完成了TCP的封包。

TCP封包完成之后,就可以传输了,在完成“你瞅啥”,“瞅你咋地”,“来,过来唠唠”一系列操作之后,浏览器和服务器就完成了TCP的三次握手,建立了连接,后面就可以请求服务器资源了。

一次完整的http请求过程是怎样的?

服务器接收请求并相应

  • HTTP有很多请求方法,比如:GET/POST/PUT/DELETE等等,我们浏览器输入URL这种,是GET方法。
  • 服务器接收到GET请求,服务器根据请求信息,获得相应的相应内容。例如我们输入的是:\www.wukong.com\,那么意味着访问首页文件。

浏览器解析并渲染

浏览器从服务器拿到了想要访问的资源,大多数时候,这个资源就是HTML页面,当然也可能是一个其他类型的文件。

  • 浏览器先对HTML文档进行解析,生成解析树(以DOM元素为节点的树)。
  • 加载页面的外部资源,比如JS、CSS、图片。
  • 遍历DOM树,并计算每个节点的样式,最终完成渲染,变成我们看到的页面。

一次完整的http请求过程是怎样的?

这次请求响应之后,会断开连接,就这样,完成了一次HTTP的请求。

 

 

 

 

Http请求的一次详解:

  1. 客户端输入URL
  2. 客户端检测缓存:

有缓存且较新,客户端直接读取本地缓存进行资源展示;

有缓存但是不新,准备http请求包,发送至服务端进行缓存校验;

备注:http1.0中Expire、http1.1中是Cache-Control根据发起http请求:

请求报文包含:

a) 请求行用来说明请求类型(get\post\delete等)、要访问的资源(URI)以及使用的HTTP版本(1.0还是1.1)b) 首部(header)HOST将指出请求的目的地;User-Agent由浏览器来定义,自动发送;Connection:通常设置为keep-Alive, 长连接;其他首部包括等。c) 空行d) 请求实体

一次完整的http请求过程是怎样的?

3. 提取请求首部HOST通过DNS域名解析获取服务IP(DNS缓存\递归等)

4. 通过IP与默认端口创建TCP连接,进行http请求报文数据发送,其中重点就三次握手进行描述:

客户端向服务端发送syn=1,seq=client请求的ID;

服务端向客户端发送syn=1,seq=服务端请求的ID,ack=客户端请求的ID+1;客户端向服务端发送syn=0,seq=客户端请求的ID+1,ack=服务端请求的ID+1,data\data…

5. 服务端程序接受请求,定向到请求路径处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理

元数据:请求报文首部





 HEADERS格式name:value 

 示例: Host: www.chuyuni.cn 请求的主机名称 Server: Apache/2.4.7




HTTP常用请求方式:MethodGET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

一次完整的http请求过程是怎样的?

6.访问资源:

服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

资源放置于本地文件系统特定的路径:DocRoot

DocRoot → /var/www/html /var/www/html/images/logo.jpg http://www.magedu.com/images/logo.jpg web服务器资源路径映射方式: (a) docroot (b) alias (c) 虚拟主机docroot(d) 用户家目录docroot

7. 返回处理结果,准备http响应:

响应报文包含:

a) 状态行:http版本(1.1或者1.0),状态码200:请求正常处理304:返回上次请求资源未作改动,验证浏览器的缓存机制400:请求参数错误401:客户端无权访问,要去输入用户名\密码之类的授权信息403:禁止访问(读写权限等影响)404:请求的资源不存在500:服务内部错误502:网关错误503:临时过载或者维护,导致服务端无法正常处理请求b) 首部报文支持的语言\编码格式\等,注意If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答,用于服务端缓存校验c) 空行d) 响应报文实体

8. 通过建立的tcp连接来返回相关的http响应报文及http状态信息,然后根据实际情况看是否关闭连接(Connection的keep-alive)

一次完整的http请求过程是怎样的?

9. TCP连接关闭经历4次握手

客户端主动关闭连接放发送FIN进入FIN_WAIT1状态

服务端发最后的data和ack客户端接收进入CLOSEWAIT状态,客户端进入接受ACK进入FINWAIT2状态

服务端主动发FIN,客户端接受FIN并发送ack进入TIMEWAIT状态

服务器端正式关闭连接进入close状态

10. 客户端拿到http响应的报文信息,经过一系列前端处理过程最终将请求的资源进行展示。

一次完整的http请求过程是怎样的?

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229211.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:13
下一篇 2026年3月16日 下午5:13


相关推荐

  • Java及大数据学习路线

    Java及大数据学习路线#1.JavaSE

    2022年5月12日
    45
  • 实战elk搭建

    实战elk搭建一 ELK 分析对于 ELK 主要是分为 ElasticSearc Logstash 和 Kibana 三部分 其中 Logstash 作为日志的汇聚 可以通过 input filter output 三部分 把日志收集 过滤 输出到 ElasticSearc 中 也可以输出到文件或其他载体 ElasticSearc 作为开源的分布式引擎 提供了搜集 分析 存储数据的功能 采用的是 restful 接口的风格 Kibana 则是作为 ElasticSearc 分析数据的页面展示 可以进行对日志的分析 汇总

    2026年3月26日
    2
  • 升级、备份红帽PaaS openshift 上的 wordpress

    升级、备份红帽PaaS openshift 上的 wordpress

    2021年11月16日
    103
  • win10 loadrunner11_windows10重装系统步骤

    win10 loadrunner11_windows10重装系统步骤一.初识LoadRunner( 点击链接跳转到LoadRunner的安装步骤)1.简介:(1)从LoadRunner英语字面上进行理解就是负载跑步者,为什么这么说呢?对于从事IT软件行业的工作者如开发人员和测试人员来说一定不会感到陌生就是在承受负载的条件下运行软件或者网页的业务。从另一…

    2022年10月14日
    5
  • Autoware入门学习(一)——Autoware自动驾驶框架介绍

    Autoware入门学习(一)——Autoware自动驾驶框架介绍Autoware简介Autoware.AI是世界上第一个用于自动驾驶技术的“All-in-One”开源软件。它ROS1操作系统,并在Apache2.0许可下使用。主要包含以下模块:定位(Localization):通过结合GNSS和IMU传感器的3D地图和3D地图、SLAM算法来实现定位。检测(Detection):通过传感器融合算法和深度神经网络使用摄像机和激光雷达完成检测。预测和规划(PredictionandPlanning):基于概率机器人模型和基于规则的系统,部分还使用深度神经

    2022年4月19日
    955
  • windows 强制删除文件夹 不提示确认

    windows 强制删除文件夹 不提示确认rd/s/qE:\apache-tomcat-6.0.41\apache-tomcat-6.0.41\webapps\concrete-platform-web

    2022年6月3日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号