Эта ошибка была серьезной проблемой для моего сайта: http://worldofsolitaire.com
Я работал над этим давно, используя условное правило в файле .htaccess, которое отключало бы ВСЕ кэширование изображений на сайте для пользователей Firefox. Это была ужасная вещь, которую нужно было сделать, но в то время я не мог отследить ошибку в Firefox, и сделать сайт немного медленнее, чем показывать дублированные / поврежденные изображения.
Когда я прочитал в связанной ошибке, что она была исправлена в последних выпусках Firefox, я изменил условие 19 апреля 2009 года (вчера), чтобы отключить кэширование только для пользователей Firefox 2.
Несколько часов спустя я получил более 10 писем от пользователей Firefox 3 (подтверждено), что они видели дубликаты изображений. Так что эта проблема все еще остается проблемой в Firefox 3.
Я решил создать простую тестовую программу для Linux, которая позволила бы мне проверять URL-адреса, чтобы увидеть, генерируют ли они одни и те же хэш-ключи кеша.
Чтобы скомпилировать в любой системе Linux: g ++ -o ffgenhash ffgenhash.cpp
Вот код (сохранить в файл ffgenhash.cpp)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ULONG_MAX 0xFFFFFFFF
#define PR_ROTATE_LEFT32(a, bits) (((a) << (bits)) | ((a) >> (32 - (bits))))
unsigned long ffgenhash(const char * key)
{
unsigned long h=0;
for(const unsigned char * s = (unsigned char *) key; *s != '\0'; ++s)
{
h = PR_ROTATE_LEFT32(h, 4) ^ *s;
}
return (h==0 ? ULONG_MAX : h);
}
int main(int argc, char ** argv)
{
printf("%d\n", ffgenhash(argv[1]));
return 0;
}
Как вы можете видеть, вот два реальных URL, которые генерируют один и тот же ключ кеша:
./ffgenhash "http://worldofsolitaire.com/decks/paris/5/12c.png"
1087949033
./ffgenhash "http://worldofsolitaire.com/decks/paris/5/13s.png"
1087949033
Так как я предварительно загружаю эти изображения в цикле Javascript, попытка использовать какой-то пустой обходной путь тега здесь невозможна.
Действительно, я думаю, что мое единственное реальное решение - каким-то образом изменить URL-адреса для пользователей Firefox, чтобы сгенерировать уникальный ключ кеша. Вот такой подход я буду использовать.
Кстати, у меня наполовину соблазн создать дополнение Firebug, которое проверит все ресурсы, загруженные сайтом, и выдаст большую ошибку, если два ресурса на сайте имеют общий хэш-ключ, так что разработчик знает об этом. Было бы здорово запустить такие сайты, как карты Google, так как за последние несколько лет я видел странные вещи с этими изображениями:)