Php 正在提供过时的JSON响应

Php 正在提供过时的JSON响应,php,json,apache,caching,iot,Php,Json,Apache,Caching,Iot,我有一个物联网设备,可以从web服务器上获取JSON文件。JSON文件中的值由基于PHP/HTML的网页修改。服务器上的文件已设置为777权限,并且正在正确更改值。但是,当我的IoT设备连接到服务器以解析JSON时,它会收到至少8天的文件副本。正在返回此标头: HTTP/1.1 200 OK. Content-Length: 15. Content-Type: application/json. Server: Apache. Last-Modified: Mon, 30 Nov 2015 21

我有一个物联网设备,可以从web服务器上获取JSON文件。JSON文件中的值由基于PHP/HTML的网页修改。服务器上的文件已设置为777权限,并且正在正确更改值。但是,当我的IoT设备连接到服务器以解析JSON时,它会收到至少8天的文件副本。正在返回此标头:

HTTP/1.1 200 OK.
Content-Length: 15.
Content-Type: application/json.
Server: Apache.
Last-Modified: Mon, 30 Nov 2015 21:28:39 GMT.
Connection: keep-alive.
Date: Tue, 08 Dec 2015 08:22:36 GMT.
.
{"light": "on"}LED ON
closing connection.

我错过了什么。我想到的一种可能性是,服务器正在发送回缓存的响应,而不是实际查看文件的新版本并为其提供服务。

所以我猜在IoT设备的服务器附近有一些缓存

1) 尝试签入您的
物联网设备
是否有缓存

2) 尝试检查服务器配置是否有缓存


如果失败,那么唯一的选择就是创建一些逻辑,这些逻辑将始终在
物联网设备的链接末尾生成唯一的pram,并使用该链接检索json。

感谢@Armen的帮助和大量在线阅读。事实证明,造成这种情况的原因有两个:


我发现,在PHP中,简单地写入文件并不会修改它的“last modified”属性,这会导致服务器发送错误版本的JSON文件时出现问题。为了解决这个问题,我添加了
touch(“path/To/file.json”)。它更新了文件最后修改的属性,从而解决了问题。我意识到这可能是非常明显的事情,但作为一个初学者,我认为这是很多初学者可能遇到的事情,所以我想我应该和大家分享。

尝试在链接端添加test-add-GET-pram,比如
link?p=4as6d46as4d
随机字符串,看看是否相同result@Armen这基本上就是我的物联网设备的目标:
const char*host=“www.example.com”;//您的域字符串路径=“/smarthome/light.json”按照您的建议执行,返回的文件的当前时间和日期为上次修改的值,但文件的内容仍然相同。@Armen更正:按照您的建议执行会生成一个20分钟的旧文件。比八天好多了,但还是不行。这是需要在服务器上修复的吗?因此,根据我的托管公司和phpinfo()输出,服务器上绝对没有缓存。物联网设备上没有缓存(esp8266作为Arduino投入使用)。这到底是怎么回事?值得注意的是,当我将随机字符串作为GET变量传递给我的页面时,我会得到页面的最新版本,否则会得到过时的版本。当我把这个分享给我的主人时,他们说他们看到了更新的页面。我在所有web浏览器中禁用了所有缓存:D尝试在没有随机婴儿车的情况下使用chrome隐姓埋名模式检查该页面我最终使用的解决方案涉及到您的建议。我将“?new=”放在文件路径的末尾,然后向其添加random(999),以便每次请求都不同。它是有效的,但由于某些原因,json的值会自动改变,或者是互联网上的某个人在改变它们。如果您想在这方面提供更多帮助,我可以向您发送详细信息!:)事实上,我不是物联网设备的专家,我不能帮你解决这个问题,但我几乎可以肯定问题就在那里。你可以这样研究一下。例如,您有一些用于发送http请求的库,您可以搜索
Iot A lib disable caching
或类似的内容来查找问题。关于这个
?new=
pram,它的值应该是唯一的,随机数可以重复。你必须给出唯一的值,例如以秒为单位的当前时间戳,所以它将始终是新的数或
时间+随机数。
字符串另外,我后来发现一些ISP(比如我的ISP)实施了奇怪的缓存策略,这些策略导致我从服务器获得过时的响应。我尝试从不同的网络连接到同一台服务器,并立即得到实时响应。