面试题:从 URL 在浏览器被输入到页面展现的过程中发生了什么?

浏览器URL输入页面展现到底发生了什么? 文章目录一、DNS域名解析过程二、Tcp三次握手建立连接目的过程三、浏览器向服务器发送http请求请求行请求头请求数据四、服务器处理请求并返回http报文状态行响应头响应数据五、浏览器解析渲染页面步骤回流和重绘回流重绘六、 tcp四次挥手断开连接 为什么输入url就可以展现对应的页面呢?背后经历了什么? 总体为以下几个过程: DNS解析,将域名解析成Ip地址 Tcp/Ip三次握手建立连接 浏览器向服务器发送http请求 服务器处理请求并返回http报文 浏览器解析渲染页面 tcp四次挥手断开连接 一、D 阅读详情

面试题:从 URL 在浏览器被输入到页面展现的过程中发生了什么?

延伸:

  • 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?
  • 一个 TCP 连接可以对应几个 HTTP 请求?
  • 一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?
  • 为什么有的时候刷新页面不需要重新建立 SSL 连接?
  • 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

 

 

HTTP/1.0

HTTP/1.1

HTTP/2

浏览器在与服务器建立了一个 TCP 连接,并完成一个 HTTP 请求后,TCP 连接的状态

服务器在发送完一个 HTTP 响应后,会断开 TCP 连接;浏览器与服务器只保持短暂的连接,连接无法复用

TCP连接默认不会断开(Connection: keep-alive);除非在请求报头中声明 Connection: close 才会在请求完成后关闭连接。HTTP/1.1把 Connection 头写进标准,并且默认开启持久连接

 

一个 TCP 连接可以对应的 HTTP 请求的个数

一个

单个 TCP 连接在同一时刻只能处理一个请求,但如果维持连接,是可以发送多个 HTTP 请求的;任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠;虽然 HTTP/1.1 规范中规定了 Pipelining 来试图解决这个问题,但是这个功能在浏览器中默认是关闭的

HTTP/2提供了 Multiplexing 多路传输特性,可以在一个 TCP 连接中同时并行完成多个 HTTP 请求

打开图片非常多的网页的过程

默认一个TCP 连接进行一次HTTP请求。但是也可以像HTTP/1.1那样;虽然标准中没有设定,但某些服务器对 Connection: keep-alive 的 Header 进行了支持

多个TCP连接顺序下载; Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

多路复用允许同时通过单一的 HTTP/2 连接发起多重的“请求-响应”消息;如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP/2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。未必所有挂在这个域名的资源都会使用一个TCP连接去获取,但是可以确定的是Multiplexing 很可能会被用到。


备注:

Pipelining

在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是浏览器默认关闭。

先来看一下 Pipelining 是什么,RFC 2616 中规定了:

A client that supports persistent connections MAY "pipeline" its requests (i.e., send multiple requests without waiting for each response). A server MUST send its responses to those requests in the same order that the requests were received.

一个支持持久连接的客户端可以在一个连接中发送多个请求(不需要等待任意请求的响应)。收到请求的服务器必须按照请求收到的顺序发送响应。

至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。比如你向服务器发送了两个请求 GET/query?q=A 和 GET/query?q=B,服务器返回了两个结果,浏览器是没有办法根据响应结果来判断响应对应于哪一个请求的。

Pipelining 这种设想看起来比较美好,但是在实践中会出现许多问题:

  • 一些代理服务器不能正确的处理 HTTP Pipelining。
  • 正确的流水线实现是复杂的。
  • Head-of-line Blocking 连接头阻塞:在建立起一个 TCP 连接之后,假设客户端在这个连接连续向服务器发送了几个请求。按照标准,服务器应该按照收到请求的顺序返回结果,假设服务器在处理首个请求时花费了大量时间,那么后面所有的请求都需要等着首个请求结束才能响应。

所以现代浏览器默认是不开启 HTTP Pipelining 的。

 

HTTP

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource IdentifiersURI)来标识。

HTTP 协议是以 ASCII 码传输,基于请求与响应模式的、无状态的,建立在 TCP/IP 协议之上的应用层规范。

HTTP协议主要的版本有3个,分别是HTTP/1.0HTTP/1.1HTTP/2HTTPS是另外一个协议,简单讲是HTTP的安全版。

 

短暂连接和持久连接图(左HTTP/1.0,右HTTP/1.1

 

HTTP/2

  • 二进制分帧:HTTP/2中,在应用层(HTTP2.0)和传输层(TCP或者UDP)之间加了一层:二进制分帧层。在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame,并对它们采用二进制格式的编码。

  • 多路复用多路复用允许同时通过单一的HTTP/2.0连接发起多重的请求-响应消息。

​​​​​​​

HTTP2的请求的TCP的connection一旦建立,后续请求以stream的方式发送。每个stream的基本组成单位是frame(二进制帧)。客户端和服务器可以把 HTTP 消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。

HTTP2.0 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。

  • header压缩:HTTP/1.1的header带有大量信息,而且每次都要重复发送。HTTP/2 为了减少这部分开销,采用了HPACK 头部压缩算法对Header进行压缩。

  • 服务端推送:简单来讲就是当用户的浏览器和服务器在建立连接后,服务器主动将一些资源推送给浏览器并缓存起来的机制。

 

参考:

1. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?

https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid=2650124018&idx=1&sn=9c2a1d48ac0be2fb990452847b678562&chksm=f36bb3d3c41c3ac5dc4f36499fa840312b7d5deaf797452919613671d0b2e03c700a462cf5d0&mpshare=1&scene=23&srcid=0530Q8p0qs6VVgqbgGCWWcRJ#rd

2 Java 9和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?

https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid=2650120831&idx=1&sn=2bcafb931eff897e2f866bd02dcda680&chksm=f36bbf5ec41c36481c2f5da1f74cf48fca374bb5b5922d26ac4ace7858cf8ede4fc2cefc1584&mpshare=1&scene=23&srcid=0530Ne1cNQoLlsezCipXGbmv#rd

浏览器输入网址(URL),到最终展示页面,都发生了什么? 从(如下图)到你按下回车,再到最后出现这个网页界面(如下图)中间到底发生了什么?接下来就带你一步步进行解析~ 阅读详情

相关推荐

面试官:从浏览器输入URL页面展示出来,中间发生了什么?

前言 这应该算是一个很经典的面试题了,前端工程师,后端工程师,包括网络工程师都有可能被问到。开放度很高,每个人都可以针对自己熟悉的部分,进行深入的讲解。 总体来说,分为如下几个部分 1.DNS解析 2.建立TCP连接,发送HTTP请求 3.服务端处理请求并返回HTTP响应 4.浏览器解析渲染页面 5.关闭连接 DNS解析 DNS解析就是获取服务器IP地址的过程。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,例如www.baid.

小识的博客 3577

前端面试提问:在浏览器输入url页面呈现结果经历了什么?

浏览器地址栏输入URL浏览器查看,如果请求资源在缓存中并且新鲜,跳转到转码步骤如果资源未缓存,发起新请求如果已经缓存,检验是否新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证。检验新鲜通常有两个HTTP头进行控制和浏览器获取协议,主机,端口,path浏览器浏览器过程如下TCP链接建立后服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用HTTP Host头部判断请求的服务程序服务器检查,如果验证缓存新鲜,返回304等对应状态码。

weixin_62846854的博客 761

在【浏览器】中从URL输入页面展现到底发生了哪些事

整理了在【浏览器】中从URL输入页面展现到底发生了哪些事情,便用工作中更好的理解项目和页面渲染原理

每日任务:从输入 URL页面展示到底发生了什么

DNS解析时会按本地浏览器缓存->本地Host文件->路由器缓存->DNS服务器->根DNS服务器的顺序查询域名对应IP,直到找到为止。5.握手成功之后,浏览器会构建请求行、请求头等信息,并把它和域名相关的cookie等数据附加到请求头中,向服务器构建请求信息;2.首先会先检查浏览器缓存里是否有缓存资源,如果缓存中有,会直接在浏览器上显示页面内容,如果没有,在发送http请求之前,浏览器会向DNS服务器发送一个查询请求;6.服务器接收到请求信息后,根据请求生成响应数据。7.最后浏览器解析响应并渲染页面

qq_59400558的博客 445

输入url页面加载完成中间发生了什么(面试)

考试考点

weixin_45127646的博客 402

输入URL到网页显示,期间发生了什么(详解)

浏览器通过调用Socket库,来委托协议栈工作,协议栈的上半部分有两块协议,分别是收发数据的TCP和UDP,这两个协议会接受应用层的委托执行收发数据的操作。

aoeaoao的博客 2399

面试题:一个 URL浏览器输入页面展现过程发生了什么

这是一个经典的面试题:一个URL浏览器页面过程发生了什么,那么今天就带大家九浅一深来研究一下

qq_32139981的博客 1093

经典面试题:从 URL浏览器被被输入页面展现过程发生了什么?

作者丨松若章 来源丨http://1t.click/ataf 曾经有这么一道经典面试题:从 URL浏览器被被输入页面展现过程发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢? 要搞懂这个问题,我们需要先解决下面五个问题: ...

我惠依旧的博客 605

经典面试题:从浏览器输入 URL页面展现过程发生了什么?

点击上方蓝色字体,选择“置顶公众号”优质文章,第一时间送达来源:https://urlify.cn/q6Ffiu 正文 曾经有这么一道经典面试题:从浏览器输入 URL页面展现过程发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?要搞懂这个问题,我们需要先...

weixin_37097680的博客 201

浏览器输入URL页面展示发生了什么?

其实从填写上url按下回车后,我们就进入了第一步就是 DNS 解析过程,首先需要找到这个 url 域名的服务器 ip,为了寻找这个 ip,浏览器首先会寻找缓存,查看缓存中是否有记录缓存中没有则查找系统的 hosts 文件中是否有记录,如果没有缓存则查询 DNS 服务器,得到服务器的 ip 地址后,浏览器根据这个 ip 以及相应的端口号发送连接请求;当然如果DNS服务器中没有解析成功,他会向上一步获得的顶级DNS服务器发送解析请求。客户端和服务端都需要直到各自可收发,因此需要三次握手。............

商务合作欢迎私信我 4万+

浏览器输入URL后到底发生了什么?

详细介绍了浏览器输入URL后到底发生了什么。深入了解整个过程对计算机网络体系结构有会一个宏观、清晰的认识!

只想和你一起进步 3736

面试官问我:从地址栏输入URL到显示页面发生了什么?(建议收藏)

文章根据B站 计算机网络微课堂(有字幕无背景音乐版)(陆续更新中…) 视频整理。 本文收录于 计算机网络,欢迎订阅。 目录前言1、DNS解析2、TCP连接3、发起HTTP请求4、处理请求5、浏览器渲染6、TCP连接断开7、总结 前言 从地址栏输入URL到显示页面发生了什么?这是一道面试经常会考的面试题。那么下面我们就来探讨一下从你输入URL后到响应,都经历了哪些过程。 1、DNS解析 我们在用户PC中使用网页浏览器来访问外部服务器的内容,在网页浏览器的地址栏中输入外部服务器的域名。比如我们输入ww.

林深不见鹿 的博客 1万+

浏览器地址栏输入URL后,到页面渲染出来,整个过程发生了什么?

从一道面试题来看前端页面的生命周期:从浏览器地址栏输入URL后,到页面渲染出来,整个过程发生了什么?

Whoopsina的博客 3370

前端经典面试题:在浏览器输入 URL页面加载显示完成的过程?从输入URL页面加载发生了什么?

总体来说分为以下几个过程: DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 具体过程 资料: https://segmentfault.com/a/1190000006879700https://segmentfault.com/a/1190000006879700 ......

南北极之间 3169

输入url页面加载完的过程中都发生了什么事情

http://blog.aijc.net/server/2015/11/03/%E4%BB%8E%E8%BE%93%E5%85%A5URL%E5%88%B0%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%E5%AE%8C%E7%9A%84%E8%BF%87%E7%A8%8B%E4%B8%AD%E9%83%BD%E5%8F%91%E7%94%9F%E4%BA%86%E4%B

dojiangv的专栏 3万+

前端面试题:从url页面展现,这之中发生了什么?

我们平常在地址栏里输入一些网址时,页面很快就会出现,但在这之中到底发生了什么事情呢? 大概是这样的流程: 在浏览器的地址栏中敲入了url 域名解析 服务器处理请求 浏览器处理 绘制网页 一、在浏览器的地址栏中敲入了url首先,我们要知道url是什么?URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上的资源,实际上就是网站网址。url的格式一般为: 协议类

距离的博客 3639

详细解释从输入 url页面渲染发生什么,一篇文章总结所有浏览器原理 + 计算机网络的面试题,建议收藏

本篇文章从一个经典的面试题入手,几乎涵盖了所有关于浏览器工作原理和计算机网络的面试题目,内容比较长,东西非常多,难免疏漏,有不对的地方欢迎指正。经典面试题【从输入 url页面渲染发生什么】,我将从3个主要模块把这块的知识点串成串,分别是浏览器工作原理、计算机网络请求、dom渲染相关。在之前我的已经大概描述了整个过程,可以说这篇文章是之前的文章的扩展版本。

有一棵树的博客 1403
上一篇: curl发送GET/POST请求,url编码
贼像样
博客等级 码龄10年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值