从 url 输入到返回请求的过程

问题: 从浏览器地址栏输入url到请求返回发生了什么

回答:首先会进行 url 解析,根据 dns 系统进行 ip 查找

1. 先说为什么url要解析(也就是编码)

A:回答:因为网络标准规定了URL只能是字母和数字,还有一些其它特殊符号,比较常见的就是不包括%“”,而且如果不转义会出现歧义,比如http:www.baidu.com?key=value,假如我的key本身就包括等于=符号,比如ke=y=value,就会出现歧义,你不知道=到底是连接key和value的符号,还是说本身key里面就有=。
B:大佬接着毒打我说,那url编码的规则是什么呢?
A:我说utf-8
B:大佬接着穷追不舍,为啥是utf-8呢,所有浏览器都是这样吗?中文的话用gb2312编码吗,还有就是万一浏览器不是你说的这样统一用utf-8,你怎么保证都是utf-8的编码?
A:我支支吾吾的说,我了解的大概是这样,不太清楚, 应该和html本身的编码格式有关,然后怎么保证utf-8的编码,我觉得可以用encodeURIComponent
B:大佬说encodeURIComponent比encodeURI有什么区别?
A:区别就是encodeURIComponent编码范围更广,适合给参数编码,encodeURI适合给URL本身(locaion.origin)编码,当然项目里一般都是用qs库去处理

2. 然后说说dns解析流程,并且html如何做dns优化

  • 比如说查询一个网址为:www.baidu.com
  • 1、器中输入https://www.baidu.com 域名,操作系统会先查hosts件是否有记录,有的话就会把相对应映射的IP返回。
  • 2、hosts文件没有就去查本地dns解析器有没有缓存。(这个我没答上来)
  • 3、然后就去找我们计算机上配置的dns服务器上有或者有缓存,就返回
  • 4、还没有的话就去找根DNS服务器(全球13台,固定ip地址),然后判断.com域名是哪个服务器管理,如果无法解析,就查找.baidu.com服务器是否能解析,直到查到www.baidu.com的IP地址

前端的dns优化,可以在html页面头部写入dns缓存地址,比如

<meta http-equiv="x-dns-prefetch-control" content="on" />
<link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />

3.查找到IP之后,就是http协议的三次握手(以及后面会涉及到四次分手)

在浏览器地址栏输入URL

第一步:当用户在浏览器输入URL
第二步:浏览器查找域名的IP地址,浏览器会把输入的域名解析成对应的IP进行查询
第三步:浏览器与服务器建立连接
主机浏览器通过DNS解析得到了目标服务器的IP地址后,与服务器建立TCP连接。 TCP3次握手连接:浏览器所在的客户机向服务器发出连接请求报文;服务器接收报文后,同意建立连接,向客户机发出确认报文;客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;此处客户机与服务器之间的TCP连接建立完成,开始通信

Guess you like

Origin blog.csdn.net/qq_45271323/article/details/115082246
URL
URL
URL
URL