0

我正在使用 PHP 开发一个 twilio 项目,该项目将播放经常更改的音频文件。

Twilio 的 TwiML Voice文档指出:

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

这些是哪些标头以及如何在 PHP 中设置它们。

4

2 回答 2

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 文件比您的服务器发送它要快得多(并且它还节省了您的服务器带宽)。
  • 如果您更改了在 URL 上提供的 mp3 的内容,并且 Twilio 向该 URL 发出 GET 请求,那么您的服务器将发送回 200 OK,并带有一个新的 E-Tag。Twilio 将从您的服务器下载文件,并将其缓存。

如何在 PHP 中设置它们?

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

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

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

于 2013-08-08T18:15:09.867 回答
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

于 2013-10-21T19:10:25.177 回答