浏览器缓存

网络协议 18 - CDN

旧城冷巷雨未停 提交于 2019-11-28 19:24:55
到现在为止,我们基本上已经了解了网络协议中的大部分常用协议,对于整个 HTTP 请求流程也较为熟悉了。从无到有后,我们就要考虑如何优化“有”这个过程,也就是我们常见的 请求优化 。而现在的技术栈中,CDN 是最常用的一种方式。     在了解 CDN 前,我们可以先了解下现代社会的物流配置。     例如我们去电商网站下单买东西,这个东西一定要从电商总部的中心仓库送过来吗?在电商刚兴起的时候,所有的配送都是从中心仓库发货,所以买家可能要很久才能收到货。但是后来电商网站的物流系统学聪明了,他们在全国各地建立了很多仓库,而不是只有总部的中心仓库才可以发货。     电商网站根据统计大概知道,北京、上海、广州、深圳、杭州等地,每天能够卖出去多少书籍、纸巾、包、电器等存放期较长的商品,就将这些商品分布存放在各地仓库中,客户一下单,就从临近的仓库发货,大大减少了运输时间,提高了用户体验。     同样的,互联网也借鉴了 “就近配送” 这个思路。 CDN 就近配送     全球有那么多的数据中心,无论在哪里上网,临近不远的地方基本上都有数据中心。可以在每个数据中心里部署几台机器,形成一个缓存集群来缓存部分热数据,这样用户访问数据的是,就可以就近访问了。     这些分布在各个地方的各个数据中心的节点,我们一般称为 边缘节点 。     由于边缘节点数目比较多,但是每个集群规模比较小

http 初识

China☆狼群 提交于 2019-11-28 19:15:45
http协议基础 物理层主要作用是定义物理设备如何传输数据 数据链路层在通信的实体间建立数据链路连接 网络层为数据在结点之间传输创建逻辑链路 传输层:向用户提供可靠的端到端服务 传输层向高层屏蔽了下层数据通信的细节 应用层:为应用软件提供了很多服务 构建于TCP协议之上,屏蔽网络传输相关细节 HTTP/0.9 GET请求、服务器发送完毕,就关闭TCP连接 HTTP/1.0 增加了很多命令,增加status code和header,缓存等 HTTP/1.1 持久连接、pipeline、增加host和其他一些命令 HTTP/2 所有数据以二进制传输,同一个连接里面发送多个请求不再需要按照顺序来,头信息压缩以及推送等提高效率的功能 HTTP三次握手 http不存在连接,只存在连接和响应的概念。 TCP 三次握手 URI、URL、URN URI Uniform Resource Identifier/统一资源标志符 用来标识唯一互联网上的信息资源 包括URL和URN URL Uniform Resource Locator/统一资源定位器 http(协议)://user:pass@host.com:80/path?query=string#hash 此类格式的都叫做URL,比如ftp协议 URN 永久统一资源定位符 在资源移动之后还能被找到 目前还没有非常成熟的使用方案 HTTP报文

Dojo 中间件进阶

喜夏-厌秋 提交于 2019-11-28 18:58:56
翻译自: https://github.com/dojo/framework/blob/master/docs/en/middleware/supplemental.md 中间件基本原理 Dojo 提供了渲染中间件的概念,以帮助衔接响应式、函数部件与底层的命令式 DOM 结构。 如果部件能够访问 DOM 信息,某些 web 应用程序需求就更容易实现。常见的例子有: 响应式 UI 不与特定的设备类型绑定,而是根据可用的页面区域改变元素的大小。 仅当某些元素在用户可视区域可见时,才延迟加载需要的数据——例如无限滚动列表。 引导元素获取焦点,并在用户变更焦点后进行响应。 但是,中间件并非必须与 DOM 绑定;这个概念还适合部件的渲染生命周期等更常用的情况。此类需求的常见示例如下: 如果获取数据的开销大,则在渲染间缓存数据 根据特定条件暂停和恢复部件的渲染;在所需信息不可用时,避免无用的渲染 将函数部件标记为无效,以便 Dojo 可以重新渲染部件 一个中间件组件一般公开的某些功能与部件渲染的 DOM 元素有关;大多是部件的根节点。中间件系统为部件在浏览器中的展示和交互提供了更高级的控制,并且允许部件以一致的方式使用几个新兴的 Web 标准。 如果部件在其底层的 DOM 元素存在之前访问中间件的某些属性,则返回合理的默认值。还有一些中间件可以暂停部件的渲染,直到满足某些条件。使用这些中间件

JavaWeb 文件的上传、下载

烂漫一生 提交于 2019-11-28 18:57:42
文件上传 表单 <form action="HandlerServlet" method="post" enctype="multipart/form-data"> 请选择要上传的文件:<input type="file" name="uploadFile" accept="*/*" multiple /><br /> <button type="submit">上传</button></form> 指定<form>的method="post", enctype="multipart/form-data"。 accept指定文件类型,有多种类型时逗号分隔,multiple指定可以选择多个文件。 传统处理方式 ServletInputStream inputStream = request.getInputStream(); 选择的文件是放在请求消息体中的。获取的输入流中包含了上传的所有文件,如果单个上传还好处理,如果同时上传多个,不好从中分离出单个文件的数据,且自己写代码获取文件名很麻烦。 Commons-FileUpload Commons-FileUpload是Apache的开源组件,提供了一套处理上传文件的API。 使用FileUpload需要2个jar包: commons-fileupload.jar commons-io.jar 这是FileUpload依赖的IO包

Asp.Net MVC 的19个管道事件

那年仲夏 提交于 2019-11-28 18:55:58
  httpApplication调用ProcessRequest方法,内部执行19个管道事件,如下 BeginRequest 开始处理请求 AuthenticateRequest 授权验证请求开始,获取用户授权信息 PostAuthenticateRequest 获取成功 AunthorizeRequest  授权,一般用来检查用户是否获得权限 PostAuthorizeRequest 获得授权 ResolveRequestCache 获取页面缓存结果(如果没有则执行) PostResolveRequestCache 已缓存 PostMapRequestHandler 创建页面对象 AcquireRequestState 获取Session --先判断当前页面是否实现了IRequiresSessionState接口,如果实现了,就从浏览器发来的请求报文中获取SessionId,并到服务器的Session池中获得对应的Session对象,最后赋值给HttpContext的Session属性。 PostAcquireRequestState 获得Session PreRequestHandlerExecute 准备执行页面对象,执行页面的ProcessRequest方法(1.aspx,1.ashx)。请求如果是1.aspx就会执行页面的声明周期

浏览器磁盘缓存大小的设置

。_饼干妹妹 提交于 2019-11-28 17:38:30
最近各个浏览器变得越来越鸡贼了? 只给你选项清除,却不给选项设置磁盘缓存大小。 google 了之后,整理了一下。 1) IE11 还是很老实的,在选项里一找就找到了。 2)Chrome 需要在启动快捷方式里设置启动参数 。 例子: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disk-cache-size=52428800 3)Firefox需要在about:config里设置,注意单位是KB。 TMD找半天都没有文档说明这单位到底是KB 还是 BYTE browser.cache.disk.capacity 4) Opera "C:\Program Files (x86)\Opera\launcher.exe" --disk-cache-size=30485760 参考: https://support.mozilla.org/en-US/questions/1219833 https://windowsloop.com/limit-chrome-cache-size/ 来源: https://www.cnblogs.com/johnsonshu/p/10449041.html

关于缓存的几点问题

百般思念 提交于 2019-11-28 16:38:08
一、什么是缓存 1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问 2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache 二、缓存的分类 1、基于web应用的系 2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存 操作系统磁盘缓存->减少磁盘机械操作 数据库缓存->减少文件系统I/O 应用程序缓存->减少对数据库的查询 Web服务器缓存->减少应用服务器请求 客户端浏览器缓存->减少对网站的访问 三、操作系统缓存 1、文件系统提供的Disk Cache:操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理 2、当应用程序通过文件系统访问磁盘文件的时候,操作系统从Disk Cache当中读取文件内容,加速了文件读取速度 3、Disk Cache由操作系统来自动管理,一般不用人工干预,但应当保证物理内存充足,以便于操作系统可以使用尽量多的内存充当Disk Cache,加速文件读取速度 4、特殊的应用程序对文件系统Disk Cache有很高的要求,会绕开文件系统Disk Cache,直接访问磁盘分区,自己实现Disk 5、Cache策略 Oracle的raw device(裸设备) – 直接抛弃文件系统 MySQL的InnoDB: innodb_flush

高并发和大流量解决方案

寵の児 提交于 2019-11-28 16:34:02
1.web资源防盗链 盗链概念 盗链是指在自己的页面上展示一些并不在自己服务器的内容 防盗链工作原理 通过referer或者签名,网站可以检测目标网页访问的来源页,一旦检测到来源页不是本站即进行阻止或者返回指定页面 解决方案1 Referer nginx 模块ngx_http_referer_module用于阻挡来源非法的域名请求 ··· shell location ~ . .(gif|jpg|png|swf|bmp|jpeg)$ { valid_referers none blocked bobo.com if ($invalid_referer) { return 403 } } 缺点:可以进行伪装referer ### 解决方案2 使用第三方HttpAccessKeyModule模块实现NGINX防盗链 shell location ~ . .(gif|jpg|png|swf|bmp|jpeg)$ { accesskey on; accesskey_hashmethod md5; accesskey_arg sign; accesskey_signature "bobo$remote_addr"; } 缺点:要在每个资源后面加个签名 ## 2.减少http请求次数 为什么要减少http请求次数 HTTPl连接产生的开销 域名解析->TCP连接->发送请求->等待->下载资源

Http缓存策略

假装没事ソ 提交于 2019-11-28 15:33:17
浏览器一般缓存图片、 CSS 、 JS 等静态文件,因为这些文件的更新频率相对来说比较低,合理利用浏览器的缓存对网站的性能提升有很大帮助。 HTTP 缓存分为两部分,分别是本地缓存和缓存协商,当本地缓存不生效时会启用缓存协商。 HTTP 缓存主要由 HTTP 协议的头(Header)信息来制定。 本地缓存 本地缓存是指浏览器请求资源时命中了浏览器本地的缓存资源,浏览器并不会发送真正的请求给服务器了。它的执行过程是: 第一次浏览器发送请求给服务器时,此时浏览器还没有本地缓存副本,服务器返回资源给浏览器,响应码是200 OK,浏览器收到资源后,把资源和对应的响应头一起缓存下来。 第二次浏览器准备发送请求给服务器时候,浏览器会先检查上一次服务端返回的响应头信息中的Cache-Control,它的值是一个相对值,单位为秒,表示资源在客户端缓存的最大有效期,过期时间为第一次请求的时间减去Cache-Control的值,过期时间跟当前的请求时间比较,如果本地缓存资源没过期,那么命中缓存,不再请求服务器。 如果没有命中,浏览器就会把请求发送给服务器,进入缓存协商阶段。 与本地缓存相关的头有:Cache-Control、Expires,Cache-Control有多个可选值代表不同的意义,而Expires就是一个日期格式的绝对值。 Cache-Control Cache

秒杀系统优化方案(下)吐血整理

回眸只為那壹抹淺笑 提交于 2019-11-28 13:09:51
接上篇 秒杀系统优化方案(上)吐血整理 3. 深入优化设计 3.1 初始方案问题分析 在前面针对数据库的优化中,由于数据库行级锁存在竞争造成大量的串行阻塞,我们使用了存储过程(或者触发器)等技术绑定操作,整个事务在MySQL端完成,把整个热点执行放在一个过程当中一次性完成,可以屏蔽掉网络延迟时间,减少行级锁持有时间,提高事务并发访问速度。 可是问题时并发的流量实际上都是直接穿透让MYSQL自己去抗,比如说 库存是否卖完 以及 用户是否重复秒杀 都完全是靠 查询数据库 去判断,造成数据库不必要的负担非常大,然而这些都可以放在 缓存做一个标记在服务层进行拦截 ,对于中小规模的并发还可以,但是真正的超高并发,显然这个还不完善。 3.2 优化的方向和思路 方向:将请求尽量拦截在系统上游 传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小【一趟火车其实只有2000张票,200w个人来买,基本没有人能买成功,请求有效率为0】 思路:限流和削峰 限流: 屏蔽掉无用的流量,允许少部分流量流向后端。 削峰: 瞬时大流量峰值容易压垮系统,解决这个问题是重中之重。常用的消峰方法有异步处理、缓存和消息中间件等技术。 异步处理: 秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并发量