Заголовки HTTParty странное поведение

Как минимум два браузера - Chrome и Firefox - будут кэшировать 301-редирект с без истечения срока годности .

То есть он будет кэшироваться до тех пор, пока кеш браузера может вместить его. Он будет удален из кеша, если вы вручную очистите кеш, или если записи кэша будут очищены, чтобы освободить место для новых.

Вы можете проверить это, по крайней мере, в Firefox, перейдя в about:cache и найти его в дисковый кеш.

Я не знаю о поведении других браузеров, таких как IE10 / IE11. Однако, учитывая, что другие браузеры кэшируют его на неопределенный срок, вам все равно придется приспособиться к этому.

Во всех браузерах, включая Chrome / Firefox, по-прежнему можно переопределить это поведение по умолчанию с использованием заголовков, как описано ниже:

Примечание: этот ответ был написан в 2014 году и поведение браузера может измениться с течением времени.

Если вы не хотите, чтобы перенаправление было кэшировано

Это неопределенное кеширование - это только по умолчанию кеширование этими браузерами при отсутствии заголовков Cache-Control. Логика заключается в том, что вы указываете «постоянную» перенаправление и не даете им никаких других инструкций кэширования, поэтому они будут обрабатывать ее так, как если бы вы хотели ее кешировать неограниченно.

В браузерах по-прежнему соблюдается Cache-Control и Expires заголовки, как с любым другим ответом, если они указаны.

Вы можете добавить заголовки, такие как Cache-Control: max-age=3600 или Expires: Thu, 01 Dec 2014 16:00:00 GMT, в свои 301 переадресацию. Вы даже можете добавить Cache-Control: no-cache, чтобы он не был постоянно кэширован браузером или Cache-Control: no-store, поэтому браузер не может быть сохранен в временном хранилище браузером.

Лучшая альтернатива на мой взгляд , однако, заключается в использовании перенаправления 302 или 307. Это не означает, что браузеры или кеши являются «перманентными» перенаправленными и поэтому не должны кэшироваться в отсутствие заголовков Cache-Control.

Мне кажется, что вы отправляете 301 редирект, но отмечая, что он не кэшируемый, идет против духа того, для чего предназначен переадресация 301, хотя это может быть технически обоснованным. YMMV, и вы можете найти крайние случаи, когда имеет смысл для «постоянного» перенаправления иметь ограничение по времени.

Если вы ранее выдали 301-редирект, но хотите отказаться от этого

Если у людей все еще есть переадресация 301 кеширования в своем браузере, они будут по-прежнему отправляться на целевую страницу независимо от того, имеет ли исходная страница редирект на месте. Ваши варианты для исправления этого включают в себя:

  • Самое простое и лучшее решение - снова отправить 301 перенаправление. Браузер поймет, что он обращается к тому, что, как считалось ранее, было отключенным URL-адресом, и это должно привести к повторному извлечению этого URL-адреса, чтобы подтвердить, что старое перенаправление еще не существует. Редактирование: некоторые комментарии ставят под сомнение это, см. ниже.
  • Если у вас нет контроля над сайтом, на котором была предыдущая цель перенаправления, тогда вам удача. Попробуйте попросить владельца сайта перенаправить обратно к вам.

Также предотвращение лучше, чем лечение - избегайте перенаправления 301, если вы не уверены, что хотите окончательно удалить комиссию старого URL.

0
задан Xero 17 January 2019 в 09:14
поделиться

1 ответ

Хэш-ключи в Ruby могут быть любого типа объекта. Например, они могут быть строками или символами. Использование двоеточия (:) в вашем хэш-ключе говорит Ruby, что вы используете символ. Единственный способ использовать строку (или другой тип объекта, например Integer) для вашего ключа - это использовать хэш-ракеты (=>).

Когда вы вводите { "Content-Type": "application/json" }, Ruby преобразует строку "Content-Type" в символ :"Content-Type". Вы сами можете увидеть это в консоли:

{ "Content-Type": "application/json" }
=> { :"Content-Type" => "application/json" }

Когда вы используете хэш-ракету, она не конвертируется и остается строкой:

{ "Content-Type" => "application/json" }
=> { "Content-Type" => "application/json" }

HTTParty не работает с символическими клавишами .

0
ответ дан anothermh 17 January 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: