Мой веб-сайт размещен на сервере Windows Server 2008 R2. У нас есть программное обеспечение, обновления которого загружаются с наших веб-сайтов с помощью winsock. Работает исправно у всех клиентов (более 20000 за последние несколько лет). На некоторых компьютерах моих клиентов я обнаружил, что он загружает старый файл с веб-сайта вместо нового файла. Например, вместо загрузки update.txt он загружает файл update.txt.old с именем update.txt. Фактически update.txt.old - это старый файл, который мы храним на сервере.
Я проверил просмотр файла с помощью Chrome, и нужный файл загружен. Я пробовал использовать netsh winsock reset
команда, сброс Internet Explorer, очистка кеша, временных файлов и т. д. и проблема не решена.
Итак, есть ли кто-нибудь, кто знает об этой странной ошибке, как я могу устранить неполадки?
Вероятно, это связано с кешированием, будь то на стороне сервера или на стороне клиента (или иногда между ними, как в кэше корпоративной сети).
Распространенный источник путаницы - это изменение даты файлов в обратном направлении. Например, если вы вернете некоторые файлы к резервной версии. Ваш сервер видит, что кеш более поздний, чем время модификации файлов, поэтому сообщает клиенту или промежуточному кешу, что можно продолжать использовать их кэшированную версию, несмотря на то, что содержимое на сервере изменилось (т. Е. Вернулось) с момента загрузки этой версии.
Получаете ли вы нужный контент, если добавляете в URL-адрес ложные аргументы? например http://example.com/update.txt?bogus=[random_stuff]. РЕДАКТИРОВАТЬ: Если это не дает вам правильную версию файла, то кеширование не ваша проблема.
Помогает ли очистка кеша браузера?
Помогает ли жесткое обновление. Например, ctrl-shift-R в firefox. Иногда это очищает серверный или промежуточный кеш для URL-адресов текущей страницы и встроенных ресурсов.
EDIT: вы говорите, что результаты, которые вы видите, зависят от задействованного HTTP-клиента. Узнайте, чем отличается данный запрос. Есть несколько способов сделать это на стороне сервера, но если запрос не зашифрован, вам может быть лучше просто использовать что-то вроде wirehark и / или ngrep, чтобы выбрать запрос по сети.
Обычно такие проблемы вызваны кешированием на стороне КЛИЕНТА (например, кеширование прокси для доступа в Интернет). Вы можете ПОПРОБОВАТЬ разобраться с этим на стороне сервера, используя заголовки Cache-Control, но это не 100% решение. Также вы можете дополнительно указать тип контента (например, Тип содержимого: приложение / поток октетов) для ваших загрузок.