这个问题的简短版本是我们看到典型的CORS错误(x has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.)但是我们绝对发送指定的标头.然而,在n(模式未确定)时间量之后,请求很好(Stml(除了它是html文件中引用的随机1或2资产之外没有真正的模式)请求将突然开始失败.在硬刷新或禁用缓存时,问题已得到解决.
我们想知道缓存在这种情况下如何影响CORS?或者如果问题出在其他地方?
我们看到的是资产在第一时间被正确加载.
这是一个cURL表示浏览器(chrome,未在别处测试)发送到服务器(s3前面的云端):
curl -I 'https://assets-frontend.kalohq.ink/style.allapps.add899080acbbeed5bb6a7301d234b65.css' -H 'Referer: https://lystable.kalohq.ink/projects/2180?edit=true' -H 'Origin: https://lystable.kalohq.ink' -H 'DPR: 2' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gec
Run Code Online (Sandbox Code Playgroud)
响应这个标题的标题如下:
HTTP/1.1 200 OK
Content-Type: text/css
Content-Length: 5632
Connection: keep-alive
Date: Wed, 28 Jun 2017 09:23:04 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Last-Modified: Wed, 28 Jun 2017 09:16:15 …Run Code Online (Sandbox Code Playgroud) 缓存控制标头"no-cache,must-revalidate,private"允许浏览器缓存资源,但强制使用条件请求重新验证.这在FF,Safari和Chrome中可以正常使用.
但是,IE7 + 8不发送条件请求,即请求头中缺少"If-Modified-Since",因此服务器使用HTTP/200而不是HTTP/304进行响应.
以下是完整的服务器响应标头:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Content-type: text/html;charset=utf-8
Content-Length: 10835
Date: Wed, 16 Feb 2011 13:52:26 GMT
Connection: keep-alive
Cache-Control: no-cache, must-revalidate, private
Run Code Online (Sandbox Code Playgroud)
这似乎是一个IE错误,但我没有在网上找到任何相关内容,所以我想知道是否可能缺少或存在另一个标头会让IE表现得很奇怪?
讨论no-cache和max-age 之间的区别:Cache-Control:max-age = 0和no-cache之间有什么区别?
的Cache-ControlHTTP/1.1头部可以指定最大年龄以及所述高速缓存的内容是否可以是公共或私有的,指示中间高速缓存是否能够高速缓存的内容.
例如,Ruby on Rails expires_in()默认使用Cache-Control: private
将其公开的风险是什么?如果它是公共的,哪些额外的地方可以缓存内容 - 例如它是代理服务器吗?
如果网站像Amazon.com,但用户是匿名的,那么可能没有太多的隐私问题怎么办?如果用户登录,可能会出现隐私问题,因为数据通过位置并且数据可见.如果那个位置想要"坏",那么Cache-Control: private无论如何它真的不需要关心.
如果它是一个用户可以登录的网站,但网站只搜索鱼油和维生素等健康产品,等等.在这种情况下,涉及的隐私更少,因为它与Amazon.com不同,在那里有更多种类的产品,例如用户可以真正关心隐私问题的书籍.
话虽如此,有什么额外的优势Cache-Control: public?
我将这些标头由服务器发送到客户端:
Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html
Date:Sun, 27 Nov 2011 11:10:38 GMT
ETag:"12341234"
Set-Cookie:connect.sid=e1u...7o; path=/; expires=Sun, 27 Nov 2011 11:40:38 GMT; httpOnly
Transfer-Encoding:chunked
last-modified:Sat, 26 Nov 2011 21:42:45 GMT
Run Code Online (Sandbox Code Playgroud)
我希望客户端验证文件在服务器上没有更改,如果否则为"304",则发送"200".
Firefox发送:
if-modified-since: Sat, 26 Nov 2011 21:42:45 GMT
if-none-match: "12341234"
Run Code Online (Sandbox Code Playgroud)
为什么Chrome不会在刷新页面时发送相同内容?我正在追踪.Net运行的行为:
context.Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate)
Run Code Online (Sandbox Code Playgroud) Expressjs自动发送etags.我想知道如何生成etag ..它是基于get例程动态生成的内容.或者我是否可以通过生成内容(动态内容 - 来自DB)并将etag作为相同的内容进行过程来对其进行维护.
可能是一个中间件,它只是检查它是否是有效的会话ID并传回客户端提供的相同etag,或者可能是基于url +会话ID ...这将是唯一的方式.并结束请求,而不是通过整个数据库调用和所有这些东西.在这种情况下,我需要知道客户端正在拨打304电话.
我可以使用expires标签.但是当会话结束时.如果有人打开网址,它不应该允许.所以我认为etag也应该基于会话ID.如何修改可以在此动态内容方案中工作.它可以用吗?
背景:
Chrome开发工具列出了对Web应用程序主页的98个请求(aspx + js + css +图像).在以下请求中,状态代码200用于css/images文件.没有缓存信息,浏览器每次询问服务器是否必须更新文件.好.
在IIS 7中,我为缓存控制设置HTTP标头,为"ressources"文件夹设置为6小时.在Chrome中,使用开发工具,我可以看到标头设置正确:
Cache-Control: max-age=21600
Run Code Online (Sandbox Code Playgroud)
但是我仍然得到98个请求......我认为如果没有达到过期日期,浏览器不应该请求一个ressource,而且我期待请求数量下降...
我有Amazon S3对象,对于每个对象,我都设置了
Cache-Control: public, max-age=3600000
Run Code Online (Sandbox Code Playgroud)
那大概是41天.
我的Amazon CloudFront Distribution设置了最小TTL,也有3600000.
这是清除缓存后的第一个请求.
GET /1.0.8/web-atoms.js HTTP/1.1
Host: d3bhjcyci8s9i2.cloudfront.net
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Run Code Online (Sandbox Code Playgroud)
而响应是
HTTP/1.1 200 OK
Content-Type: application/x-javascript
Content-Length: 226802
Connection: keep-alive
Date: Wed, 28 Aug 2013 10:37:38 GMT
Cache-Control: public, max-age=3600000
Last-Modified: Wed, 28 Aug 2013 10:36:42 GMT
ETag: "124752e0d85461a16e76fbdef2e84fb9"
Accept-Ranges: bytes
Server: AmazonS3
Age: 342557
Via: 1.0 6eb330235ca3971f6142a5f789cbc988.cloudfront.net (CloudFront)
X-Cache: Hit from cloudfront
X-Amz-Cf-Id: 92Q2uDA4KizhPk4TludKpwP6Q6uEaKRV0ls9P_TIr11c8GQpTuSfhw==
Run Code Online (Sandbox Code Playgroud)
即使亚马逊明确发送Cache-Control,Chrome仍然会发出第二个请求,而不是从Cache中读取它. …
google-chrome cache-control amazon-s3 http-headers amazon-cloudfront
如果HTTP响应返回Expires和max-age指示哪一个使用?
Cache-Control: max-age=3600
Expires: Tue, 15 May 2008 07:19:00 GMT
Run Code Online (Sandbox Code Playgroud)
考虑到每个人都指的是不同的时间点.
我正在使用Azure存储来提供静态文件blob,但我希望在提供服务时为文件/ blob添加Cache-Control和Expires标头以降低带宽成本.
像CloudXplorer和Cerebrata的Cloud Storage Studio这样的应用程序提供了在容器和blob上设置元数据属性的选项,但在尝试添加Cache-Control时会感到不安.
有人知道是否可以为文件设置这些标头?
假定浏览器默认设置,并且内容在没有过期标头的情况下发送.
浏览器将在用户浏览时缓存图像等,但不清楚何时会发出条件GET请求以询问内容新鲜度(除了刷新页面).如果这是一个特定于浏览器的设置,我在哪里可以看到它的价值(对于浏览器:safari,IE,FireFox,Chrome).
[编辑:是的 - 我知道你应该总是发送过期标题.但是,这项研究旨在了解浏览器如何使用没有过期标题的内容.]
cache-control ×10
http-headers ×5
amazon-s3 ×2
browser ×2
http ×2
azure ×1
c# ×1
caching ×1
cors ×1
etag ×1
express ×1
http-caching ×1
iis ×1
node.js ×1
webpack ×1