从输入网址到获得页面的网络请求过程

 

  • 查询 DNS

 

    • 浏览器搜索自身的DNS缓存
    • 搜索操作系统的DNS缓存,本地host文件查询
    • 如果 DNS 服务器和我们的主机在同一个子网内,系统会按照下面的 ARP 过程对 DNS 服务器进行 ARP查询
    • 如果 DNS 服务器和我们的主机在不同的子网,系统会按照下面的 ARP 过程对默认网关进行查询
  • 浏览器获得域名对应的IP地址后,发起HTTP三次握手

  • TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了

  • TLS 握手

    • 客户端发送一个 ClientHello 消息到服务器端,消息中同时包含了它的 Transport Layer Security (TLS) 版本,可用的加密算法和压缩算法。
    • 服务器端向客户端返回一个 ServerHello 消息,消息中包含了服务器端的TLS版本,服务器所选择的加密和压缩算法,以及数字证书认证机构(Certificate Authority,缩写 CA)签发的服务器公开证书,证书中包含了公钥。客户端会使用这个公钥加密接下来的握手过程,直到协商生成一个新的对称密钥
    • 客户端根据自己的信任CA列表,验证服务器端的证书是否可信。如果认为可信,客户端会生成一串伪随机数,使用服务器的公钥加密它。这串随机数会被用于生成新的对称密钥
    • 服务器端使用自己的私钥解密上面提到的随机数,然后使用这串随机数生成自己的对称主密钥
    • 客户端发送一个 Finished 消息给服务器端,使用对称密钥加密这次通讯的一个散列值
    • 服务器端生成自己的 hash 值,然后解密客户端发送来的信息,检查这两个值是否对应。如果对应,就向客户端发送一个 Finished 消息,也使用协商好的对称密钥加密
    • 从现在开始,接下来整个 TLS 会话都使用对称秘钥进行加密,传输应用层(HTTP)内容
  • HTTP 服务器请求处理

    HTTPD(HTTP Daemon)在服务器端处理请求/响应。最常见的 HTTPD 有 Linux 上常用的 Apache 和 nginx,以及 Windows 上的 IIS。

    • HTTPD 接收请求

      • 服务器把请求拆分为以下几个参数:

        HTTP 请求方法(GETPOSTHEADPUTDELETECONNECTOPTIONS, 或者 TRACE)。直接在地址栏中输入 URL 这种情况下,使用的是 GET 方法域名:google.com请求路径/页面:/ (我们没有请求google.com下的指定的页面,因此 / 是默认的路径)

    • 服务器验证其上已经配置了 google.com 的虚拟主机

    • 服务器验证 google.com 接受 GET 方法

    • 服务器验证该用户可以使用 GET 方法(根据 IP 地址,身份信息等)

    • 如果服务器安装了 URL 重写模块(例如 Apache 的 mod_rewrite 和 IIS 的 URL Rewrite),服务器会尝试匹配重写规则,如果匹配上的话,服务器会按照规则重写这个请求

    • 服务器根据请求信息获取相应的响应内容,这种情况下由于访问路径是 "/" ,会访问首页文件(你可以重写这个规则,但是这个是最常用的)。

    • 服务器会使用指定的处理程序分析处理这个文件,假如 Google 使用 PHP,服务器会使用 PHP 解析 index 文件,并捕获输出,把 PHP 的输出结果返回给请求者

  • 服务器接受到这个请求,根据路径参数,经过后端的一些处理生成HTML页面代码返回给浏览器

  • 浏览器拿到完整的HTML页面代码开始解析和渲染,如果遇到引用的外部js,CSS,图片等静态资源,它们同样也是一个个的HTTP请求,都需要经过上面的步骤

  • 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户

原文链接 : https://github.com/frank-lam/fullstack-tutorial/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md

简述 : 

  • 浏览器查询DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析;如果要查询的域名不由本地DNS服务器区域解析,但该服务器已经缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或迭代查询。
  • 浏览器获得域名对应的IP地址后,浏览器向服务器请求建立连接,发起三次握手
  • TCP/IP连接建立起来后,浏览器向服务器发送HTTP请求
  • 服务器接收到这个请求,根据路径参数映射到特定的请求处理器进行处理,并将处理结果返回给浏览器
  • 浏览器根据请求到的资源,最终向用户呈现一个完整的页面

原文链接:https://blog.csdn.net/N1neDing/article/details/80861323

posted @ 2019-09-09 14:45  GoAheadAQU  阅读(502)  评论(0编辑  收藏  举报