Как я могу программно определить, изменился ли двоичный файл на веб-сайте (например, изображение), не загружая его? Есть ли способ использовать HTTP-методы (в данном случае на С#) для проверки перед полной загрузкой?
Как я могу программно определить, изменился ли двоичный файл на веб-сайте (например, изображение), не загружая его?
comment
я так не думаю; если вы запрашиваете реальный файл, вы просто получаете поток октетов. Насколько я знаю, в спецификации нет вызовов, которые позволяют вам опрашивать атрибуты файла так, как вам нужно, но мне любопытно посмотреть, есть ли способ...
- person Joe   schedule 25.09.2009
Ответы (3)
Вы можете проверить, изменен файл или нет, запросив с помощью HEAD.
Затем возвращаемый заголовок ответа может включать Last-Modified или ETag если веб-сервер поддерживает.
person
xrath
schedule
25.09.2009
Согласитесь, ETag — лучшее решение этой проблемы там, где они поддерживаются.
- person Doug McClean; 25.09.2009
Да, это подход в решении, которое я сделал. i ETag существует, используйте его, в противном случае вернитесь к Last-Modified.
- person Michael Stum; 26.09.2009
Действительно, вы хотите искать заголовок Last-Modified после выдачи запроса HEAD
(а не GET
). Я написал код для получения HEAD
через WebClient
здесь.
person
Marc Gravell
schedule
25.09.2009
Следует отметить, что не все сайты предоставляют правильный заголовок Last-Modified, даже если они должны правильно кэшировать свой сайт.
- person Ben S; 25.09.2009
Но вы мало что можете сделать, если сервер не играет по правилам.
- person Bryan; 25.09.2009
Если сервер не предоставляет правильные заголовки управления кешем (Last-Modified и т. д.), то невозможно определить, изменился ли файл с определенного времени, кроме его загрузки и сравнения содержимого.
- person David Z; 25.09.2009
Вы можете выполнить запрос HEAD и проверить последнее измененное значение даты и времени, а также длину содержимого.
person
D'Arcy Rittich
schedule
25.09.2009
Спасибо за упоминание длины контента: это простая проверка, но отличный запасной вариант, если сервер настроен неправильно.
- person Frank Krueger; 26.09.2009