我的问题是:有时浏览器过度缓存了一些资源,即使我已经修改过它们.但是在F5之后,一切都很好.
我整个下午都研究过这个案子.现在我完全理解"Last-Modified"或"Cache-Control"的观点.我知道如何解决我的问题(只是.js?版本或显式max-age = xxxx).但问题仍然没有解决:浏览器如何在没有 "Cache-Control"的情况下处理响应头,如下所示:
Content-Length: 49675
Content-Type: text/html
Last-Modified: Thu, 27 Dec 2012 03:03:50 GMT
Accept-Ranges: bytes
Etag: "0af7fcbdee3cd1:972"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Thu, 24 Jan 2013 07:46:16 GMT
Run Code Online (Sandbox Code Playgroud)
当他们"进入酒吧"时,他们会清楚地缓存它们

13.2.2启发式过期
由于源服务器并不总是提供明确的到期时间,因此HTTP缓存通常会分配启发式到期时间,采用使用其他标头值(例如Last-Modified时间)的算法来估计合理的到期时间.HTTP/1.1规范没有提供特定的算法,但确实对其结果施加了最坏情况的约束.由于启发式到期时间可能会影响语义透明度,因此应谨慎使用,我们鼓励源服务器尽可能提供明确的到期时间. HTTP/1.1 RFC 2616
浏览器使用什么算法来估算合理的到期时间?
理想的答案将涵盖所有主要浏览器,并提供源代码或官方博客文章的证据.
safari firefox internet-explorer google-chrome browser-cache
我在网上找到了这个服务器并对其进行了一些编辑。这是代码:
from http.server import BaseHTTPRequestHandler, HTTPServer
from xml.dom import minidom
import os
class MyHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.data_string = self.rfile.read(int(self.headers['Content-Length']))
self.send_response(200)
self.end_headers()
valore = str(self.data_string)[2:-1]
response = ["",""]
response[0],response[1] = processData(valore)
if response[0] == 1:
sep = ""
message = ""
for res in response[1]:
message += res
response = sep.join(message)
self.wfile.write(bytes(message, "utf-8"))
def do_GET(self):
# Send response status code
self.send_response(200)
# Send headers
if self.path.endswith("html"):
self.send_header('Content-type', 'text/html')
self.end_headers()
elif self.path.endswith("css"):
self.send_header('Content-type', 'text/css')
self.end_headers()
elif self.path.endswith("js"):
self.send_header('Content-type', 'application/javascript')
self.end_headers()
elif self.path.endswith(".ico"): …Run Code Online (Sandbox Code Playgroud)