2009-08-06 5 views
1

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

+0

Как это связано с программированием? (это звучало странно, обычно это наоборот) – Kobi

+0

** @ Kobi: ** Я изменил вопрос для этого (и для ясности). –

ответ

1

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

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

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

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


EDIT после редактирования вопроса:

заголовок Expires генерируется сервером, и один из заголовков, которые приходят в ответ (это не заголовок клиент посылает в запросе; см List of HTTP headers).

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


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

+0

хотят установить максимальный срок действия для изображения/флэш-выборки из внешнего источника для клиента с использованием технологии клиента, а не сервера (tomcat, apache), через ajax – cometta

2

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

Возможно, это вариант для установки прокси-сервера, например. если вы нацелены на сотрудников компании?

5

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

Что можно

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

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

<script type="text/javascript"> 

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

</script> 

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

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

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

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

+0

другое примечание: если вы вообще не хотите кэшировать, вы можете использовать 'd. getTime(); 'для метки времени, которая добавит число, например' 1249547501178' – Kobi

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