我有网络应用程序,并且有可以刷新商店的标识的界面。刷新徽标时,我使用新的last-modified
标题创建新文件:
Nginx返回更正的更新文件。
之后我再次更新徽标。但我使用旧版last-modified
获取旧徽标,虽然徽标网址文件已更改(您可以在网址末尾看到查询时间戳):
如果我通过浏览器执行直接请求,那么我会获得更新文件:
这可以通过content-length在文件大小中看到。
我对图片的nginx配置是:
location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ {
expires 10d;
try_files $uri @app;
}
我不明白我做错了什么。请帮我。提前致谢
答案 0 :(得分:1)
没有足够的信息来确定所遇到问题的根本原因;我还可以想象,所有遇到此问题的新人都会遇到一个与上面概述的问题稍有不同的问题。
Nginx具有http://nginx.org/r/if_modified_since指令,您可以在ngx_http_not_modified_filter_module.c :: ngx_http_not_modified_header_filter()中查看实现的源代码。
通常,仅因为URL的纪元参数已更改(Function GetAlphaAndNums(Optional ByVal alphaLength& = 26, Optional ByVal numLength& = 10) As Variant()
Dim chars, i&
' [1] get ASC values of alphabet
If alphaLength > 0 Then
If alphaLength > 26 Then alphaLength = 26 ' allow alphabetic characters from A-Z only
chars = Evaluate("column(1:" & alphaLength & ")+64") ' assign alphabetic asc values to 1-based array chars
Else ' (i.e. no alphabetic characters at all)
If numLength = 0 Then numLength = 1 ' avoid empty array
ReDim chars(1 To Abs(numLength)) ' define any array length if no alphabetic chars at al
End If
ReDim Preserve chars(1 To alphaLength + numLength) ' provide for sufficient items
' [2] Fill array with characters and numbers
For i = 1 To UBound(chars)
chars(i) = IIf(i <= alphaLength, Chr(chars(i)), CStr(i - alphaLength - 1))
Next i
GetAlphaAndNums = chars ' return array
End Function
部分以UNIX时间作为尾随符号),这并不意味着必须提供新的资源,因此,仅仅因为前两张图片之间的URL不同而?
时间相同,就无法确定nginx是错误的。同样,最后的第三张图片列出了Last-Modified
响应,但是响应中没有有关If-Modified-Since
nor If-None-Match
标题的信息,图片的属性也没有任何意义。
答案 1 :(得分:0)
根据我的经验,这可能不是nginx问题,而是常见的浏览器行为。
如果强行使用,浏览器可能会刷新页面本身,但是文件链接并不总是被填充,并且文件是从缓存中提供的。
如果必须多次更改图像,样式表或脚本文件之类的文件,则可以为相应的文件打开一个额外的标签,并首先在包含该文件的页面之前填充该文件。
如果您具有服务器访问权限(在提到nginx时必须假设),则可以将max-age
减少到几秒钟,或者为文件设置no-cache
标题。然后浏览器将始终提供最新版本。
答案 2 :(得分:0)
更改您的nginx配置以减少到期时间。您会发现Expires
和Last-Modified
之间的差异为10天,如配置文件所示。
location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ {
expires 1M;
try_files $uri @app;
}