我有一个使用 Etags 的 Apache conf:
<VirtualHost *:8080>
ServerName xxx.co
SSLEngine On
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/apache2/xxx.crt
SSLCertificateKeyFile /etc/apache2/xxx.key
SSLCertificateChainFile /etc/apache2/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ca.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
ServerAdmin [email protected] /cdn-cgi/l/email-protection
DocumentRoot /home/ubuntu/xxx-react/build/
Header set Access-Control-Allow-Origin "*"
FileETag MTime Size
</VirtualHost>
我收到来自 Chrome 调试器的请求/响应:
Remote Address:xxx:8080
Request URL:https://xxx.co:8080/app.js
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate
Accept-Language:en,fr-FR;q=0.8,fr;q=0.6,en-US;q=0.4,ms;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Host:xxx.co:8080
If-Modified-Since:Fri, 26 Sep 2014 10:42:18 GMT
If-None-Match:"5a59c6-503f59239d4ce-gzip"
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Response Headersview source
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Encoding:gzip
Content-Type:application/javascript
Date:Fri, 26 Sep 2014 15:49:45 GMT
ETag:"5a59c6-503f59239d4ce-gzip"
Keep-Alive:timeout=5, max=100
Last-Modified:Fri, 26 Sep 2014 10:42:18 GMT
Server:Apache/2.4.6 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
正如我们所看到的,标头中发送的 Etag 与响应中的文件相匹配,所以有人可以解释一下为什么 Apache 返回 200 而不是 304,从而在缓存应该工作时产生缓存未命中吗?
Thanks