如何有效地检索Facebook照片URL的截止日期并在其到期前更新?

时间:2014-12-22 01:55:01

标签: facebook photo cdn

主要问题:

  • 应用程序从Facebook照片CDN
  • 缓存URL
  • 照片会在某个时间到期

我的“技术”问题:

  • Facebook CDN“过期”标题似乎不可靠(或者我不知道如何处理它们)

使用CURL检索到期日期:

  • curl -i -X HEAD https://scontent-b.xx.fbcdn.net/hphotos-xap1/v/t1.0-9/q82/p320x320/10458607_4654638300864_4316534570262772059_n.jpg?oh=9d34386036754232b79c2208c1075def&oe=54BE4EE2

  • 返回前一分钟:Mon, 05 Jan 2015 01:34:28 GMT

  • 现在又回来了:Mon, 05 Jan 2015 01:35:27 GMT

  • 两次“Cache-Control”都返回相同的内容:Cache-Control: max-age=1209600

到目前为止:

  • 似乎最可靠的方法之一就是让背景工作一直检查照片,但感觉有点“错误”,比如“暴力强迫”。
  • 有一个后台工作可能会允许过期的图片提供到这个照片网址被“更新”的那一刻

我的问题是:

  • 我应该使用max-age参数,即使它很难改变吗?
  • 使用facebook的CDN网址有可靠的方法吗?
  • 关于如何实施这一点的任何其他想法?
  • <笑话>应该使用facebook API来惩罚行为不当的程序员吗?< / joke>

可能的解决方案?

  • 在提供任何CDN网址之前检查Facebook的最新网址

    〜>会大大减慢我的要求

  • 让后台作业续订URL和到期日期

    〜>如果工作没有“抓住”他们,可能会有过期的照片

  • 将照片下载到我自己的CDN

    〜>我猜不是一个好习惯

更新:  〜>也许Tinder实际上会将用户的图片缓存在他们自己的CDN上:https://gist.github.com/rtt/10403467所以看起来facebook对它有点好吗?

1 个答案:

答案 0 :(得分:16)

Expires完全意味着一件事,并不是您认为的那样:

  

Expires entity-header字段给出了响应被视为过时的日期/时间。 [...]

     

Expires字段的存在并不意味着原始资源将在该时间之前,之前或之后更改或停止存在。

- RFC 2616 §14.21,强调我的

如果Facebook的图片网址在某段时间后停止运作,那就是他们的业务。他们的HTTP标题不必提及它,事实上,不要。

话虽如此,我怀疑 oe网址参数可能包含到期时间戳。如果我将54be4ee2解释为包含UNIX时间戳的十六进制数字,那么我将从2015年1月20日开始,这几乎是从现在开始的一个月。可能是你正在寻找的价值吗?