Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как отключить кеширование изображения (http://www.flasher.ru/forum/showthread.php?t=174308)

booksmaster 22.01.2012 15:32

Как отключить кеширование изображения
 
Как отключить кеширование изображения

Код AS3:

var urlRequest:URLRequest = new URLRequest(host+"img/"+i);
urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );       
urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-store' ) );
userImageLoader.load(urlRequest);

НЕ ПОМОГАЕТ!!!
Все равно загружается из кэша (опера). После очистки кеша загружается нормально с сервера.

КорДум 22.01.2012 15:50

Код AS3:

host+"img/"+i + Math.random()


booksmaster 22.01.2012 21:13

А по другому никак? Это постить надо теперь название картинки....

gloomyBrain 22.01.2012 21:20

Просто делайте запрос методом post. Запросы такого типа в принципе не могут кешироваться, так как метод предполагает что вы что-то отдаёте серверу, а не забираете у него.

booksmaster 22.01.2012 21:21

Делаю запрос именно методом пост с явным указанием оного. Все равно гад из кеша тянет картинку.

gloomyBrain 22.01.2012 21:35

А вы уверены, что сама SWF-ка с кодом загрузки у вас не из кеша? Просто, если честно, не верится. Потому как невозможно такое =)

booksmaster 22.01.2012 22:14

Все, победил...
Вот решение

Код AS3:

var urlRequest:URLRequest = new URLRequest(host+'userimage.php?id='+userData.id+'&wtf='+Math.random());

и текст userimage.php

PHP код:

<?php
header 
('Location: img/ui_'.($_POST['id']?:$_GET['id']).'.jpg')
?>

Работает норм.

userId можно и постить... без разницы и так и так работает

GBee 22.01.2012 23:09

Кордум немного опечатался, но идея та же. И по форуму много таких тем.

dimarik 23.01.2012 23:39

POST без тела становится GETом, %username%!

КорДум 23.01.2012 23:58

Цитата:

Кордум немного опечатался
Ой, и правда. Спасибо =)
Код AS3:

host+"img/" + i + "?" + Math.random()


gloomyBrain 24.01.2012 02:04

Цитата:

Сообщение от dimarik (Сообщение 1058706)
POST без тела становится GETом, %username%!

Хм, потестил - и правда так. Спасибо =) хоть за netty взялся опять.
Однако в данном случае POST останется POST'ом, ибо переменные таки передаются запросе. Единственное что нужно сделать - это запихнуть их в request.data (посредством flash.net.URLVariables), а не в URI (адрес запроса).

dimarik 24.01.2012 10:10

Цитата:

Сообщение от gloomyBrain (Сообщение 1058723)
Однако в данном случае POST останется POST'ом, ибо переменные таки передаются запросе.

Без компромиссов! Это GET. Не нужно выдавать желаемое за действительное.

booksmaster 24.01.2012 12:20

Ну мне, например, было не понятно, как таким способом получать картинку. ПХПшину еще куда не шло, но каритнку... Так что, идея конечно та, но не в полностью отвечала на мой вопрос.
К стати, многие бьются об сену головой по этому поводу и нигде нет членообразного ответа. Только урл менять. Может, все таки есть действенные способы? По ходу вопросс:"кто обрабатывает заголовки, посылаемые в РеквестХедерс?"
Например вот такие:
Код AS3:

urlRequest.requestHeaders.push( new URLRequestHeader("Pragma", "no-cache"));
urlRequest.requestHeaders.push( new URLRequestHeader( 'Expires', '0' ) );
urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'max-age=0, no-store, no-cache, must-revalidate' ) );

Просто интересно, потому что они не имеют никакого воздействия...

maxkar 24.01.2012 12:40

Цитата:

Сообщение от booksmaster (Сообщение 1058785)
По ходу вопросс:"кто обрабатывает заголовки, посылаемые в РеквестХедерс?"

Сервер их обрабатывает. Или не обрабатывает. Зависит от того, что за сервер.
Цитата:

Просто интересно, потому что они не имеют никакого воздействия...
Ну да. А что именно от сервера вы хотите на заголовок must-revalidate? :confused:

Заголовки Cache-Control должен сервер отдавать, а не клиент. Ну и при этом правильно обрабатывать заголовок If-Modified-Since.

booksmaster 24.01.2012 23:42

То есть, со стороны клиента контролировать кеширование невозможно?

dimarik 24.01.2012 23:58

Есть вариант передавать в URL только вопросительный знак ("?"), без строки запроса.

Например: "http://example.com/folder/picture.jpg?".

В таком случае будет запрос на сервер со всеми вкусными заголовками (If-Modified-Since)

Ах, да!
1) Повторный запрос по этой схеме во время работы приложения не приведет к запросу к серверу, а контент возьмется из кэша. Работает только первый запрос по этому URL, с момента запуска приложения. Не перепутайте: запрос "http://example.com/folder/picture.jpg", без знака вопроса, отработает только один раз, независимо от перезапусков приложения.
2) Этот прием я проверял только на какой-то конкретной версии FP.


Часовой пояс GMT +4, время: 05:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.