从浏览器地址输入url到请求返回发生了什么?

68 阅读4分钟

引言

最近正好找工作,很多基础知识点在脑袋里一团乱码捋不清,但是吧还蜜汁自信!想到曾几何时,听到某某知识点,第一反应: “嗨呀!我知道,不就是那XXX吗?” 面试官:“那你简单说说” 我:“啊。。。就是那个什么。。。那个。。。嗯。。。阿巴阿巴。。” 一切都是子虚乌有,有始无终。。终是崩不出来一个有用的屁。。。哈哈 自己尴尬地在原地能抠出来一座始皇陵墓,只能任凭面试官尽情鞭策妲己罢撩~

image.png

一、从浏览器地址输入url到请求返回发生了什么?

老生常谈的八股文标准答案如下:

  1. 输入URL后解析出协议、主机、端口、路径等信息,并构造一个 HTTP 请求,发送给DNS
  2. DNS将域名解析成IP地址
  3. TCP连接,TCP三次握手
  4. 客户端发起http请求
  5. 服务器处理请求并返回http报文
  6. 浏览器渲染页面
  7. 断开连接,TCP四次挥手

cc这答案,总感觉像吃饺子不蘸醋,差点意思。。。 url是啥?NDS又是啥?经常说的三次握手四次挥手究竟是啥?

(一)什么是url?

url叫做统一资源定位符,用于定位互联网上的资源,俗称网址。一个标准的网址如下: scheme: // host.domain:port / path / filename ? abc = 123 # 456789

  • scheme:定义互联网服务类型。如http、https、file、ftp
  • host:定义主机
  • domain:域名
  • port:端口,http默认80
  • path:路径
  • filename:资源名称
  • fragment:#后的哈希值,一般用来定位到某个位置

(二)NDS域名解析

在浏览器输入网址后,浏览器并不能直接通过对应的域名找到对应的服务器,而是通过ip地址来实现。

- 什么是IP地址?

  1. 互联网地址协议,IP协议提供的一种统一的地址格式
  2. 为互联网上的每一台主机、每一个网络分配一个逻辑地址,以此来屏蔽物理地址的差异

- 什么是域名解析?

  1. DNS协议通过域名去查找IP地址,或者逆向从IP地址反查域名的服务
  2. DNS 是一个网络服务器,我们的域名解析是在 DNS 上记录一条信息记录

-DNS域名解析过程

分递归查询和迭代查询,现为迭代查询,贴图如下: image.png

DNS的优化与应用

1.DNS缓存有多级缓存,按照距离浏览器的远近排序,分别为:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存 2.DNS负载均衡,也叫做DNS重定向,其实现原理是DNS服务器将域名解析成不同的IP地址,从而实现将用户的请求分发到不同的服务器上,确保每个服务器都会有机会处理 3.dns-prefetch预解析技术,会对当前页面中的链接进行预解析,减少等待时间 tips: CDN就是利用DNS的负载均衡技术实现的重定向,DNS服务器会返回一个跟用户最接近的IP地址给用户,CDN的服务器负责响应用户的请求,提供所需内容

OSI参考模型与TCP/IP四层模型

了解即可 image.png

TCP三次握手建立连接

image.png

  1. 客户端发送一个带有SYN=1,Seq=X的数据包给服务端
  2. 服务端发回一个带有SYN=1,ACK=X+1,Seq=Y的响应包以确认传达信息
  3. 客户端再传回一个带有ACK=Y+1,Seq=Z的数据包,代表握手结束

发送HTTP请求

此篇篇幅过大重开新坑,任意穿梭门地址附上:

服务器处理请求并返回 HTTP 报文

每台服务器上都会安装处理请求的应用——Web server,常见的web server产品有apache、nginx、IIS、Lighttpd等

*了解服务器正向代理和反向代理:正向代理和反向代理的主要区别在于它们的位置和作用不同。正向代理更多地站在客户端的角度,帮助客户端隐藏身份并绕过防火墙限制;而反向代理则更多地站在服务器的角度,为服务器提供负载均衡、缓存和安全保护等功能‌

## 浏览器解析渲染页面

此处专门开了新坑,复习浏览器相关知识点,稍后填坑:

TCP四次挥手断开连接

image.png

  • TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送
  • 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号
  • 服务器关闭客户端的连接,发送一个FIN给客户端
  • 客户端发回ACK报文确认,并将确认序号设置为收到序号加1