【学习笔记】透视HTTP协议(六):发起请求后,处理流程是怎么样子的?

  本文是一篇学习笔记,学习的课程是极客时间的《透视HTTP协议》。

透视HTTP协议_HTTP_HTTPS-极客时间 (geekbang.org)

本文主要描述发起请求后,具体的处理过程。

目录

一、简述浏览器HTTP请求过程

二、详述浏览器HTTP请求过程


一、简述浏览器HTTP请求过程

示例:在Chrome浏览器的地址栏里输入“http://127.0.0.1/”,再按下回车键。

  1. 浏览器从地址栏的输入中获得服务器的IP地址和端口号;

  2. 浏览器用TCP的三次握手与服务器建立连接;

  3. 浏览器向服务器发送拼好的报文;

  4. 服务器收到报文后处理请求,同样拼好报文再发给浏览器;

  5. 浏览器解析报文,渲染输出页面。

注意:第1个步骤中,如果地址栏输入的是域名,浏览器会发起域名解析动作,通过访问一系列的域名解析服务器,试图把这个域名翻译成TCP/IP协议里的IP地址。

域名解析的过程可以看上一篇文章。

二、详述浏览器HTTP请求过程

真实的互联网世界是怎么样子的?可以看下面这张图:

网络处理过程如下:

1、如果上网用的是电脑台式机,那么可能会使用带水晶头的双绞线连上网口,由交换机接入固定网络;如果上网用的是手机、平板电脑,那么可能会通过蜂窝网络、WiFi,由电信基站、无线热点接入移动网络。

2、接入网络的同时,网络运行商会给上网的设备分配一个IP地址,这个地址可能是静态分配的,也可能是动态分配的。静态IP就始终不变,动态IP可能下次上网就变了。

3、假设要访问的是Apple网站,在浏览器里使用域名“www.apple.com”访问,这时浏览器会发起域名解析动作。

4、DNS协议开始从操作系统、本地DNS、根DNS、顶级DNS、权威DNS的层层解析,当然这中间有缓存,可能不需要层层解析就可以拿到IP地址。

5、但是互联网上还有另外一个重要的角色CDN,它也会在DNS的解析过程中“插上一脚”。DNS解析可能会给出CDN服务器的IP地址,这样拿到的就会是CDN服务器而不是目标网站的实际地址。因为CDN会缓存网站的大部分资源,比如图片、CSS样式表,所以有的HTTP请求就不需要再发到Apple,CDN就可以直接响应你的请求,把数据发给你。

6、但是由于PHP、Java等后台服务动态生成的页面属于“动态资源”,CDN无法缓存,只能从目标网站获取。于是你发出的HTTP请求就要开始在互联网上的“漫长跋涉”,经过无数的路由器、网关、代理,最后到达目的地:目标服务器。

7、目标网站的服务器对外表现的是一个IP地址,但为了能够扛住高并发,在内部也是一套复杂的架构。通常在服务器的入口是负载均衡设备,例如四层的LVS或者七层的Nginx,在后面是许多的服务器,构成一个更强更稳定的集群。

8、负载均衡设备会先访问系统里的缓存服务器,通常有memory级缓存Redis和disk级缓存Varnish,它们的作用与CDN类似,不过是工作在内部网络里,把最频繁访问的数据缓存几秒钟或几分钟,减轻后端应用服务器的压力。

9、如果缓存服务器里也没有,那么负载均衡设备就要把请求转发给应用服务器了。这里就是各种开发框架大显神通的地方了,例如Java的Tomcat/Netty/Jetty,Python的Django,还有PHP、Node.js、Golang等等。它们又会再访问后面的MySQL、PostgreSQL、MongoDB等数据库服务,实现用户登录、商品查询、购物下单、扣款支付等业务操作,然后把执行的结果返回给负载均衡设备,同时也可能给缓存服务器里也放一份。

10、应用服务器的输出到了负载均衡设备这里,请求的处理就算是完成了,就要按照原路再走回去,还是要经过许多的路由器、网关、代理。如果这个资源允许缓存,那么经过CDN的时候它也会做缓存,这样下次同样的请求就不会到达源站了。

11、最后网站的响应数据回到了你的设备,它可能是HTML、JSON、图片或者其他格式的数据,需要由浏览器解析处理才能显示出来,如果数据里面还有超链接,指向别的资源,那么就又要重走一遍整个流程,直到所有的资源都下载完。

敲黑板:

建立TCP连接后会顺序收发数据,请求方和应答方都必须依据HTTP规范构建和解析报文;

为了减少响应时间,整个过程中的每一个环节都会有缓存,能够实现“短路”操作;

题外话:

这一节课里讲的都是正常的请求处理流程,如果是一个不存在的域名,那么浏览器的工作流程会是怎么样的呢?

  1. 用户输入与URL检查:用户在地址栏按下回车,浏览器检查输入的字符串是否符合URL规则,并尝试组装完整的URL
  2. 查找缓存:浏览器首先会检查自身的缓存,看看是否有之前对该域名的解析记录。如果没有,则会继续查找系统缓存,然后是hosts文件等。
  3. 域名解析
    • 如果在缓存中没有找到对应的记录,浏览器会开始域名解析过程。
    • 本地域名服务器会先查询本地的缓存,如果没有该纪录项,则会把请求发给根域名服务器[2]。
    • 逐级查询,直到找到正确的纪录或确定该域名不存在。
  4. 返回错误信息:如果经过上述步骤后,浏览器确定域名不存在,它通常会返回一个错误页面。在Chrome浏览器中,这个错误通常是“ERR_CONNECTION_ABORTED”。

这个过程可能会因为网络状况、浏览器设置、缓存情况等因素而有所不同。此外,对于不存在的域名,浏览器可能还会执行一些额外的操作,比如尝试重定向、触发某些安全策略等。

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值