当前位置 : 主页 > 网络编程 > JavaScript >

http缓存 信息

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt http缓存1.强制缓存当缓存数据库中所有的请求数据,客户端直接从缓存数据库中获取数据,当缓存数据库中没有请求数据时,客户端才会从服务器端获取数据2.协商缓存又称之
gistfile1.txt
http缓存
	1.强制缓存
		当缓存数据库中所有的请求数据,客户端直接从缓存数据库中获取数据,当缓存数据库中没有请求数据时,客户端才会从服务器端获取数据
	2.协商缓存	
		又称之为对比缓存,客户端从缓存数据库中取到一个缓存数据标识,得到标识请求服务器端是否失效,如果没有失效就返回304(来自缓存),这个时候客户端直接从缓存中获取数据,如果标识失效,服务器端重新返回数据

	两种缓存机制,可以同时存在,强制缓存的优先级高于协商缓存如若缓存命中,则直接使用缓存数据库数据,不在进行缓存协商。
	
	缓存方案:
		在浏览器发送请求的时候 包含 headers和body,缓存信息就存在headers中
 
		Cache-Control: max-age = 3133333 最大缓存使劲
		Connection: keep-alive 		 长连接
		Contant-Encodong: gzip
		Contant-Type: application/javascript
		Date: ''
		ETag 
		Last-Modified 最后提交时间

		强制缓存
			Exprires  是服务器端返回的数据的到期时间,当再次请求的时间小于返回的过期时间,就直接去缓存,这个express是属于http1.0的属性,现在都使用 Cache-Control替代

			Cache-Control:属性
				private 客户端可以缓存
				public 客户端和代理服务器都可以缓存
				max-age = t 缓存的内容在t秒后失效
				no-cache:需要使用协商缓存来验证缓存数据
				no-store:所有内容都不会缓存。

		协商缓存:
			需要进行对比判断是否可以使用缓存,当浏览器第一次请求数据的服务器,会将缓存表示与数据一起响应给客户端,客户端将他们备份至缓存,再次请求的时候,客户端会将缓存的标识发送给服务器,服务器判断标识,如果没有失效,返回304,浏览器拿到状态码直接使用缓存数据

			方式:
				Last-Modified:服务器在响应请求时,会告诉浏览器资源的最后修改时间。
				if-Modified-Since:浏览器再次请求服务器的时候,请求头会包含此字段,后面跟着在缓存中获得的最后修改时间。服务端收到此请求头发现有if-Modified-Since,则与被请求资源的最后修改时间进行对比,如果一致则返回304和响应报文头,浏览器只需要从缓存中获取信息即可。从字面上看,就是说:从某个时间节点算起,是否文件被修改了

				如果真的被修改:那么开始传输响应一个整体,服务器返回:200 OK
				如果没有被修改:那么只需传输响应header,服务器返回:304 Not Modified

				if-Unmodified-Since:从字面上看, 就是说: 从某个时间点算起, 是否文件没有被修改

				如果没有被修改:则开始`继续'传送文件: 服务器返回: 200 OK
				如果文件被修改:则不传输,服务器返回: 412 Precondition failed (预处理错误)

				EtagEtag:服务器响应请求时,通过此字段告诉浏览器当前资源在服务器生成的唯一标识(生成规则由服务器决定)
If-None-Match:再次请求服务器时,浏览器的请求报文头部会包含此字段,后面的值为在缓存中获取的标识。服务器接收到次报文后发现If-None-Match则与被请求资源的唯一标识进行对比。

不同,说明资源被改动过,则响应整个资源内容,返回状态码200。
相同,说明资源无心修改,则响应header,浏览器直接从缓存中获取数据信息。返回状态码304.

但是实际应用中由于Etag的计算是使用算法来得出的,而算法会占用服务端计算的资源,所有服务端的资源都是宝贵的,所以就很少使用Etag了。
网友评论