Web 浏览器和应用程序服务器之间可能存在多个缓存:客户端的浏览器缓存,中间缓存,内容交付网络(CDN)以及位于应用程序服务器前面的负载平衡器或反向代理。...当上游服务器关闭()时提供缓存内容 Nginx 内容缓存的一个强大功能是,Nginx 可以配置为在无法从原始服务器获取新内容时从缓存中提供已缓存的内容。...Nginx 在使用 GET 条件请求时,从源服务器刷新内容。...指令 updating 参数 proxy_cache_use_stale 与启用 proxy_cache_background_update 指令相结合,指示当客户端请求已过期或正在从原始服务器更新的项目时...Nginx 如何缓存 POST 请求 使用 proxy_cache_methods 指令: proxy_cache_methods GET HEAD POST; 此示例启用了POST请求的缓存。
机密资源禁用缓存 缓存是优化客户端-服务端架构性能中有效的技术,HTTP 也不例外,同样广泛利用了缓存技术。但是,在缓存的资源是保密的情况下,缓存可能导致漏洞,所以必须避免。...IETF RFC 7234 中定义了 HTTP 缓存,指定 HTTP 客户端(浏览器以及网络代理)的默认行为:除非另行指定,否则始终缓存对 HTTP GET 请求的响应。...当你准备返回敏感信息并希望禁用 HTTP 客户端的缓存时,有三个响应头可以返回: Cache-Control 从 HTTP 1.1 引入的此响应头可能包含一个或多个指令,每个指令带有特定的缓存语义,指示...MIME 嗅探漏洞使攻击者可以注入恶意资源,例如恶意脚本,伪装成一个无害的资源,例如一张图片。通过 MIME 嗅探,浏览器将忽略声明的图像内容类型,它不会渲染图片,而是执行恶意脚本。...此响应头在 2008 年引入 IE8,目前大多数主流浏览器都支持(Safari 是唯一不支持的主流浏览器),它指示浏览器在处理获取的资源时不使用嗅探。
GET方式,是把参数按键值对通过QueryString的方式放在URL尾部,比如: http://www.example.com/test.html?...翻译过来就是告诉我们,提交数据时需要通过表单enctype属性(规定在发送到服务器之前应该如何对表单数据进行编码)根据content type进行编码。并且,如果是GET,用”?”...各个消息中的指令含义如下:Public指示响应可被任何缓存区缓存;Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。...Allow :枚举资源所支持的 HTTP 方法的集合(如GET、POST等)。 Content-Type:实体头用于向接收方指示实体的介质类型。...MIME嗅探 在缺失 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行MIME嗅探。每一个浏览器在不同的情况下会执行不同的操作。
HTTP 缓存简介 谈起 HTTP 缓存你首先想到的一定是磁盘缓存,以及 304 状态码。 这是浏览器处理缓存的两种情况: 浏览器询问服务器缓存是否有效,服务器返回 304 指示浏览器使用缓存。...资源仍然处于有效期时,浏览器会直接使用磁盘缓存(在刷新时稍有不同)。...按下刷新按钮或快捷键(在 MacOS 中是 Cmd+R)会触发浏览器的“正常重新加载”(normal reload), 此时浏览器会执行一次 Conditional GET。...Cache-Control 等缓存头字段会被忽略,并且带If-None-Match, If-Modified-Since等头字段。 此时服务器总会收到一次 HTTP GET 请求。...在 Chrome 中强制刷新,浏览器还会带如下请求头: Cache-Control: no-cache Pragma: no-cache 如何让缓存的静态文件失效 一般我们在页面上引用很多js或者css
这使用CORS标头来处理特权,从而在客户端和服务器之间执行简单的交换:让我们看看在这种情况下浏览器将发送给服务器什么,并让我们看看服务器如何响应: GET /resources/public-data...浏览器根据上面的JavaScript代码段所使用的请求参数确定是否需要发送此请求,以便服务器可以响应是否可以使用实际请求参数发送请求。...Access-Control-Max-Age: 该delta-seconds参数表示结果可以缓存的秒数。...请注意,简单的GET请求不会被预先处理,因此,如果对具有凭据的资源进行请求,则如果此标头未随资源一起返回,则浏览器将忽略该响应,并且该响应不会返回到Web内容。...访问控制允许标题部分 所述Access-Control-Allow-Headers报头在响应用于一个预检请求,以指示在进行实际请求时HTTP标头都可以使用。
Simulate Browser Cache 指示Vuser模拟带有缓存的浏览器(默认开启). 即使你不开启这个选项,每个资源也只为每个页面下载一次,即使每个页面出现多次。...开启后,自动缓存这些html内容 默认开启 注意: 开启后,进行多次脚本迭代时,非首次迭代,lr会从模拟浏览器从缓存中读取被请求资源,而不发送对应资源的请求,每次可能只是请求一些静态的HTML页面...指示浏览器检查指定URL的最新版本而不是检查那些存储在缓存中的URL。当你开启这个选项,VuGent为Http头添加"If-modified-since" 属性。...答案是从本地缓存中读取 Download non-HTML resources 回放期间指示Vusers在访问Web页面时下载“非HTML资源”。 如何理解这里的“非HTML资源”?...不勾选复选框来禁用该选项,允许用户使用存储在浏览器缓存中的信息,模拟最近访问页面的用户。
成功的含义取决于HTTP方法: GET:资源已被提取并在消息正文中传输。 HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。...303 See Other 对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。...2、请求参数有误。 401 Unauthorized 当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。...412 Precondition Failed 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。...这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。
然而,Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。...但是Cache-Control可能被某些缓存和浏览器忽略。可以通过将Expires HTTP版本1.0标头字段值设置为早于响应时间的时间来进行模拟。... (5)no-cache:请注意,no-cache不会指示浏览器或代理是否要缓存内容。...因此,发送无缓存值指示浏览器或代理仅仅基于缓存内容的“新鲜度标准”不使用缓存内容。防止旧内容在未经验证的情况下向用户显示的另一种常见方法是Cache-Control:max-age = 0。...不应缓存资源的请求并不保证它不会写入磁盘。特别是,HTTP / 1.1定义区分了历史存储和缓存。如果用户导航回上一页,浏览器仍可能会显示已存储在历史记录存储中的磁盘上的页面。根据规范,这是正确的行为。
由于链路漫长,网络时延不可控,浏览器使用 HTTP 获取资源的成本较高。所以,非常有必要把数据缓存起来,下次再请求的时候尽可能地复用。...不缓存过期资源 不缓存过期资源即浏览器和代理不会缓存过期资源,客户端发起的请求会直接到达服务器,可以使用 no-cache 标头代表不缓存过期资源。 ?...这里需要注意一下,过期的资源并不会被回收或忽略,当高速缓存接收到过期资源时,它会使用 If-None-Match 转发此请求,以检查它是否仍然有效。...让我们看看在这种情况下浏览器将发送到服务器的内容,并让我们看看服务器如何响应: GET /resources/public-data/ HTTP/1.1 Host: bar.other User-Agent...对于 安全 的方法,像是 GET、用于请求文档的资源,仅当条件请求的条件满足时发回文档资源,所以,这种方式可以节约带宽。
常见状态码定义,以及在 RFC 7231 中的协议定义参考如何选择合适的状态码,这里仅介绍了 GET/POST/HEAD 三个最常用的状态码定义参考。...即第一行写什么怎么写、第二行写什么怎么写...undefined路由:资源标识(URI)如何确定?通过什么方式获取到想要的内容?是直接从本地缓存获取?还是通过代理(Proxy)获取?还是直接请求?...另外服务端通常会把302请求当做是303进行响应,对于Location字段发起GET请求。(SEO优化)只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。...如果使用强缓存校验器,则响应不能包含实体标头,如果304响应没有指示条件情况下则进行重复请求,如果304响应包含缓存条目,则同样需要按照缓存条目更新到本地。...如果使用强缓存校验器,则响应不能包含实体标头,如果304响应没用指示条件情况下则进行重复请求,如果304响应包含缓存条目,则同样需要按照缓存条目更新到本地。416 请求的范围不满足。
通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。...它不缓存响应Cache-Control设置为Private,No-Cache或No-Store或Set-Cookie在响应头。NGINX只缓存GET和HEAD客户端请求。...当缓存大小达到限制时,称为缓存管理器的进程将删除最近最少用于将缓存大小恢复到限制之下的文件; inactive:在inactive时间内没有被访问的缓存会被淘汰掉,默认是10分钟; use_temp_path...:加载器只在nginx启动后运行一次,把缓存内容的元数据信息加载到内存空间,如果一次性加载全部缓存信息,会大量消耗资源,使nginx在启动后的几分钟里变慢,为避免此问题,有3种加载策略: loader_threshold...通常在多个客户端请求缓存未命中时,只有第一个请求可以发向原服务器,其他请求要等待第一个响应返回或者超时后,使用缓存响应客户端。该参数可以合并回源请求,减轻峰值流量下的压力。
3、URL是网络上用来描述信息资源文件的字符串,用在客户程序和服务器上,定位客户端连接服务器所需要的信息,它不仅定位了这个信息资源,而且定义了如何找到这个资源。...name1=value1&name2=value2 特点: 1、GET请求能够被缓存 2、GET请求会保存在浏览器的浏览记录中 3、GET请求有长度限制 4、GET请求主要用以获取数据。...请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached各个消息中的指令含义如下: no-cache:指示请求或响应消息不能缓存...only-if-cached:只有当缓存中有副本存在时,客户端才会获得一份副 Public:指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户。...2、使用URL回写来实现URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。
策略 Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。...不过Expires 是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略。...• Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。 ...• Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。...• If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match(Etag的值)
二、HTTP 请求 (Request) HTTP 请求由几个关键部分组成,共同决定了服务器如何处理请求: 请求方法 (Method): 指示要执行的操作类型。...以下是常用的 HTTP 方法以及它们在增删改查中的应用: GET: 用于查询资源。它应该只用于检索数据,不应有任何副作用。请求参数通常附加在 URL 中。例如:GET /users?...例如:DELETE /users/1 (删除 ID 为 1 的用户) HEAD: 类似于 GET,但只返回响应头,不返回响应体。用于检查资源是否存在或获取元数据。...请求头 (Headers): 包含额外的元数据,例如客户端信息、可接受的编码格式、缓存控制等。一些常见的请求头包括: User-Agent: 标识客户端(例如浏览器)的类型和版本。...版本不支持等 状态码 (Status Code): 指示请求的结果。
当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。...浏览器可能根据响应的格式以及浏览器自身能力,自动作出最合适的选择。当然,RFC 2616规范并没有规定这样的自动选择该如何进行。...注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用 GET 方式访问在 Location 中规定的 URI,...这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。...这类服务器使用固定长度的缓冲读取或操作请求的 URI,当 GET 后的参数超过某个数值后,可能会产生缓冲区溢出,导致任意代码被执行[1]。没有此类漏洞的服务器,应当返回414状态码。
浏览器可能根据响应的格式以及浏览器自身能力,自动作出最合适的选择。当然,RFC 2616规范并没有规定这样的自动选择该如何进行。 ...注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用 GET 方式访问在 Location 中规定的 URI,...412 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。...这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。...这类服务器使用固定长度的缓冲读取或操作请求的 URI,当 GET 后的参数超过某个数值后,可能会产生缓冲区溢出,导致任意代码被执行[1]。没有此类漏洞的服务器,应当返回414状态码。
那么如何重复利用之前获取的资源而不用反复请求呢?答案是HTTP缓存,这是性能优化的一个重要方面。 接下来在响应里设置响应头 Cache-Control: max-age=30 刷新两次首页 ?...即: 设置这个响应头之后,浏览器请求时发现是相同的URL,浏览器直接从内存里返回已经缓存的main.js,没有向服务器发出请求 ? 问题 为什么首页不设置Cache-Control呢?...浏览器请求时发现是相同的URL才使用缓存,那么可以设置查询参数,例如第二个版本的js可以写浏览器获得和处理内容的时间,还会增加访问者的流量费用。因此,缓存并重复利用之前获取的资源的能力成为性能优化的一个关键方面。...好在每个浏览器都自带了 HTTP 缓存实现功能。您只需要确保每个服务器响应都提供正确的 HTTP 标头指令,以指示浏览器何时可以缓存响应以及可以缓存多久。
浏览器可能根据响应的格式以及浏览器自身能力,自动作出最合适的选择。当然,RFC 2616规范并没有规定这样的自动选择该如何进行。 ...注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用 GET 方式访问在 Location 中规定的 URI,...这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。...: 缓存相关的头 其中三种禁止浏览器缓存的头字段: Expires:告诉浏览器把回送的资源缓存多长时间 -1或0则是不缓存 Cache-Control:no-cache..." 在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。
,非负) Age: 12 Allow 对某网络资源的有效的请求行为,不允许则返回405 Allow: GET, HEAD Cache-Control 告诉所有的缓存机制是否可以缓存及哪种类型 Cache-Control...Proxy-Authenticate: Basic refresh 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持) Refresh: 5; url=http://...各个消息中的指令含义如 下: Public指示响应可被任何缓存区缓存。 Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。...no-cache指示请求或响应消息不能缓存 no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。...Last-modified实体头 请求的资源的最后被修改的时间,这个字段的作用就是用于缓存服务器机制,用于判断缓存服务器中的资源是否过期,是否需要从源服务器更新