-
2018-01-05 16:44:52
从地址栏输入http://www.gaxis.cn这个URL之后,直到我的个人主页加载完成,中间到底发生了什么呢?
大概经历了以下过程:
1. 分析域名(gaxis)
2. TCP三次握手(嘿,我能连你吗?/完全OjbK啊。/那我连了啊。)
3. 建立TCP连接
4. 浏览器发起HTTP请求
5. 服务器响应请求(哇兄弟你找我了,我收拾一下给你的数据和应答码——这里可以展开讲服务器如何响应)
6. 浏览器解析html代码并请求html中的js/css/图片等资源
7. 浏览器进行页面渲染呈现给用户更多相关内容 -
一次完整的http请求过程
2022-04-22 18:13:22一个完整的 HTTP 请求需要经历 DNS 查找,TCP 握手,浏览器发出 HTTP 请求,服务器接收请求,服务器...(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SE一个完整的 HTTP 请求需要经历 DNS 查找,TCP 握手,浏览器发出 HTTP 请求,服务器接收请求,服务器处理请求并发回响应,浏览器接收响应等过程:
-
首先请求dns服务器(会首先在浏览缓存中获取,找不到就会去host文件中获取,最后才会dns获取),对www.xxx.com进行域名解析,获取ip等信息
-
根据拿到的服务器的地址信息,发起发起TCP的3次握手
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。 -
建立TCP连接后,向服务器发起http请求
-
服务器响应http请求,向浏览器发送html代码
-
浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
-
浏览器对页面进行渲染呈现给用户
-
关闭TCP连接
接下来看下例子帮助大家理解一下
名词解释:
-
Queueing: 在请求队列中的时间。
-
Stalled: 从TCP 连接建立完成,到真正可以传输数据之间的时间差,此时间包括代理协商时间。
-
Proxy negotiation: 与代理服务器连接进行协商所花费的时间。
-
DNS Lookup: 执行DNS查找所花费的时间,页面上的每个不同的域都需要进行DNS查找。
-
Initial Connection / Connecting: 建立连接所花费的时间,包括TCP握手/重试和协商SSL
-
SSL: 完成SSL握手所花费的时间。
-
Request sent: 发出网络请求所花费的时间,通常为一毫秒的时间。
-
Waiting(TFFB): TFFB 是发出页面请求到接收到应答数据第一个字节的时间。
-
Content Download: 接收响应数据所花费的时间。
欢迎加入前端群,一起学习讨论,永久有效:
-
-
一次完整的HTTP网络请求过程详解
2018-05-22 15:06:04简单地回答这个问题,大概是经历了域名解析、TCP的三次握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码,同时请求html代码中的资源(如js、css、图片等)、最后浏览器对页面进行渲染并...0. 前言
从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析、TCP的三次握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码,同时请求html代码中的资源(如js、css、图片等)、最后浏览器对页面进行渲染并呈现给用户。下面分别介绍一下每个过程。
1. 域名解析
以Chrome浏览器为例,Chrome会解析域名对应的IP地址。
(1)Chrome浏览器会首先搜索浏览器自身的DNS缓存(可以使用 chrome://net-internals/#dns 来进行查看),浏览器自身的DNS缓存有效期比较短,且容纳有限,大概是1000条。如果自身的缓存中存在blog.csdn.net 对应的IP地址并且没有过期,则解析成功。
(2)如果(1)中未找到,那么Chrome会搜索操作系统自身的DNS缓存(可以在命令行下使用 ipconfig /displaydns 查看)。如果找到且没有过期则成功。
(3)如果(2)中未找到,那么尝试读取位于C:\Windows\System32\drivers\etc下的hosts文件,如果找到对应的IP地址则解析成功。
(4)如果(3)中未找到,浏览器首先会找TCP/IP参数中设置的本地DNS服务器,如果要查询的域名包含在本地配置的区域资源中,则完成域名解析,否则根据本地DNS服务器会请求根DNS服务器。
(5)本地DNS会把请求发至13台根DNS,根DNS服务器收到请求后会返回负责这个域名(.net)的服务器的一个IP,本地DNS服务器使用该IP信息联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,会返回.net域的下一级DNS服务器地址(blog.csdn.net)给本地DNS服务器。以此类推,直至找到。
2. TCP的三次握手
这个部分正好之前整理过,可以参考NetWork——关于TCP协议的三次握手和四次挥手。
3. 建立TCP连接后发起HTTP请求
TCP三次握手建立连接成功后,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个具有标准格式的HTTP响应给客户端。
3.1 HTTP请求格式
HTTP请求格式如下所示四部分组成,分别是请求行、请求头、空行、消息体,每部分内容占一行。
- <request-line>
- <general-headers>
- <request-headers>
- <entity-headers>
- <empty-line>
- [<message-body>]
请求头:缓存相关信息(Cache-Control,If-Modified-Since)、客户端身份信息(User-Agent)等键值对信息。
空行。
主体:客户端发给服务端的请求数据,这部分数据并不是每个请求必须的。
常用的GET、POST、PUT、DELETE四种请求方式中:
(1)关于GET和DELETE将要处理的资源信息直接放在了URL中。通过"?<键值对>&<键值对>“的形式追加。但是URL最大长度为1024字节。
(2)关于POST和PUT的请求参数存储在报文的主体中。每一个参数都以”--boundary值“+"属性信息"+”空行“+"参数值"的数据结构存储。请求数据的最后以”--boundary值--“的格式结尾。
3. 2 服务器响应HTTP请求
服务器接收处理完请求后返回一个HTTP响应消息给客户端。HTTP响应消息的格式包括:状态行、响应头、空行、消息体。每部分内容占一行。
- <status-line>
- <general-headers>
- <response-headers>
- <entity-headers>
- <empty-line>
- [<message-body>]
响应头:用于说明数据的一些信息,比如数据类型、内容长度等键值对。
空行。
消息体:服务端返回给客户端的HTML文本内容。或者其他格式的数据,比如:视频流、图片或者音频数据。
4 浏览器解析html代码,并请求html代码中的资源
浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,向服务器端发起一个HTTP请求,如果服务器端返回304状态码(告诉浏览器服务器端没有修改该资源),那么浏览器会直接读取本地的该资源的缓存文件。否则开启新线程向服务器端去请求下载。(这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源。)
最后,浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,再呈现给用户。
-
NetWork——描述一次完整的网络请求过程
2017-01-10 18:53:05简单地回答这个问题,大概是经历了域名解析、TCP的三次握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码,同时请求html代码中的资源(如js、css、图片等)、最后浏览器对页面进行渲染并...0. 前言
从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析、TCP的三次握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码,同时请求html代码中的资源(如js、css、图片等)、最后浏览器对页面进行渲染并呈现给用户。下面分别介绍一下每个过程。
1. 域名解析
以Chrome浏览器为例,Chrome会解析域名对应的IP地址。
(1)Chrome浏览器会首先搜索浏览器自身的DNS缓存(可以使用 chrome://net-internals/#dns 来进行查看),浏览器自身的DNS缓存有效期比较短,且容纳有限,大概是1000条。如果自身的缓存中存在blog.csdn.net 对应的IP地址并且没有过期,则解析成功。
(2)如果(1)中未找到,那么Chrome会搜索操作系统自身的DNS缓存(可以在命令行下使用 ipconfig /displaydns 查看)。如果找到且没有过期则成功。
(3)如果(2)中未找到,那么尝试读取位于C:\Windows\System32\drivers\etc下的hosts文件,如果找到对应的IP地址则解析成功。
(4)如果(3)中未找到,浏览器首先会找TCP/IP参数中设置的本地DNS服务器,并请求LDNS服务器来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。否则本地DNS服务器会请求根DNS服务器。
(5)本地DNS会把请求发至13台根DNS,根DNS服务器会返回所查询域的主域名服务器的地址(.net),本地DNS服务器使用该IP信息联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,会返回.net域的下一级DNS服务器地址(blog.csdn.net)给本地DNS服务器。以此类推,直至找到。
2. TCP的三次握手
这个部分正好之前整理过,可以参考NetWork——关于TCP协议的三次握手和四次挥手。
3. 建立TCP连接后发起HTTP请求
TCP三次握手建立连接成功后,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个具有标准格式的HTTP响应给客户端。
3.1 HTTP请求格式
HTTP请求格式如下所示四部分组成,分别是请求行、请求头、空行、消息体,每部分内容占一行。
<request-line> <general-headers> <request-headers> <entity-headers> <empty-line> [<message-body>]
请求行:由三部分组成:分别是请求方法(GET/POST/DELETE/PUT/HEAD)、URI路径、HTTP版本号。
请求头:缓存相关信息(Cache-Control,If-Modified-Since)、客户端身份信息(User-Agent)、是否支持gzip压缩,等键值对信息。
空行。
主体:客户端发给服务端的请求数据,这部分数据并不是每个请求必须的。
常用的GET、POST、PUT、DELETE四种请求方式中:
(1)关于GET和DELETE将要处理的资源信息直接放在了URL中。通过"?<键值对>&<键值对>“的形式追加。HTTP RFC规范中并没有规定GET请求的URL长度,只是说明如果server无法处理太长的URI,可以通过返回414状态码。但是大多数浏览器会讲其限制在2k-8k之间。
(2)关于POST和PUT的请求参数存储在报文的主体中。每一个参数都以”--boundary值“+"属性信息"+”空行“+"参数值"的数据结构存储。请求数据的最后以”--boundary值--“的格式结尾。
3. 2 服务器响应HTTP请求
服务器接收处理完请求后返回一个HTTP响应消息给客户端。HTTP响应消息的格式包括:状态行、响应头、空行、消息体。每部分内容占一行。
<status-line> <general-headers> <response-headers> <entity-headers> <empty-line> [<message-body>]
状态行:有HTTP协议版本号,状态码和状态说明三部分构成。
响应头:用于说明数据的一些信息,比如数据类型、内容长度等键值对。
空行。
消息体:服务端返回给客户端的HTML文本内容。或者其他格式的数据,比如:视频流、图片或者音频数据。
4 浏览器解析html代码,并请求html代码中的资源
浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,向服务器端发起一个HTTP请求,如果服务器端返回304状态码(告诉浏览器服务器端没有修改该资源),那么浏览器会直接读取本地的该资源的缓存文件。否则开启新线程向服务器端去请求下载。(这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源。)
最后,浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,再呈现给用户。
-
通过Wireshark抓包对一次完整HTTP网络请求过程的验证
2019-03-28 00:44:36go语言:发起http网络通信请求 操作 对百度发起get请求 func main() { r,_:=http.Get("http://www.baidu.com") b,_ := ioutil.ReadAll(r.Body) fmt.Println(string(b)) r.Body.Close() } 完整的... -
HTTP协议、【HTTP请求、响应格式】及一次HTTP请求的完整过程
2022-03-21 16:00:48HTTP协议简介HTTP协议工作原理和流程浏览器在使用...为了更快地处理大量事务,确保协议的可伸缩性,HTTP协议被设计成了一种无状态协议,不保留之前一切的请求或响应报文的信息。HTTP协议也是万维网(WWW,World Wide W -
一个HTTP请求的完整过程
2022-04-04 23:31:15一、网络分层模型 当A主机和B主机通信时,在网络中会存在数据丢包、数据重复、数据完整性校验、数字转换模拟信号(无线转光纤等)等问题,为了简化网络的复杂性,因此网络通信的不同方面被分解为多层次结构,不同层次... -
一次完整的HTTP请求过程(深入分析)
2019-08-22 11:09:58前一段时间,面试问到了这个问题,感觉自己回答的不是很好, 当时我的回答是 1.域名解析(这个说了一下域名解析的过程) ,解析出对应IP地址 2.解析成功之后,发起TCP三次握手建立连接 3.建立连接后发起HTTPS请求 4.... -
一个完整的HTTP请求过程详细
2018-05-29 14:41:54一个完整的HTTP请求过程 整个流程 域名解析 —> 与服务器建立连接 —> 发起HTTP请求 —> 服务器响应HTTP请求,浏览器得到html代码 —> 浏览器解析html代码,并请求html代码中的资源... -
一次HTTP请求的完整过程——协议篇(DNS、TCP、HTTP)
2018-10-17 14:56:53一次 HTTP 请求的完整过程——协议篇 一、大致流程 根据域名和 DNS 解析到服务器的IP地址 (DNS + CDN) 通过ARP协议获得IP地址对应的物理机器的MAC地址 浏览器对服务器发起 TCP 3 次握手 建立 TCP 连接后发起 HTTP ... -
HTTPS请求的整个过程的详细分析
2019-05-09 11:23:27一、基础知识 二、HTTPS进行的流程 三、HTTPS和HTTP的区别 一、基础知识 (1)HTTPS的介绍 HTTPS是一种应用层协议,本质上来说它是HTTP协议的一种变种。HTTPS比HTTP协议安全,因为HTTP是明文传输,而HTTPS是... -
一次完整的HTTP请求过程
2017-10-10 16:06:50一、 HTTP请求和响应步骤 图片来自:理解Http请求与响应 以上完整表示了HTTP...TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的... -
HTTP请求的完全过程
2019-05-27 11:22:45HTTP请求的完全过程 1.1 浏览器根据域名解析IP地址 浏览器根据访问的域名找到其IP地址。DNS查找过程如下: 浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存)... -
超详细的"Web页面请求过程"之旅
2018-07-30 19:44:13前言:web页面请求的整体过程 一、为主机申请IP:DHCP动态主机配置协议 二、查找默认网关路由器的MAC地址:ARP地址转换协议 三、查找目的域名的IP:DNS域名系统 四、TCP三次握手(及为什么要进行第三次握手) -
Vue总结第七天~Promise网络请求和axios 网络模块
2021-12-30 21:30:04Vue总结第七天~Promise网络请求和axios 网络模块 -
记一次用Fiddler拦截抓包微信小程序网络请求的踩坑过程
2019-07-11 23:21:31一般来说,Fiddler只需要按说明配置好代理和证书就可以拦截应用内的请求,但是我在开发一个小程序的过程中用它抓包却没有成功,于是通过微信小程序的开发者控制台查看了一下错误,提示ssl证书有问题,这应该是微信的... -
HTTP请求的过程和原理
2022-03-14 13:48:32HTTP请求的过程和原理-面试回答 -
从一次用Alamofire为网络请求添加header踩坑说起:iOS网络请求排错方法分享
2019-03-27 21:40:15很久没有写博客,最近在做项目的时候遇到了一个很迷的网络请求的坑,在添加header的时候总是401,但是postman请求结果却没有问题。 搞了两天,查了很多都没找到解决方法,最后解决了但是还是没有很懂具体的原因,... -
记一次接口请求超时的问题解决过程
2019-10-09 14:06:53由此我认为响应时间久与代码逻辑没有关系,可能是跟网络传输有关系,所以我在宿主机服务器使用curl去访问看看响应需要多少时间 结果耗时还是需要十秒左右 于是我一开始认为与代码无关的想法又有点动摇了,我决定... -
【网络通信与信息安全】之深入解析从输入一个URL到页面加载完成的过程
2022-03-24 16:08:17一、前言 从输入一个 URL,然后按下回车到显示页面,中间发生了什么?这是一道经典的面试题,不光前端面试会问到,后端面试也...其实,这个问题可以拆解成两个过程: 用户输入 URL,客户端(浏览器)拿到服务端的数 -
HTTP与HTTPS请求过程
2019-02-26 21:34:04HTTP与HTTPS请求过程 1、HTTP请求过程 HTTP协议处于网络协议的应用层,...第一次握手:客户端发送SYN报文和客户端初始序列号X,等待服务器确认。 第二次握手:服务器收到报文返回SYN+Ack报文和初始序列号Y 第三次握... -
一次完整的HTTP过程请求步骤(输入一个URL回车,到返回页面)
2016-05-05 21:13:04一次完整的HTTP请求所经历的7个步骤 HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,... -
WireShark抓包 图解探索网络请求过程(五层网络模型、三次握手、滑动窗口协议)
2017-09-04 09:41:36不错,大致过程确实如此,可终究“眼见为实”,此篇文章重点在于亲自实践,通过WireShark抓包来图解探索网络请求的整个过程,通过实践来更透彻的认识网络模型、三次握手、滑动窗口协议等理论知识在实际 -
(3)字节跳动面试题:从输入网址到获得页面的网络请求的过程,请详细说一下
2018-09-09 16:50:45(一)从输入网址到获得页面的网络请求的过程 (1)域名解析,其实就是根据用户输入的网址去寻找它对应的IP地址,比如输入www.baidu.com的网址就会经历以下过程 1.先从浏览器缓存里找IP,因为浏览器会缓存DNS记录一... -
【网络原理】一个数据包从发送到接收在网络中经历了那些过程(详细分析)
2021-01-27 20:31:24一个数据包从发送到接收在网络中...第一次握手:建立连接时,主机A向主机A发送请求报文 第二次握手:主机B收到请求报文后,如同意连接,则向主机A发送确认报文 第三次握手,主机A收到主机B的确认后,再次向主机B给出 -
为什么HTTP请求的时候会出现一次option的请求?看这里的解释
2019-06-20 22:56:02上图是一个请求的整个过程,然后我们可以看到,其中有一个是我们经常看到的问题,就是option 的预请求,那么图中并没有说明什么是简单的请求,所以下面的链接是解释了什么是简单的请求,也就是一个简单的请求的标准... -
Android网络请求超时处理
2018-04-17 13:48:18转自:http://www.cnblogs.com/tony-yang-flutter/p/androidtimeout.html以用户登录为例介绍用户访问网络时的请求超时处理的两种方法:一. 使用android提供的工具类AsyncTask类,此类提供了一个AsyncTask.execute().... -
Android 优雅地管理ProgressDialog,解决多次网络请求时弹窗闪烁问题
2020-05-31 16:49:26前言 在Android应用中,执行一些耗时操作的时候,弹出一个表示加载中Dialog是非常常见的功能。 -
一个http请求发送到后端的详细过程
2016-06-13 11:30:34DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS...