深入Web请求过程

1 B/S网络架构

B/S网络架构基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程序采用的长连接的交互模式不同,HTTP采用无状态的短连接的通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通信连接就断开了。采用这种方式是为了能够同时服务更多的用户,因为当前互联网应用每天都会处理上亿的用户请求,不可能每个用户访问一次后就一直保持这个连接。

基于HTTP本身的特点,目前B/S网络架构大多采用如图所示的架构设计,既要满足海量用户的访问请求,又要保持用户的快速响应,所以现在的网络架构越来越复杂。

B/S架构带来了一下两方面的好处。

  • 客户端使用统一的浏览器(Browser)。由于浏览器具有统一性,它不需要特殊的配置和网络连接,有效屏蔽了不同服务提供商给用户使用服务的差异性。另外,浏览器的交互特性使得用户使用他非常方便,且用户行为的可继承性非常强,也就是用户只要学会了上网,不管使用的是哪个应用,一旦学会了,再使用其他互联网服务时同样具有了使用经验,因为它们都基于同样的浏览器操作界面。
  • 服务端(Server)基于统一的HTTP。使用统一的HTTP为服务提供商简化了开发模式,使得服务器开发者可以采用相对规范的开发模式,这样可以大大节省开发成本。基于HTTP的服务器有很多,比如Apache、IIS、Nginx、Tomcat、JBoss等,这些服务器可以直接拿来使用,不需要服务开发者单独开发。

当一个用户在浏览器里输入www.taobao.com这个URL时,会发生很多操作。首先它会请求DNS把这个域名解析成对用的IP地址,然后根据这个IP地址在互联网上找到对应的服务器,向这个服务器发起一个get请求,由于这个服务器决定返回默认的数据资源给访问的用户。在服务器端实际上还有很复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求,这需要一个负载均衡设备来平均分配所有与用户的请求;还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里;当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSS、JS或图片)时又会发起另外的HTTP请求,而这些请求很可能会在CDN上,那么CDN服务器又会处理这个用户的请求,大体上一个用户请求会设计这么多的操作。每一个细节都会影响这个请求最终是否会成功。

2 如何发起一个请求

如何发起一个HTTP请求?简单来说,就是指当你在浏览器里输入一个URL时,按回车键后这个HTTP请求就发起了,很快你就会看到这个请求的返回结果。复杂来说,就是指能否不借助浏览器也能发起请求,这里的“不借助”有两层含义,一是值能不能自己组装一个符合HTTP的数据包,二是处理浏览器还有哪些方式也能简单地发起一个HTTP请求。

如何发起一个HTTP请求和如何建立一个Socket连接区别不大,只不过outputStream.write写的二进制字节数据格式要符合HTTP。卢兰其在建立Socket连接之前,必须根据地址栏里输入的URL域名DNS解析出IP地址,再根据这个IP地址和默认的80端口与远程服务器建立Socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接

文章目录
  1. 1 B/S网络架构
  2. 2 如何发起一个请求
|