面试题:浏览器中输入 URL 后会发生什么事情

目录

综述

一、浏览器查找域名的 IP 地址

二、浏览器向web 服务器发送一个 HTTP 请求

三、服务器的永久重定向响应

        301和302重定向对比

四、浏览器跟踪重定向地址

五、服务器处理请求

六、服务器返回一个 HTTP 响应

七、浏览器显示 HTML


综述

这是一道常用的面试题,针对后端方面,可以从以下两个角度回答问题:

  1. 网络传输过程(DNS 解析,HTTP 协议的格式, TCP 建立连接和传输, IP 转发过程,数据链路层转发过程)
  2. 应用程序(Tomcat 根据请求找到对应的 Servlet 代码)执行代码根据请求构造的响应,把响应结果写回给客户端

本篇文章针对第一个角度进行回答,因此浏览器输入 URL 后发生的事情可分为以下几点:

  1. 浏览器查找域名的 IP 地址
  2. 浏览器向 web 服务器发送一个 HTTP 请求
  3. 服务器的永久重定向响应
  4. 浏览器跟踪重定向地址
  5. 服务器处理请求
  6. 服务器返回一个 HTTP 响应
  7. 浏览器显示 HTML

一、浏览器查找域名的 IP 地址

  1. 客户端发起请求后,浏览器需要解析这个域名。首先,浏览器会查看本地硬盘的 hosts 文件(一般在 C 盘,但因为修改不方便已被舍弃),看有没有和这个域名对应的 IP 地址,如果有,就直接使用。
  2. 如果在本地的 hosts 文件中没有找到对应的 IP地址,浏览器会发送一个 DNS 请求到本地 DNS 服务器。本地 DNS 服务器一般为中国移动、中国电信等。
  3. 查询的 DNS 请求到达本地的 DNS 服务器之后,本地 DNS 服务器首先会查询它的缓存记录,如果缓存中存在,就直接返回结果。如果没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。(此处的本地 DNS 服务器是根据根服务器进行设置缓存的)
  4. 根 DNS 服务器不记录具体的域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器到域服务器进行查询,并给出域服务器的地址。
  5. 本地 DNS 服务器继续向域服务器发出请求,域服务器收到请求之后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器的域名的解析服务器的地址。
  6. 本地 DNS 服务器向域名的解析服务器发出请求,收到一个域名和 IP 地址对应关系,本地 DNS 服务器不仅要把 IP 地址返回给客户端,还要把这个对应关系保存在缓存中,以备下次别的用户访问。

二、浏览器向web 服务器发送一个 HTTP 请求

        拿到域名对应的 IP 地址后,浏览器会以一个随机端口(1024 ~65535)向服务器的 web 程序的 80 端口发起 TCP 的连接请求。这个请求到达服务器端后,进入网卡,进入到内核的 TCP/IP 协议栈(此处有 TCP 建立连接和传输、 IP转发过程、 数据链路层转发过程知识点),最终到达 web 程序,建立了 TCP/IP 的连接。

知识点:

IP 协议、以太网协议

TCP 协议

UDP 协议

        建立了 TCP 连接之后,发起了一个 HTTP 请求,如 GET、POST等。

        客户端像服务器发送的 HTTP 请求会带有请求信息,请求信息一般包含三个部分:

  1. 请求方法 URI 协议/ 版本
  2. 请求头:请求头包含许多有关的客户端环境和请求正文的有用信息。例如请求头可以声明浏览器所用的语言、请求正文的长度等
  3. 请求正文:请求头和请求正文之间是一个空行,这个行表示请求头已经结束,接下来是请求正文。请求正文中可以包含客户提交的查询字符串信息

三、服务器的永久重定向响应

        服务器需要先重定向而不是直接发送用户想看的网页内容,有一个原因是跟搜索引擎排名有关。搜索引擎知道 301 永久重定向是什么意思,会把带 www 和不带 www 的地址归到同一个网站下,防止一个页面出现多个缓存。

        301和302重定向对比

                两个状态码都表示重定向,但301表示旧地址的资源已经被永久的移除了,搜索引擎在抓取新的内容时将旧的网络地址交换为重定向后的网址;302表示旧的地址资源还在,这个重定向只是临时的从旧地址跳转到新地址,搜索引擎会抓取新的内容而保存旧的地址。

四、浏览器跟踪重定向地址

        重新发送 HTTP 请求

五、服务器处理请求

        后端从在固定的端口接收到 TCP 报文开始,它会对 TCP 连接进行处理,对 HTTP 协议进行解析,并按照报文格式进一步封装成 HTTP Request 对象,供上层使用。

        通过反向代理,服务器端脚本处理请求,访问数据库,获取内容(综述中提到的第二方面内容)。

六、服务器返回一个 HTTP 响应

         服务器端处理请求后会返回处理结果,即 HTTP 响应,其中包含以下三个部分:

  1.  状态行:由协议版本、状态码及其响应的状态描述组成,各元素之间以空格分隔。
  2. 响应头:由 关键字/ 值 对组成,每行一对,关键字和值用英文冒号分隔。
  3. 响应正文:包含一些具体信息,如cookie、html、image等。响应正文和响应头之间有一行空格,表示响应头的信息到空格为止。

七、浏览器显示 HTML

        涉及到前端知识,本文不做描述。

你可能感兴趣的:(网络知识,http,网络安全,网络协议,tcp/ip)