深入web请求

深入Web请求

浏览器缓存机制

为了重新请求看到最新的数据,必须通过HTTP协议来控制

在我们刷新一个页面的时候,在HTTP的请求头会增加一些请求头,告诉服务端需要最新的数据,而不是缓存

请求头会多两个请求头,分别是

Pragma:no-cache 和 Cache-Control:no-cache

Cache-Control && Pragma

整个请求/响应链中必须服从的命令

Http Head 字段的可选值

可选值说明
Public所有内容被缓存,响应头设置
Private内容缓存到私有缓存,响应头设置
no-cache所有内容不会被缓存,请求头响应头设置
no-store所有内容不会被缓存或Internet临时文件中,响应头设置
must-revalidation/proxy-revalidation如果缓存失败,请求就发送到服务器或者代理重新验证,请求头设置
max-age = xxx缓存内容将在xxx秒后失效,只在HTTP1.1中生效,响应头中设置

Cache-Control请求字段被浏览器支持的较好,优先级较高,和其他字段一起出现(Expires),Cache-Control会覆盖字段

Pragma字段和Cache-Control字段差不多

Expires

通常的使用格式: Expires:Wed, 14 Jun 2023 08:31:12 GMT

日期与时间,超过这个时间,缓存的内容失效,浏览器发请求前,检查该字段,如果失效,重新请求

Last-Modified /Etag

Last-Modified 表示一个服务器上资源的最后修改时间,

资源可以是静态的,静态内容自动加上Last-Modified字段

可以是动态的,Servlet里的一个方法getLastModified()方法,检查某个动态内容是否更新


在响应头返回一个Last-Modified字段

浏览器再次请求的时候,会在请求中加上一个If-Modified-Since:…,询问当前缓存是否是最新,最新返回状态码304,然后服务器不用再传数据


Etag字段和上面这个字段作用差不多,Etag让服务端给每个页面分配一个唯一的编号,然后通过这个辨别是否为最新的,

这个方法比Last-Modified更灵活,但是后端服务器很多台的话,比较难处理,所有服务器都得记住所有资源,没什么意义了.

DNS域名解析

过程

当用户再浏览器输入url之后

第一步

检查浏览器缓存,是否有对应的IP地址,有,直接结束过程.

浏览器的缓存也是有限制的,缓存大小有限制,时间也有限制,被缓存的时间由TTL属性来设置.过长过短都不好.

过长,可能网站更新之后,用户无法解析变化后的IP地址

过短,每次访问都得重新解析域名

第二步

浏览器缓存没有,检查操作系统缓存中的hosts文件,这里有可能就会发生域名劫持的问题


从第三步到之后再图中体现

image-20230614202459178

第三步

前两步都不行,操作系统会把这个域名发到LDNS(本地域名服务器),LDNS也就是我们自己定义的DNS服务器

LDNS是主要域名解析工作的大头

第四步

LDNS直接给Root Server域名服务器

第五步

根域名服务器返回本地域名服务器一个主域名服务器(gTLD Server)

gTLD是国际顶级域名服务器,如.com .cn .org

第六步

本地域名服务器 -> gTLD发请求

第七步

gTLD返回Name Server服务器,这个Name Server一般是运营商提供的服务器

第八步

Name Server 一般根据域名返回一个ip记录,还有一个TTL返回给DNS Server域名服务器

第九步

LDNS 缓存IP和域名对应关系,缓存时间由TTL决定

第十步

用户接受结果,并且再本地缓存写入

清除缓存

Windows

ipconfig /flushdns	

几种域名解析方式

A记录,MX记录,CNAME记录,NS记录,TXT记录

A记录

Address ,指定域名对应的IP地址,A记录可以指定多个域名对应一个IP地址,但是不能一个域名多个ip地址

MX记录

Mail Exchange,将某个域名下的邮件服务器,指向自己的Mail Server

CName记录

Canonical Name别名解析,为一个域名设置多几个别名

NS记录

为某个域名指定DNS解析服务器

TXT记录

为某个域名设置说明

CDN工作机制

内容分布网络(content delivery network),目的是再现有的Internet增加一层新的网络架构,将网站的内容发布到离用户最近的网络边缘

提高用户响应速度,有别于镜像

CDN = 镜像 + 缓存 + 整体负载均衡

目前CDN都以缓存静态资源为主,用户在主站请求到动态内容,再从cdn上下载静态资源

通常CDN的目标

可扩展性 性能可扩展性:应对大量的新增的数据,用户,事务 成本可扩展性:低运营成本 提供动态的服务能力和高质量分发

安全性: 减少ddos

可靠性,响应,执行,服务可行性,处理可能发生的故障,提升用户体验

CDN架构

image-20230614214758347

如图,一个用户访问某个静态文件,这个静态文件的域名加入是cdn.taobao.com,

首先向Local DNS 服务器发请求,通过迭代解析后货到这个域名的注册服务器去解析,一般每个公司都会有一个DNS解析服务器.

这时这个DNS解析服务器通常会把它重新CNAME解析到另一个域名,而这个域名最终会指向CDN全局中的DNS负载均衡服务器

再由这个GTM来分配哪个地方的访问用户,返回给力这个访问用户最近的CDN节点

拿到DNS解析结构,用户就直接去这个CDN节点访问这个静态文件,如果文件不存在,就会到源站去获取这个文件,最后再返回给用户

负载均衡

负载均衡对工作任务进行平衡,将任务分到多个操作单元上执行

通常有三种负载均衡架构,分别是链路负载均衡,集群负载均衡,操作系统负载均衡

负载均衡是由DNS的解析来完成的,用户最终访问哪个Web Server是由DNS Server来控制的

链路负载均衡

通过DNS解析成不同的ip,然后用户根据这个ip去访问不同的目标服务器

image-20230614215901348

优点,就是快,直接访问目标服务器,不经过其他代理服务器

缺点,DNS本地和Local DNS Server都有缓存,一旦有一个Web Server挂掉,用户那边域名没有及时更新,后果严重

集群负载均衡

硬件负载均衡和软件负载均衡


硬件就是由一台专门的设备转发请求

image-20230614220447987

设备很贵,一般公司用不起,还有就是当访问量陡然增加超出服务极限时,无法动态扩容


软件

image-20230614220702848

上面两台LVS,使用四层负载均衡,也就是再网络层利用ip地址进行地址转发

下面四台HAProxy进行七层负载,也就是根据用户的HTTP请求头来进行负载均衡,如根据URL来请求转发到特定机器或者根据用户Cookie信息访问指定机器

操作系统负载均衡

备很贵,一般公司用不起,还有就是当访问量陡然增加超出服务极限时,无法动态扩容


软件

[外链图片转存中…(img-esYy7cpF-1686896116304)]

上面两台LVS,使用四层负载均衡,也就是再网络层利用ip地址进行地址转发

下面四台HAProxy进行七层负载,也就是根据用户的HTTP请求头来进行负载均衡,如根据URL来请求转发到特定机器或者根据用户Cookie信息访问指定机器

操作系统负载均衡

利用软中断,或硬件中的中断来达到负载均衡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

憨憨小江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值