概述

当你在浏览器输入url到发起http请求,这过程到底发生了什么?其实整个流程如下:

  1. 域名解析
  2. 为了将消息从你的PC上传到服务器
  3. 上.需要用到1P协议、ARP协议和0SPF协议
  4. 发起TCP的3次握手
  5. 建立TCP连接后发起http请求
  6. 服务器响应htp请求
  7. 浏览器解析htm代码,并请求html代码中的资源(如js、css、图片等)
  8. 断开TCP连接
  9. 浏览器对页面进行渲染呈现给用户
用户输入url

当用户输入url,操作系统会将输入事件传递到浏览器中,在这过程中,浏览器可能会做一些预处理,比如 Chrome 会根据历史统计来预估所输入字符对应的网站,例如输入goog,根据之前的历史发现 90% 的概率会访问「www.google.com 」,因此就会在输入回车前就马上开始建立 TCP 链接甚至渲染了。

接着是输入url之后,点击回车,这时浏览器会对 URL 进行检查,首先判断协议,如果是 http 就按照 Web 来处理,另外还会对这个 URL 进行安全检查

安全检查完成之后,在浏览器内核中会先查看缓存,然后设置 UA 等 HTTP 信息,接着调用不同平台下网络请求的方法。

注意:

浏览器和浏览器内核是不同的概念,浏览器指的是 Chrome、Firefox,而浏览器内核则是 Blink、Gecko,浏览器内核只负责渲染,GUI 及网络连接等跨平台工作则是浏览器实现的


http网络请求

dns查询ip

DNS,英文是Domain Name System,中文叫域名系统,是Internet的一项服务,他将域名和IP地址相互映射的一个分布式数据库

从浏览器缓存中查找域名www.google.com的IP地址

  • 在浏览器缓存中没找到,就在操作系统缓存中查找,这一步中也会查找本机的hosts看看有没有对应的域名映射(当然已经缓存在系统DNS缓存中了)
  • 在系统中也没有的话,就到你的路由器来查找,因为路由器一般也会有自己的DNS缓存
  • 如果以上都没有找到,则继续往下向dns域名服务器查询

    注意,

    域名查询时有可能是经过了CDN调度器的(如果有cdn存储功能的话)

    而且,需要知道dns解析是很耗时的,因此如果解析域名过多,会让首屏加载变得过慢,可以考虑dns-prefetch优化

    tcp/ip请求

    有了 IP 地址,就可以通过 Socket API 来发送数据了,这时可以选择 TCP 或 UDP 协议。

    http本质是tcp协议。

    TCP是一种面向有连接的传输层协议。他可以保证两端(发送端和接收端)通信主机之间的通信可达。他能够处理在传输过程中丢包、传输顺序乱掉等异常情况;此外他还能有效利用宽带,缓解网络拥堵。

    建立TCP连接一开始都要经过三次握手:

    http协议常用的请求方式有哪两种(从你在浏览器输入url到发起http请求)(1)

    三次握手

    第一次握手,请求建立连接,发送端发送连接请求报文

    第二次握手,接收端收到发送端发过来的报文,可知发送端现在要建立联机。然后接收端会向发送端发送一个报文

    第三次握手,发送端收到了发送过来的报文,需要检查一下返回的内容是否是正确的;若正确的话,发送端再次发送确认包

    在TCP连接建立完成之后就可以发送HTTP请求了。

    注意

    浏览器对同一个域名有连接数限制,大部分是 6,http1.0中往往一个资源下载就需要对应一个tcp/ip请求,而像 HTTP 2.0 协议尽管只使用一个 TCP 连接来传输数据,但性能反而更好,而且还能实现请求优先级。


    后面会分享更多devops和DBA内容,感兴趣的朋友可以关注下!!

    http协议常用的请求方式有哪两种(从你在浏览器输入url到发起http请求)(2)

    ,