当前位置: 首页 > 知识库问答 >
问题:

Nginx/PPH:Nginx在发送Etag头时未返回304响应

赵晨
2023-03-14

我正在尝试使用ETags和nginx (1.2.1)服务器理解本地缓存,该服务器将php的请求重定向到php-cgi守护进程。

这里是我的简单索引。电话:

<?php
header('Cache-Control: public');
header('Etag:"5954c6-10f4-449d11713aac0"');

echo microtime(true);

在第二个请求之后,我的浏览器会发送一个 If-None-匹配 标头:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Host:cache.loc
If-None-Match:"5954c6-10f4-449d11713aac0"

但是我的网络服务器没有返回304:

HTTP/1.1 200 OK
Server: nginx/1.2.2
Date: Thu, 12 Jul 2012 11:46:03 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.3.12
Cache-Control: public
Etag: "5954c6-10f4-449d11713aac0"
Cache-Control: public

除非我误解了,否则我的服务器应该将 Etag 与发送的 If-None-Match 进行比较,并返回 304 响应,因为它们是相同的。

我哪里错了?我应该在PHP脚本中将Etag与If None Match进行比较吗?因为nginx(或Apache)本身不能完成这项工作吗?

你好,马努

共有1个答案

谭建章
2023-03-14

如果您自己使用php实现此功能,您还有责任发送304 Not Modified。

因此,将“如果-无匹配”标头与您的 ETag 进行比较,并使用 header() 发回 304。

 类似资料:
  • 我有一个简单的用例,服务器为请求返回Etag,并将该Etag作为标头(即)添加到所有后续url请求。如果响应中有变化,服务器可以用响应,否则可以用响应。对于后者,重用缓存中的响应是有意义的。但是okhttp总是返回作为缓存响应。 我做了一些故障排除,okhttp在内部将响应写入磁盘,但是不会将其返回到。仔细研究类,有一些文档明确说明不会使用缓存: 编辑-更正,Okhttp正确地添加了etag标头。

  • 我得到这样的错误: 关于这个问题,有可能从nginx conf文件中增加缓冲区大小,如下所示:上游发送太大的头,而从上游读取响应头 (供以后参考,fastcgi_buffer_size和fastcgi_buffers的默认大小为4K或8K,具体与平台有关)

  • 我有问题让我的Angular2客户端与我的Spring服务器通信,因为我添加了Spring Security性,即当我尝试向服务器登录url发送包含鉴别信息的JSON时,我得到一个403“无效的CSRF令牌'null'是在请求参数'_csrf'或标头'X-CSRF-TOKEN'上找到的。” 我知道我应该在我的响应头上传递一个令牌,供客户端使用,但没有传递这个令牌。我尝试了这个答案,但令牌仍然没有被

  • 我用JacksonAnnotationIntrospector设置了一个自定义注释,以便根据API版本吐出正确的属性名称。根据API版本,有一个助手类可以输出正确的ObjectMapper。 还有一个帮助函数用于测试序列化 在这样的单元测试中: 现在,假设我有这样的东西: 用户扩展实体时: 我知道映射程序单独返回正确的JSON。我可以直接把电话插进去。实体(),但这会导致我们的测试出现问题,测试会

  • 有很多使用OkHTTP3发出请求的例子,但是,我仍然无法发出正确的请求。据我所知,我的设置是正确的。 我不断收到如下所示的回复。我不知道他们是什么意思。 {“ContentLength”:238,“ContentTypeString”:“Application/JSON”,“Source”:{“Buffer”:{“Size”:0},“Closed”:False,“Source”:{“BytesRe

  • 条件 GET 是一个伟大的方式来减少带宽,并可能提高对服务器端性能,根据信息用于确定条件是如何计算出来的。一个设计良好的网站例如返回 304 (Not Modified) 响应给它提供的静态图像服务。 JAX-RS 使用上下文接口Request来提供对条件 GET 的支持。 下面的例子显示了对条件 GET 的支持: Example 7.7. Conditional GET support publ