Изменение заголовков HTTP на стороне клиента с помощью JavaScript - PullRequest
1 голос
/ 06 августа 2009

Можно ли использовать JavaScript для динамического изменения заголовков HTTP, полученных при загрузке изображения из внешнего источника? Я пытаюсь контролировать кэширование образа (Expires, Max-Age и т. Д.) На стороне клиента, поскольку у меня нет доступа к серверу.

Ответы [ 3 ]

5 голосов
/ 06 августа 2009

Как сказали другие, нет, в клиентском коде невозможно манипулировать заголовками http и директивами кэширования с сервера.

Что возможно

Что вы действительно можете сделать, так это убедиться, что получили новый файл. Это можно сделать, добавив уникальную строку к URL-адресу запроса в качестве параметра строки запроса.

например. если вы хотите, чтобы каждый час вы получали новый файл

<script type="text/javascript">

var d = new Date();
url += ("?" +d.getYear() + "_" + d.getDay() + "_" + d.getHours());

</script>

Для этого нужно добавить значение, содержащее год, день и час, в URL, чтобы оно было уникальным для каждого часа, что обеспечит новый запрос файла. (Не проверено!)

Очевидно, что это можно сделать гораздо более общим и точно настроенным, но, надеюсь, вы поймете идею.

Что невозможно

Чего вы не можете сделать, так это убедиться, что не не получит новую версию с сервера.

2 голосов
/ 06 августа 2009

Директивы кэширования находятся в ведении сервера. Вы не можете манипулировать ими на стороне клиента.

Может быть, это вариант для вас, чтобы установить прокси-сервер, например, если вы нацелены на сотрудников компании?

1 голос
/ 06 августа 2009

Я не думаю, что Javascript действительно может это сделать: изображения запрашиваются браузером, и он сам должен определить HTTP-заголовки для выдачи.

Одним из способов использования некоторых пользовательских заголовков может быть какой-то Ajax-запрос, не проходящий мимо какого-либо тега <img>; но вы должны знать, что делать с возвращенными данными ... Не думаю, что это сильно поможет.

Если вы хотите, чтобы ваши изображения сохранялись в кеше браузером, ваш сервер должен отправлять правильные заголовки в ответах (например, Etag и / или Expires - см. mod_expires , для Apache, например)

Если вы хотите быть абсолютно уверены, что браузер загрузит новое изображение, а не использовать версию, которая у него есть в кэше, вам следует каждый раз использовать другой URL.
Это часто делается с использованием метки времени в качестве параметра URL; например example.com/image.jpg?123456789 (123456789 - это, более или менее, текущая временная метка - очевидно, меньше, чем больше, но вы понимаете: каждую секунду браузер будет видеть, что URL-адрес меняется)


РЕДАКТИРОВАТЬ после редактирования вопроса:

Заголовок Expires создается сервером и является одним из заголовков, которые входят в ответ (это не заголовок, который клиент отправляет в запросе; см. Список заголовков HTTP ).

Итак, вы абсолютно не можете контролировать его со стороны клиента: это сервер, который должен быть настроен для выполнения работы, здесь ...


Если вы хотите больше ответов: что вы пытаетесь сделать именно? Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...