zoukankan      html  css  js  c++  java
  • 在浏览器中输入一个网址后,浏览器都做了什么?

    经典面试题,当你在浏览器中输入一个网址,浏览器的处理过程如下:

    • 域名解析,浏览器查找该域名的IP地址
    • 浏览器根据解析得到的IP地址向WEB服务器发送HTTP请求
    • 服务器收到请求并进行处理
    • 服务器返回一个响应
    • 浏览器对该响应进行解码,渲染显示
    • 页面显示完成后,浏览器发送异步请求
    • 整个过程结束之后,浏览器关闭TCP连接。

    详细分析:

    1、域名解析,浏览器查找该域名的IP地址

    DNS查找过程

    浏览器缓存》系统缓存〉路由器缓存》ISP DNS缓存〉递归搜索

    递归搜索过程为:

    从根域名服务器 到 顶级域名服务器 到 你查询的域名服务器

    • 浏览器缓存: 首先是查找浏览器缓存,浏览器会缓存DNS记录一段时间,不同浏览器保存的时常不等(2分钟到30分钟不等)。

    • 系统缓存: 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用来查找这个网址的对应DNS信息。

    • 路由器缓存: 如果在系统缓存里没有找到找到对应的IP,请求会发向路由器,它一般会有自己的DNS缓存。

    • ISP DNS服务器: 如果在路由器缓存里还是没有对应的IP,请求会被发送到ISP。

    • 根域名服务器: 如果还是没有,请求将发向根域名服务器进行搜索。找不到就说明此域名不存在。

    2、浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求

    可能会重定向响应

    例如“http://facebook.com/”,服务器会给浏览器响应一个301永久重定向响应,这样浏览器就会访问“http://www.facebook.com/” 而非“http://facebook.com/”。

    服务器重定向的原因有很多,举其中两个:

    • 一:跟搜索引擎排名有关。你看,如果一个页面有两个地址,就像“http://www.facebook.com/” 和“http://facebook.com/”。搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。

    • 二:不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。

    然后浏览器会跟踪重定向地址

    后续过程

    • 通过DNS获取到IP后,目标IP和本机IP分别与子网掩码相与的结果相同,那么它们在一个子网,那么通过ARP协议可以查到目标主机的MAC地址,否则的话,需要通过网关转发,也就是目标MAC是网关的MAC。

    • 请求需要进行编码,生成一个HTTP数据包,依次打上TCP、IP、以太网协议的头部。其中TCP头部主要信息是本机端口和目标端口号等信息,用于标识同一个主机的不同进程,对于HTTP协议,服务器端的默认端口号是80,本机浏览器的话生成一个1024到65535之间的端口号。IP头部主要包含本地IP和目标IP等信息。以太网协议头部主要是双方的MAC地址,目标MAC可以由第一条所诉方法得到。以太网数据包的数据部分,最大长度为1500字节,所以如果IP包太大的话还要拆包,比如IP包5000字节,要分为4包,每一包都包含一个IP头部。

    3、服务器收到请求并进行处理

    负载均衡

    • 网站可能会有负载均衡设备来平均分配所有用户的请求。

      负载均衡,即对工作任务进行平衡,分摊到多个操作单元上执行,如图片服务器、应用服务器。

      • 链路负载均衡
      • 集群负载均衡
        1. 硬件负载均衡
        2. 软件负载均衡
      • 操作系统负载均衡

    CDN

    请求的数据可能存储在分布式缓存、静态文件或者数据库中。如果请求的数据是静态文件,又在CDN上,那么CDN服务器会处理这个用户的请求。如果在数据库中需要向数据库发起查询请求。

    4、服务器返回一个响应

    过程:

    • 服务器返回一个HTTP响应,如果返回状态码是304,浏览器可以直接使用之前缓存的资源。对于内容响应,浏览器需要进行响应解码,渲染显示。

    5、浏览器对响应进行解码、渲染显示

    过程:

    • 在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,如果是个静态的页面,拿到此就基本结束了。如果是是动态的,那么在浏览器显示HTML时,会获取嵌入在HTML中的对象,浏览器会发送获取请求来重新获得这些文件。这些请求都要经历一个和HTML读取类似的过程。

    • 对于静态的页面内容,浏览器通常会进行缓存,而对于动态的内容,浏览器通常不会进行缓存。

    6、页面显示完成后,浏览器发送异步请求。

    过程:

    • 页面显示完成后客户端仍与服务器端保持着联系。

    • 它会持续与服务器保持联系来及时更新一些页面信息。在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。

    7、整个过程结束之后,浏览器关闭TCP连接。

  • 相关阅读:
    numpy操作
    python将整数均分成N等分
    Windows7下安装pyspark
    python的append insert extend pop del remove使用
    马尔科夫链
    dataframe行变换为列
    scala获取某个时间间隔的时间
    Python3+Flask+uwsgi部署
    A*寻路算法
    C++易混淆知识点整理
  • 原文地址:https://www.cnblogs.com/51benpao/p/12977797.html
Copyright © 2011-2022 走看看