设置通知文件内容的标题已更改。 PHP,Twilio

时间:2013-08-08 17:46:37

标签: php http-headers twilio

我正在使用PHP进行twilio项目,该项目将播放频繁更改的音频文件。

Twilio的TwiML语音documentation声明:

  

确保您的网络服务器正在发送正确的标题以通知我们   该文件的内容已更改

这些标题是什么以及如何在PHP中设置它们。

2 个答案:

答案 0 :(得分:1)

这些标题是什么?

这就是Twilio的缓存方式

  • Twilio使用GET请求从您的服务器请求.mp3。您的 服务器发回200 OK,并发送回E-Tag标头。 Twilio将保存E-Tag标题以及mp3文件 数据库中。
  • 下次Twilio向该URL发送GET请求时,它将发送 沿着E-Tag标题(它应该看起来像“If-None-Match”)。如果 自上次Twilio访问它以来,文件没有改变 服务器将发回304 Not Modified标头。至关重要的是,它会 不发送mp3文件数据。 Twilio将使用它拥有的mp3文件 存储在其数据库中。 Twilio读取mp3的速度要快得多 来自其数据库的文件,而不是服务器发送它的文件(以及它 还节省了服务器带宽。)
  • 如果您更改了在网址上投放的mp3的内容, 和Twilio向URL发出GET请求,然后您的服务器将发送 使用新的E-Tag返回200 OK。 Twilio将从中下载该文件 你的服务器,并缓存它。

如何在PHP中设置它们?

header("ETag: \"uniqueID\");

发送文件时,Web服务器会在名为 ETag 的标题中附加文件的ID。请求文件时,浏览器会检查文件是否已下载。如果找到缓存文件,则服务器将带有文件请求的ID发送到服务器。服务器检查ID是否匹配,如果匹配,则发送回header("HTTP/1.1 304 Not Modified");否则服务器正常发送文件。

一种简单的检查方法是在网址末尾添加一些虚假的键值对,例如http://yoururl.com/play.mp3?key=somevalue。您的网站仍应提供与加载example.com/test.mp3时相同的mp3,但对于Twilio,它似乎是一个新的URL(未缓存)。

答案 1 :(得分:0)

Twilio使用Squid缓存MP3。您可以使用缓存控制标头控制项缓存的时间。

缓存控制:max-age = 3600

http://wiki.squid-cache.org/SquidFaq/InnerWorkings#How_does_Squid_decide_when_to_refresh_a_cached_object.3F