原文:"天龙八步"细说浏览器输入URL后发生了什么   慕课大神

本文摘要:
1.DNS域名解析;
2.建立TCP连接;
3.发送HTTP请求;
4.服务器处理请求;
5.返回响应结果;
6.关闭TCP连接;
7.浏览器解析HTML;
8.浏览器布局渲染;

1.浏览器(客户端)进行地址解析,补全域名,然后DNS域名解析;

浏览器会对一些默认的东西进行补齐。例如:互联网url默认端口号为80,浏览器默认补齐功能会补齐协议http,有些还会直接在域名前面补上www。所以实际上,即使我们输入的是imooc.com,然而实际访问的却是http://www.imooc.com

dns解析分为以下几个步骤:
1、先查看浏览器dns缓存中是否有域名对应的ip。
2、如果没有,则查看操作系统dns缓存中是否有对应的ip(例如windows的hosts文件)。
3、依旧没有就对本地区的dns服务器发起请求,
4、如果还是没有,就直接到Root Server域名服务器请求解析。
<1>、DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;

<2>、全球只有十三台逻辑根服务器

2.通过ip寻址和arp,找到目标(服务器)地址,三次握手建立TCP连接;

ip协议在第三层互联网层(网络层),arp协议在第四层网络访问层(链路层)。第2步获取到了ip,此时直接通过ip寻址找到ip对应的服务器,然后通过arp协议找到服务器的mac地址。

ip寻址主要有两种方式,一种是同一网段,一种是不同网段。要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。arp就是地址转化协议,也就是把ip地址转化为mac地址。和dns很像,先查缓存,然后查路由器。

为什么有了ip地址,还要mac地址?这个问题很关键,就像是我有驾驶证了你非要让我提供身份证。这个涉及一些历史问题,因为一开始没有互联网的时候就只有mac地址,还不存在ip地址。后来互联网越来越大之后,发现mac地址找起来太麻烦,并且耗时也越来越久,就发明了ip地址。并且mac地址在一个局域网中还是很有用的,所以就两个一起存在了。

第三步我们找到了目标ip,并获得了服务器ip的mac地址。此时浏览器就会请求和服务器连接,用来传输数据。tcp 是稳定双向面向连接的,断开时也会分两边分别断开。面向连接不是说tcp一个双方一直开着的通道,而是维持一个连接的状态,让它看起来有连接。

上图也可以这么理解:

3.发送HTTP请求;等待响应

浏览器会对请求进行包装,包装成请求报文。请求报文的格式如下:
起始行:如 GET / HTTP/1.0 (请求的方法 请求的URL 请求所使用的协议)
头部信息:User-Agent Host等成对出现的值

主体:请求头部和主体之间有一个回车换行。如果是get请求,则没有主体部分,post请求有主体部分。

4.服务器处理请求;

浏览器请求报文到达服务器之后,服务器接口会对请求报文进行处理,执行接口对应的代码,处理完成后响应客户端。由于http是无状态的,正常情况下,客户端收到响应后就会直接断开连接,然后一次http事物就完成了。但是http1.0有一个keep-alive的请求字段,可以在一定时间内不断开连接(有时时间甚至很长)。http1.1直接就默认开启了keep-alive选项。这导致了一个后果是服务器已经处理完了请求,但是客户端不会主动断开连接,这就导致服务器资源一直被占用。这时服务器就不得不自己主动断开连接,而主动断开连接的一方会出现TIME_WAIT,占用连接池,这就是产生SYN Flood攻击的原因。

5.返回响应结果

需要关注一个报文头--accept。accept代表发送端(客户端)希望接受的数据类型,这是浏览器自动封装的请求头。如果服务器返回的content-type是accept中的任何一个,浏览器都能解析,并直接展示在网页上。如果服务器返回的content-type是其他类型,此时浏览器有三种处理状态:
1、正常显示。例如返回类型为text/javascript,浏览器能直接处理并展示。
2、下载。例如返回类型为application/octet-stream(二进制流,不知道下载文件类型),这种浏览器不能直接处理的,会被下载。
3、报错。当我们返回一个字符串hello world,却使用text/xml,格式时,浏览器不能正确解析,就会报错,并把报错信息呈现在网页中。

浏览器能直接处理很多种格式,并直接呈现在网页中,并不限于accept中规定的字段。

6.关闭TCP连接

上图可以这么理解:
客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”
服务端:“收到,我看看我这边有木有数据了。”
服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”
客户端:“好嘞。”

7.浏览器解析HTML

浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。

8.浏览器布局渲染

浏览器会根据相应的content-type字段对响应字符串进行解析。能够解析并成功解析就显示,能够解析但解析错误就报错,不能解析就下载。由于浏览器采用至上而下的方式解析,所以会先解析html,直到遇到外部样式和外部脚本。这时会阻塞浏览器的解析,外部样式和外部脚本(在没有async、defer属性下)会并行加载,但是外部样式会阻塞外部脚本的执行,dom加载完毕,js脚本执行成功后dom树构建完成(DOMContentLoaded),之后就加载dom中引用的图片等静态资源。
html解析->外部样式、脚本加载->外部样式执行->外部脚本执行->html继续解析->dom树构建完成->加载图片->页面加载完成

总结一下:运维人员需要处理页面缓存、cdn及keep-alive引起的连接池占用等问题;后端人员需要处理代码逻辑、缓存、传输优化、报错等问题;前段人员需要做好前端性能优化和配合运维、后端做好借口调试,缓存处理等问题。所以无论是前端、后台、运维都应该很清楚整个流程中的每一步,才能在配合时,得心应手,才能在出现问题时,快速准确的定位问题解决问题,才能在需要优化时,迅速完整的给出方案。

WEB服务器如何选择 Apache or Nginx?

Apache拥有丰富的模块组件支持,稳定性强,BUG少,动态内容处理强。

Nginx轻量级,占用资源少,负载均衡,高并发处理强,静态内容处理高效

程序员最核心的竞争力是什么?

看文档」其实是最快的学习方法
读源码

HTTP浏览器输入URL后发生了什么相关推荐

  1. 浏览器输入url后发生了什么?

    浏览器输入url后发生了什么? 转载于:https://www.cnblogs.com/hellogiser/p/what-happened-after-url-was-typed-in-browse ...

  2. 前端——在浏览器输入url后发生了都发生了什么

    一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么? 主要包括以下几个基本步骤: 浏览器的地址栏输入URL并按下回车. 浏览器查找当前URL是否存在缓存,并比较缓存是否过期. DNS解 ...

  3. 在浏览器输入URL后发生了什么?

    摘录部分一:https://www.cnblogs.com/kongxy/p/4615226.html 从输入URL到浏览器显示页面发生了什么 当在浏览器地址栏输入网址,如:www.baidu.com ...

  4. 浏览器输入url后发生的变化

    看了一圈网上的总结,然后结合自己的理解,下面的文字是详细的分析,参考知乎.感兴趣的可以仔细看一下,有时间还是要好好研究一下网络传输方面的内容. 本质上面是域名的解析 Domain Name Syste ...

  5. 在浏览器地址栏中输入URL后发生了什么

    在浏览器地址栏中输入URL后发生了什么 基本流程: ①查询ip地址 ②建立tcp连接,接入服务器 ③浏览器发起http请求 ④服务器后台操作并做出http响应 ⑤网页的解析与渲染 详细步骤如下: 查询 ...

  6. 网络中典型协议--(DNS,输入url后, 发生的事情. ,ICMP,NAT)

    DNS(Domain Name System) DNS是一整套从域名映射到IP的系统 域名服务器发展背景 TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆. ...

  7. Oppo面经:浏览器输入URL都发生了什么?

    1.讲一下Java的虚拟机 2.说说怎么能让虚拟机中的方法区直接爆满 3.讲一下Java的垃圾回收机制 4.把Java中的容器类都讲一下 5.Java中的锁是怎么实现的? 6.引用计数法有啥缺点呢 7 ...

  8. 浏览器输入网址后发生了什么?

    当你在浏览器输入一个网址(比如www.iis.se)并敲回车,这个过程后面发生了什么? 一.Web 浏览器指示本机的OS设置本机与 www.iis.se 之间的通信 二. OS检查它的 DNS 缓存, ...

  9. 浏览器输入url后经历的过程(详细)

    页面加载流程: DNS查询 TCP连接 发送HTTP请求 服务器处理HTTP请求并返回HTTP报文 浏览器解析并render页面 HTTP连接断开 1. DNS查询 浏览器查看浏览器缓存-->系 ...

最新文章

  1. 《DDIA》读书笔记
  2. 一个信道的数据传输速率为4kb/s,单向传播时延为30ms,如果使停止-等待协议的信道最大利用率达到80%,那么要求的数据帧长度至少为( )
  3. location.search
  4. DSA签名算法 - Java加密与安全
  5. 小程序博客资源娱乐网带微信流量主激励视频
  6. python+requests对app和微信小程序进行接口测试
  7. APACHE 问题集合
  8. 浅谈UWB室内定位(三)
  9. 利用Multisim快速分析一个RC电路
  10. 绕过限制,申请Google+
  11. Python进阶(一)Python中的内置函数、内置方法、私有属性和方法详解
  12. docker-compose学习
  13. AI创作现状与未来发展浅析
  14. 手把手教你使用R语言绘制交互效应的森林图
  15. 网络安全风险评估原理
  16. 微信公众号 php sdk,GitHub - yuanchenglu/wechat-php-sdk: 微信公众平台 PHP SDK
  17. uni-app开发的h5,使用微信授权登录(前置条件+具体代码)
  18. 计算机组成原理云南大学,云南大学信息学院计算机方向
  19. 芝麻信用免押金成趋势 报告称租赁经济有望突破10万亿元
  20. TimeSformer:抛弃CNN的Transformer视频理解框架

热门文章

  1. 支付宝微信的刷脸支付竞赛马不停蹄
  2. 掌上题库V1.2.2全开源版本
  3. 大陆首款车量AI芯片 开启国产替代新纪元
  4. 爬山搜索法c语言代码,搜索算法--爬山法 (代码示例)
  5. 规格说明书-吉林市2日游
  6. C# ComboBox:组合框控件
  7. 微信小程序 - “本地资源图片无法通过WXSS 获取,可以使用网络图片,或者 base64,或者使用标签” 解决
  8. fiddler抓包小红书app(简易版)
  9. 第一次如何选择流量卡,长期套餐和短期套餐哪个好一点?
  10. 分析:大数据失败案例及背后原因!