Web http请求过程

B/S 架构的好处

客户端使用同一的浏览器。浏览器具有统一性,不需要特殊的配置和网络连接,屏蔽了服务的差异性。

浏览器的交互特性使用户使用简便,继承性强。

服务端基于统一的 HTTP 协议,采用相对规范的开发模式,节省了开发成本。

基于 HTTP 协议的服务器很多: Apache、Nginx、Tomcat、JBoss。可以直接拿来用。

B/S 网络架构

大多数传统的互联网应用程序采用长连接的交互模式,而 HTTP 协议采用无状态的短连接的通信方式。一次请求就完成了一次数据交互,通常也对应一个业务逻辑。网络架构如下:


请求一个网址的步骤

在浏览器中输入一个 URL。

浏览器请求 DNS 把域名解析成对应的 IP 地址

根据 IP 地址在在互联网上找到对应的服务器,并向服务器发送一个 get 请求。

        需要负载均衡设备来平均分配所有用户的请求

        请求的数据可能存储在分布式缓存或者静态文件或者数据库中。

由这个服务器决定返回默认的数据资源给访问的用户

          浏览器解析返回的静态资源数据时,又会发起另外的 HTTP 请求,请求可能发生在 CDN 上

需要遵守的原则

互联网上所有的资源都用一个 URL(统一资源定位符) 来表示。

必须基于 HTTP 协议与服务端交互

数据展示必须在浏览器中进行(只有在浏览器上才能恢复得到的数据资源的容貌)

请求头 说明
Accept-Charset 用于指定客户端接受的字符集
Accept-Encoding 用于指定可接受的内容编码,如Accept-Encoding:gzip.deflate
Accept-Language 用于指定一种自然语言。如Accept-Language:zh-cn
Host 用于指定被请求资源的 Internet 主机和端口号,如Host:www.taobao.com
User-Agent 客户端将它的操作系统、浏览器和其他属性告诉服务器
Connection 当前连接是否保持,如Connection:Keep-Alive

2. 常见的 HTTP 响应头
响应头 说明
Server 使用服务器名称,如 Server: Apache/1.3.6(Unix)
Content-Type 用来指明发送给接收者的实体正文的媒体类型,如 Content-Type/html;charset=GBK
Content-Language 描述了资源所用的自然语言,与 Accept-Language 对应
Content-Length 指明实体正文的长度,用以字节方式存储的十进制数字来表示
Keep-Alive 保持连接的时间,如 Keep-Alive:timeout=5,max=120
3. 常见的HTTP状态码
状态码 说明
200 客户端请求成功
302 临时跳转,跳转的地址通过 Location 指定
400 客户端请求有语法错误,不能被服务器识别
403 服务器收到请求,但是拒绝提供服务
404 请求的资源不存在
500 服务器发生不可预期的错误

浏览器的缓存机制

Ctrl + F5 :浏览器会直接向目标 URl 发送请求,而不会使用缓存的数据;HTTP 的请求头中会增加一些请求头,告诉服务器我们获取最新的数据而不是缓存。

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


字段的可选值

可选值 说明
Public 所有内容将都被缓存,在响应头中设置
Private 内容值缓存到私有缓存中,在响应头中设置
no-cache 所有内容都不会被缓存,在请求头和响应头中设置
no-store 所有内容都不会被缓存到或缓存成 Internet 临时文件中,在相应头中设置
must-revalidation/proxy-revalidation 如果缓存的内容失效,请求必须发送到服务器/代理进行重新验证,在请求头中设置
max-age=xxx 缓存的内容将在 xxx 秒后失效,只在 HTTP 1.1中可用
2. Expires

Expires 通常的格式为 Expires:Sun, 19 Feb 2017 12:53:33 GMT,后面跟一个日期和时间,超过这个时间值后,缓存的内容将失效。

3. Last-Modified/Etag

用于表示一个服务器上的资源的最后修改时间,资源可以是静态(静态内容自动加上 Last-Modified 字段) 或动态的内容(如 Servlet 提供了一个 getLastModified 方法用于检查某个动态内容是否已经更新),通过这个最后修改时间可以判断当前请求的资源是否是最新的。

DNS 域名解析

  

DNS 域名解析的过程

当用户在浏览器中输入域名并按下回车键后:

  1. 浏览器检查缓存中有没有这个域名对应的 IP 地址。如果有,解析结束(域名的缓存时间通过 TTL 属性设置)。
  2. 如果用户的缓存中没有,浏览器检查操作系统缓存中是否有这个域名对应的 DNS 解析结果(Windows 中通过C:\Windows\System32\drivers\etc\hosts文件设置)。
  3. 以上两个过程无法解析时,操作系统会把这个域名发送给 LDNS,也就是本地的域名服务器(提供DNS解析服务),如果是在学校接入互联网,那么你的DNS服务器肯定在学校,如果是小区,这个DNS 时提供给你接入互联网的提供商,即电信、联通,也就是 SPA。这个 DNS 可以通过 ipconfig 查询这个地址。
  4. 如果 LNDS 仍没有命中,就直接到 Root Server 域名服务器请求解析。
  5. 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。
  6. 本地域名服务器(Local DNS Server)再向上一步返回的 gTLD 服务器发送请求。
  7. 接受请求的gTLD服务器查找并返回此域名对应的 Name Server 域名服务器的地址,这个 Name Server 通常就是你注册的域名服务器。
  8. Name Server 域名服务器会查询存储的域名和 IP 的映射关系表,正常情况下根据域名得到目标的IP记录,连同一个 TTl 值返回给 DNS Server 域名服务器。
  9. 返回该域名对应的 IP 和TTl 值,Local DNS Server 会缓存这个域名和 IP 的对应关系。
  10. 把解析的结果返回给用户。

nslookup命令查询域名解析的结果。


清除缓存的域名

DNS 域名解析后会缓存解析结果,主要在两个地方缓存: 1. Local DNS Server;2. 用户本地机器。

本机缓存的清除: 1. 在命令模式下执行ipconfig/flushdns 来刷新缓存;2. 重启

域名解析的方式

域名解析记录只要分为A记录、MX记录、CNAME记录,NS记录、TXT记录

  • A(Address)记录:用来指定域名对应的IP地址,可以将多个域名地址解析到一个IP地址,但是不能讲一个域名解析到多个IP地址
  • MX(Mail Exchange)记录:讲某个域名下的邮件服务器指向自己的Mail Server
  • CNAME(Canonical Name)记录:别名解析就是可以为一个域名设置一个或多个别名
  • NS记录:为某个域名指定DNS解析服务器
  • TXT记录:为某个主机名或域名设置说明

CDN 工作机制

CND(Content Delivery Network),内容分布网络,是构筑在现有Internet 上的一种先进的流量分布网络。目的是通过现有的 Internet 中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户就近取得所有内容,提高用户访问速度。


CDN=镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB)

CDN 以缓存网站中的静态数据为主,如css、js、图片和静态页面等数据,用户从主站服务器请求到动态内容后再从 CDN 上下载这些静态数据,从而加速网页数据的下载内容。

CDN请求与处理流程:向Local DNS 服务器发送请求,一般经过迭代解析后回到这个域名的注册服务器解析(每个公司都会有一台DNS解析服务器),这个服务器会把请求重新CNAME解析到另一个域名,这个域名最终会指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配是哪个地方的访问用户吗,返回给离这个用户最近的CDN节点。

负载均衡

负载均衡就是对工作任务进行平衡,分摊到多个操作单元上执行。如图片服务器、应用服务器,共同完成工作任务。提高服务器响应速度及利用效率。

三种负载均衡架构分别是链路负载均衡、集群负载均衡、操作系统负载均衡

链路负载均衡:通过DNS解析到不同的IP,然后用户根据这个IP来访问不同的目标服务器

集群负载均衡:

  • 硬件负载均衡:性能好,价格高
  • 软件负载均衡:成本低,多次代理,网络延时
感谢原创作者提供https://www.jianshu.com/p/efb5dcb20eed

猜你喜欢

转载自blog.csdn.net/qq_33443033/article/details/80065216
今日推荐