深入分析Java Web技术内幕第一章

深入分析Java Web技术内幕读书笔记

chapter1. 深入Web请求过程

B/S两方面好处:

客户端使用统一的浏览器(Browser)。浏览器统一性,屏蔽了不同服务器提供商提供服务的差异性。并且,浏览器交互特性使浏览器使用方便,且用户行为的可继承性非常强。
服务端(Server)基于统一的HTTP协议。简化服务提供商开发模式,规范服务器开发者上午开发模式。

1.1 B/S网络架构概述

B/S架构前后端都得以简化,都基于统一的应用层协议HTTP来交互数据,HTTP采用无状态的短连接方式,一次请求就能完成数据交互,如今更多的数据传输采用了更安全的HTTPS协议。

浏览器中输入一个URL后的流程:DNS服务器将域名映射到相应的IP地址,根据IP地址找到互联网上相应的服务器,客户端向服务端发起请求,服务器返回给客户端请求的数据资源。服务端可能还有一些其他的业务逻辑,如多台服务器间的负载均衡,或者是返回给客户端资源的存储方式等等。
在这里插入图片描述
上图为CDN架构图。

网络架构基本原则:
(1)互联网上所有资源用一个URL(统一资源定位符)表示。
(2)必须基于HTTP协议与服务端交互。(HTTPS现在更为广泛一些)
(3)数据展示必须在浏览器中进行。(必须浏览器?)

1.2 如何发起一个请求

建立HTTP连接的过程基本上就是建立一个socket连接的过程,不过是数据报中的数据格式要符合HTTP协议要求。建立socket连接前,需由DNS服务器解析出相应的IP地址,再根据IP地址和默认的端口号(80)与服务器建立socket连接,然后浏览器组装一个HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开连接。

1.3 HTTP协议解析

B/S网络架构中核心是HTTP协议。
HTTP协议中最重要的是HTTP Header。HTTP Header控制着用户浏览器渲染行为和服务器的执行逻辑。
在这里插入图片描述
在这里插入图片描述

1.3.2浏览器缓存机制

Ctrl+F5刷新页面一定能够请求没有浏览器缓存的页面,但可能在服务端返回缓存的数据,所以为了保证获取最新的数据,必须通过HTTP来控制。

使用Ctrl+F5发起请求时,会在HTTP请求头中增加一些请求头,以告诉服务端要获取的最新的数据而不是缓存。Pragma和Cache-Control用于指定所有缓存机制在整个请求/响应链中必须服从的指令。

  1. Pragma和Cache-Control用于指定所有缓存机制在整个请求/响应链中必须服从的指令。

在这里插入图片描述

  1. Expires:Sar,25 Feb 2012 12:22:17 GMT 浏览器请求前检查这个字段,是否过期,过期重新向服务器发起请求。
  2. Last-Modified/Etag。Last-Modified表示一个服务器上的资源的最后修改时间。浏览器请求头增加一个If-Modified—Since:Sar,25 Feb 2012 12:22:17 GMT,询问是否最新,是最新的返回304,也不会传新数据。Etag类似,让服务器给每个页面分配唯一的编号,通过编号区分是否最新,比Last-Modified灵活,但多台后端服务器不好处理。

1.4 DNS域名解析

在这里插入图片描述

  1. 浏览器检查缓存是否有域名对应的IP。
  2. 浏览器查找操作系统是否有对应的DNS解析成果。
  3. 操作系统把域名发给LDNS,本地区的域名服务器。
  4. LDNS没有,直接到Root Server域名服务器请求解析。LDNS承担了主要的域名解析工作。
  5. 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器gTLD Server地址。gTLD国际顶级域名服务器,只有13台左右。
  6. 本地域名服务器(Local DNS Server)向gTLD Server发送请求。
  7. 接受请求的gTLD Server查找返回此对应域名的Name Server域名服务器地址。你注册的域名服务器,某台服务商申请域名,域名解析交给域名服务器。
  8. Name Server域名服务器地址查询域名和IP映射关系表,连同TTL值返回给DNS Server域名服务器。
  9. 返回该域名对应的IP和TTL值,Local DNS Server缓存这个域名和IP对应关系,缓存时间TTL值控制。
  10. 解析结果给用户,用户根据TTL值缓存到本地系统中,域名解析结束。

1.4.4 几种域名解析方式

A记录、MX记录、CNAME记录、NS记录和TXT记录。

  1. A记录,Address,用来指定域名对应的IP地址。A记录可以将多个域名解析到一个IP地址,不能将一个域名解析到多个IP地址。
  2. MX记录,Mail Exchange,将某个域名下邮件服务器指向自己的Mail Server。DNS会将xxx@mail.com请求发送在mail服务器地址,正常WEB请求仍然解析至A记录的IP地址。
  3. CNAME记录,Canonical Name(别名解析)。为一个域名设置一个或者多个别名。

NS记录,为某个域名指定DNS解析服务器,这个域名有指定的IP地址的DNS服务器去解析。

  1. TXT记录,为某个主机名或域名设置说明。

1.5 CDN工作机制

内容分布网络(Content Delivery Network)。CDN=镜像mirror+缓存cache+整体负载均衡GSLB。
CDN一缓存网站中的静态数据为主。加速网页数据内容的下载速度。

目标

  • 可扩展(Scalability)。性能可扩展。成本可扩展。
  • 安全性(Security)。
  • 可靠性、响应和执行(Reliability、Responsiveness和Performance)。

在这里插入图片描述
访问静态文件,先向Local DNS服务器发起请求,经过迭代到达域名注册服务器解析,公司DNS把请求重新CNAME解析到另外的一个域名,这个域名指向CDN的DNS负载均衡服务器,由这个GTM分配用户距离最近的CDN节点。如果这个CDN节点请求不存在,会再回原站获取文件,返回给用户。

1.5.2 负载均衡

Load Balance对工作任务进行平衡、分摊到多个操作单元上执行。
链路负载均衡、集群负载均衡、操作系统负载均衡。

  • 链路负载均衡,DNS解析成不同的IP。
  • 集群负载均衡。
1 硬件负载均衡 2 3
1 软件负载均衡 2 3
  • 操作系统负载均衡:操作系统级别的软中断和硬件中断。

1.5.3 CDN动态加速

在CDN的DNS解析中通过动态的链路探测来寻找回溯最好的一条路径,通过DNS的调度将所有请求调度到选定的路径上回溯。

代码交流 2021