2014-12-22 1 views
5

Главная проблема:Как эффективно получить срок годности для URL-адреса Facebook и обновить его до истечения срока его действия?

  • Application кэширует URL, от facebook фото CDN
  • Фотографии истекает в какой-то момент

Мой "технический" вопрос:

  • 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

До сих пор:

  • Похоже, что один из самых надежных способов будет иметь фоновое задание проверки фотографий все время, но чувствует себя немного «неправильно», как " грубое форсирование ".
  • Имея фоновое задание потенциально позволит истёкшие фотографии, чтобы быть подан до момента этой фотографии Ссылка на «обновленной»

Мои вопросы:

  • Должен ли я использовать параметр максимального возраста даже жесткий, похоже, не меняется?
  • Есть ли надежный способ использования URL-адреса facebook CDN?
  • Любое другое представление о том, как это должно быть реализовано?
  • < joke> Следует ли использовать API facebook для наказания плохо работающих кодеров? </joke>

Возможные решения?

  • Check facebook для последнего URL перед подачей любого URL CDN

    ~> замедлит мои запросы много

  • иметь фоновое задание о продлении URL и сроки годности

    ~> потенциально имели бы истекшие фотографии, пока работа не «ломает» их

  • Загрузить фотографии в мой собственный CDN

    > не хорошая практика, я бы предположил,

UPDATE: ~> Возможно, трут на самом деле фотографии пользователя кэша по их собственной CDN: https://gist.github.com/rtt/10403467 так кажется, facebook вроде нормально с ним ?

+0

«будет иметь фоновые задания, проверяющие фотографии все время, но это немного« неправильно », как« грубое форсирование ». --- и если вы подумаете на секунду, вы поймете, что facebook не знает, когда пользователь изменяет свою фотографию, поэтому они не могут указать точную дату истечения срока действия. Поэтому они просто считают, что 14 дней, которые, как они предполагают, прекрасны. Так что просто делайте то, что FB говорит вам делать с заголовками HTTP. – zerkms

+0

Помимо этой гипотезы (пользователь удаляет фотографию), вы думаете, я должен использовать значение максимального возраста или дату «Истекает»? – kroe

+0

Еще одна проблема с хардкором заключается в том, что иногда она удаляется пользователями и не удаляется из их CDN - по крайней мере, используется в этом случае. – kroe

ответ

16

Expires означает ровно одну вещь, и это не то, что вы думаете, это:

Истекает Поле заголовка объекта дает дату/время, после чего ответ считается устаревшим. [...]

Наличие поля Expires не означает,

- RFC 2616 §14.21, курсив мой

Если изображение URL-адреса Facebook, перестают работать после того, как какой-то момент времени, это их дело. Их HTTP-заголовки не должны упоминать об этом, а на самом деле, нет.

Это указано, I подозреваемый, что параметр URL oe может содержать временную метку истечения срока действия. Если я интерпретирую 54be4ee2 как шестнадцатеричное число, содержащее отметку времени UNIX, я получаю 20 января 2015 года, что почти ровно через месяц. Возможно, это значение, которое вы ищете?

+0

Фактически,« Истекает »не возвращается для всех изображений. Так что я считаю, что я должен использовать сейчас() + max-age? – kroe

+4

Просто для подтверждения после некоторых тестов, которые я делал, параметр oe означает, что срок действия изображений истекает в шестнадцатеричном формате. Хороший улов @ duskwuff –

 Смежные вопросы

  • Нет связанных вопросов^_^