我正在使用 nginx 运行多站点 wordpress,并在 safari 上进行测试(chrome 很好)。
很重要的一点是,图片是管理员上传的。
我发现有时有些图像没有立即出现,我之前只是网络问题,但我今天找到了规律。
规则是:
- 进入页面,如图所示。
- 刷新页面(Command + R),图像消失了。
- 再次刷新,如图所示。
- 再次,它消失了。
- 循环......
注意:消失是指不是立即出现:加载页面大约 2 秒后,图像可以加载。
当您刷新页面时,Safari 会向服务器发送带有 HTTP 标头HTTP_IF_NONE_MATCH
和HTTP_IF_MODIFIED_SINCE
.
由于这是一个多站点,nginx 将请求重写到 ms-files.php 来处理它。ms-files.php 发现图像没有被修改,所以它的响应 304 没有内容。
Content-Length
错误是,ms-files.php在决定响应 304 之前已经设置了标头,因此响应标头将是 304,没有内容和Content-Length > 0
. 在那之后,野生动物园就下来了。
通过添加header( 'Content-Length: 0' );
到 wp-includes/ms-files.php 第 79 行来修复错误。
75 if ( ( $client_last_modified && $client_etag )
76 ? ( ( $client_modified_timestamp >= $modified_timestamp) && ( $client_etag == $etag ) )
77 : ( ( $client_modified_timestamp >= $modified_timestamp) || ( $client_etag == $etag ) )
78 ) {
79 header( 'Content-Length: 0' );
80 status_header( 304 );
81 exit;
82 }