浏览器缓存

网络知识入门,探讨DNS服务器在网页请求中的作用(二)

北城以北 提交于 2020-01-25 19:56:45
上一篇文章讲到网络请求是基于http协议传输的,消息请求包含了“对什么”和“做什么操作”,于是一个网页请求就这么发送出去了。但是在发送消息之前,我们还需要对域名进行解析,得到ip地址之后才可以发送请求,本文就来探讨一下网页请求中如何将域解析为ip地址。 [网络知识入门,探索一次网页请求的旅程(一)] https://blog.csdn.net/ck784101777/article/details/103729743 一、向DNS服务器查询Web服务器的IP地址 生成HTTP消息之后,接下来我们需要委托操作系统将消息发送给Web服务器。尽管浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能(浏览器本身也是借用本地操作系统来发送请求),因此这一功能需要委托操作系统来实现。在进行这一操作时,我们还有一个工作需要完成,那就是查询网址中服务器域名对应的IP地址。 在委托操作系统发送消息时,必须要提供的不是通信对象的域名,而是它的IP地址 。因此,在生成HTTP消息之后,下一个步骤就是根据域名查询IP地址。在讲解这一操作之前,让我们先来简单了解一下IP地址。 1.TCP/IP网络 互联网和公司内部的局域网都是基于TCP/IP的思路来设计的,所以我们先来了解TCP/IP的基本思路。TCP/IP的结构如图所示,就是由一些小的子网,通过路由器连接起来组成一个大的网络

js清除浏览器缓存的几种方法

☆樱花仙子☆ 提交于 2020-01-25 05:49:53
关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能。但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据。像股票类网站实时更新等,这样的网站是不要缓存的,像有的网站很少更新,有缓存还是比较好的。今天主要介绍清除缓存的几种方法。 清理网站缓存的几种方法 meta方法 //不缓存 <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="0"> 清理form表单的临时缓存 <body onLoad="javascript:document.yourFormName.reset()"> 其实form表单的缓存对于我们书写还是有帮助的,一般情况不建议清理,但是有时候为了安全问题等,需要清理一下! jquery ajax清除浏览器缓存 方式一 :用ajax请求服务器最新文件,并加上请求头If-Modified-Since和Cache-Control,如下: $.ajax({ url:'www.haorooms.com', dataType:'json', data:{},

HTML5 Application Cache

a 夏天 提交于 2020-01-24 21:50:20
HTML5引入了应用程序缓存(application cache),这意味着web应用可进行缓存,并可在没有因特网连接时进行访问。 站点离线存储的容量限制是5M 优势: 应用程序缓存为应用带来了三个优势: 离线浏览:用户可在不介入网络时访问使用; 速度提升:已缓存资源加载得更快; 减少对服务器的请求:浏览器将只从服务器下载更新过或更改的资源; 缺点: 服务器资源更新之后,会显示滞后,需要多刷新一次页面。 首次载入页面时,浏览器会判断是否引入了manifest,若检测到引入,则下载并按文件规则缓存资源;再次载入页面时,便会根据manifest中规定的缓存文件使用本地缓存而不是请求服务器资源;当manifest文件更新时,页面加载已经进行,但是缓存更新尚未完成,便会先使用旧manifest所缓存的文件,同时浏览器会将新的manifest文件里的缓存文件下载下来,若想看到最次你的静态资源需要刷新下页面重新加载一次; 全量加载:当manifest文件更新时,所有的资源都要全部被下载一次,并且其中一个出现异常会导致整个manifest运行异常。 作为H5的新属性,初衷时用来构造离线应用的。缓存网站资源的话原本浏览器的缓存机制已经很好了,没必要再使用manifest做缓存。实际上因为使用反响并不好,W3C正在废弃manifest。 原理: 是基于一个新建的.appcache文件的缓存机制

redis 缓存设计和性能优化

China☆狼群 提交于 2020-01-22 17:31:30
请求缓存: https://blog.csdn.net/xiaowangku/article/details/90409224 缓存的受益与成本 通过缓存加速读写速度:CPU L1/L2/L3 Cache、Linux page Cache加速硬盘读写、浏览器缓存、Ehcache缓存数据库结果。 降低后端负载 后端服务器通过前端缓存降低负载:业务端使用Redis降低后端MySQL负载等。 成本 数据不一致:缓存层和数据层有时间窗口不一致,和更新策略有关。 代码维护成本:多了一层缓存逻辑 使用场景 对高消耗的SQL:join结果集/分组统计结果缓存 加速请求响应:利用Redis、Memcache优化IO响应时间 大量写合并为批量写:如计数器先Redis累加再批量写DB 缓存的更新策略: LRU方法,LFU方法FIFO方法: 例如maxmemory-policy。 超时提出: 例如:例如 expire 主动更新:开发控制生命周期: 策略: 一致性 维护成本 LRU/LIRS算法剔除 最差 低 超时剔除 较差 低 主动更新 强 高 缓存在细粒度的控制: 1、从MySQL获取用户信息: select * from user where id={id} 2、设置用户信息缓存: set user:{id} `select * from user where id={id}` 3、缓存粒度:

浏览器中F5和CTRL F5的行为区别及如何强制更新资源

别来无恙 提交于 2020-01-22 12:30:51
一、浏览器中F5和CTRL F5的行为区别    我们直接来看效果,下面是我打开qq网页,分别使用F5和CTRL F5,我们来看区别。 F5: CTRL F5: 区别:   首先直观上的区别是CTRL F5明显比F5加载速度慢了。观察资源加载发现,F5中大部分资源的状态码都是304,也就是重定向,使用了很多缓存资源;而CTRL F5中所有资源状态码都是200,都是重新下载了资源。 1.F5使用缓存,并且只有在资源内容发生变化的时候才会去更新资源 当刷新一个页面的时候,浏览器会尝试使用各种类型的缓存,并且会发送 If-Modified-Since 头到服务器,如果服务器返回 304 Not Modified ,那么浏览器会使用本地的缓存;如果服务器返回 200 OK 和资源内容,那么浏览器会使用返回的资源内容,并把资源内容进行缓存,待下次使用。 注:刷新页面,会让浏览器向服务端发起验证,忽略 max-age 。 2.CTRL-F5 强制更新页面资源的缓存 MSIE会发送 Cache-Control: no-cache 头,Firefox和Chrome除了发送 Cache-Control: no-cache 头之外,还会发送 Pragma: no-cache 头。Opera比较另类,不发送任何和缓存相关的头。 二、如何强制更新资源 1.加上请求头If-Modified

F5和CTRL+F5的区别

六眼飞鱼酱① 提交于 2020-01-22 12:30:11
背景 我司的网站是框架结构的,一个页面里有多个iframe.正因为这个原因,每次当我自信满满的把修改过的JS文件提交到SVN上后,没过多久,某个后台程序员就会来找我说:怎么JS还报错呢,我已经CTRL+F5了啊,你提交对了吗.我只好到他座位上拿起鼠标进行操作:右键->本帧->在新标签中打开新帧->CTRL+F5->切换到原标签->F5.这一番操作之后,终于对了.同样的事情已经发生过很多次了.这也证明了不少程序员同志还是不够了解浏览器的缓存机制. 基础知识 问题的根本原因就是,在火狐里,CTRL+F5清除不了框架页面的缓存.包括框架页面本身和其所有的嵌入元素(.js,.css,.jpg等).所以本文的真正标题是"Firefox中如何才能跳过缓存刷新框架内的页面".首先我要讲一下相关的基础知识. 一.读取缓存 搞WEB开发的经常会说:有缓存,CTRL+F5一下.或者:有缓存,CTRL+SHIFT+DEL清一下.那么你知道浏览器有几种方式来读取缓存文件吗.从是否发送了HTTP请求来区分,我觉的可以分两种: 1.浏览器从服务器返回的过期时间判断得出,该文件还没有过期,所以直接从缓存文件夹读取缓存文件,显示网页,并没有走任何网络连接. 2.浏览器发送HTTP请求,请求头中包含了If-Modified-Since 和 If-None-Match字段.让服务器来判断是否应该读取缓存文件

前端性能毫秒必争方案(二)HTTP缓存

扶醉桌前 提交于 2020-01-22 09:14:12
web最好的体验是不需要与服务器通信 响应消除所有的网络延迟,并避免数据传输的数据开销。 为了实现这一目标,HTTP规范允许服务器返回多个不同的缓存控制指令来控制如何,以及多长时间可以通过浏览器和其他中间缓存缓存单个响应。 0.0.1. 好在每个现代浏览器都自带了 HTTP 缓存实现功能。 您只需要确保每个服务器响应都提供正确的 HTTP 标头指令,以指示浏览器何时可以缓存响应以及可以缓存多久。 0.0.2. 作为开发者,怎么利用HTTP Cache? 浏览器会替我们完成所有工作,它会自动检测之前是否指定了验证令牌,它会将验证令牌追加到发出的请求上,并且它会根据从服务器接收的响应在必要时更新缓存时间戳。 0.0.3. 唯一要做的 就是确保服务器提供必要的 ETag 令牌。检查您的服务器文档中有无必要的配置标志。** 0.0.4. 送上Ngix 实战配置,不玩虚的 # 为JS 文件添加长时间缓存 location ~* \.js$ { add_header "section" "long expire"; # 仅供说明 add_header Cache-Control "max-age=31536000"; } # 或者为JS文件删除ETags location ~* \.js$ { add_header "section" "no etags"; # 仅供说明 etag off;

CDN加速

大兔子大兔子 提交于 2020-01-22 02:58:37
内容分发网络 是一种新型 网络 内容 服务 体系,其基于IP网络而构建,基于内容访问与应用的效率要求、质量要求和内容秩序而提供内容的分发和服务。而从广义的角度,CDN代表了一种基于网络而构建的高质量、高效率、具有鲜明网络秩序的网络应用服务模式。 简单地说,内容分发网络是一个经策略性部署的整体系统,包括 分布式存储 、 负载均衡 、网络请求的重定向和内容管理4个要求,而内容管理和全局的网络 流量管理 是CDN的核心所在。通过用户就近性和 服务器 负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。 总的来说,内容服务基于 缓存服务器 ,也称作 代理缓存 ,它位于网络的边缘,距用户仅有"一跳"之遥。同时, 代理缓存 是内容提供商源 服务器 的一个透明 镜像 。这样的架构使得CDN 服务提供商 能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍 请求响应时间 有任何延迟的。 使用CDN的好处? 1. 不用担心自己网站访客,在任何时间,任何地点,任何网络运营商,都能快速打开 网站 。 2. 各种服务器虚拟主机带宽等采购成本,包括后期运维成本都会大大减少。 3. 给网站直接带来的好处就是: 流量 ,咨询量,客户量,成单量,都会得到大幅度提升。 CDN的价格? 大家提起CDN,都会望而却步,因为CDN太贵,都是大企业才能用得起的贵族式服务

高并发常用解决方案汇总

倾然丶 夕夏残阳落幕 提交于 2020-01-21 05:11:17
1、扩容 扩容思路: u 垂直扩容(纵向扩展):提高系统部件能力 u 水平扩容(横向扩展):增加更多系统成员来实现 数据库扩容: 读操作扩展:memcache、redis、CDN等缓存 写操作扩展:Cassandra、Hbase 2、缓存 (1) 浏览器:页面静态化 (2) 网络转发:nginx反向代理 (3) 应用服务:集群 (4) 数据库:读写分离、分表分库 缓存特性: 命中率:命中数/(命中数+没有命中数) 最大元素(空间) 清空策略:FIFO(先进先出)、LFU(淘汰一定时期内被访问次数最少的)、LRU(淘汰最长时间未被使用的)、过期时间、随机等 一般来说:项目中开发,使用缓存的时候,都是读多写少; 可以使用复制特性扩展读性能 可以使用客户端分片扩展写性能 缓存分类和应用场景 本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache 分布式缓存:Memcache、Redis Guava Cache相当于利用hashmap实现了本地缓存的管理 高并发场景下缓存常见问题 u 缓存一致性 u 缓存并发问题 u 缓存穿透问题 u 缓存的雪崩现象 缓存一致性 雪崩: 执行了增删改操作,此时缓存中并没有key所对应的数据(缓存被清除了),那么可能某一时间点,多个请求同时访问,越过缓存服务器直接访问数据库服务器,造成服务雪崩现象; 解决方案:使用锁机制解决该问题

Django 缓存,中间件,CSRF防护

我的未来我决定 提交于 2020-01-20 21:26:59
目录 文章目录 目录 缓存 什么是缓存? 为什么使用缓存? 使用缓存场景: Django中设置缓存 Django中使用缓存 浏览器中的缓存 强缓存 协商缓存 中间件 Middleware 跨站请求伪造保护 CSRF 缓存 什么是缓存? 缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存 为什么使用缓存? 视图渲染有一定成本,对于低频变动的页面可以考虑使用缓存技术,减少实际渲染次数 案例分析 from django . shortcuts import render def index ( request ) : # 时间复杂度极高的渲染 book_list = Book . objects . all ( ) #-> 此处假设耗时2s return render ( request , 'index.html' , locals ( ) ) 优化思想 given a URL , try finding that page in the cache if the page is in the cache : return the cached page else : generate the page save the generated page in the cache ( for next time