Как я могу программно определить, изменился ли двоичный файл на веб-сайте (например, изображение), не загружая его?

Как я могу программно определить, изменился ли двоичный файл на веб-сайте (например, изображение), не загружая его? Есть ли способ использовать HTTP-методы (в данном случае на С#) для проверки перед полной загрузкой?


person Greg    schedule 25.09.2009    source источник
comment
я так не думаю; если вы запрашиваете реальный файл, вы просто получаете поток октетов. Насколько я знаю, в спецификации нет вызовов, которые позволяют вам опрашивать атрибуты файла так, как вам нужно, но мне любопытно посмотреть, есть ли способ...   -  person Joe    schedule 25.09.2009


Ответы (3)


Вы можете проверить, изменен файл или нет, запросив с помощью HEAD.

Затем возвращаемый заголовок ответа может включать Last-Modified или ETag если веб-сервер поддерживает.

person xrath    schedule 25.09.2009
comment
Согласитесь, ETag — лучшее решение этой проблемы там, где они поддерживаются. - person Doug McClean; 25.09.2009
comment
Да, это подход в решении, которое я сделал. i ETag существует, используйте его, в противном случае вернитесь к Last-Modified. - person Michael Stum; 26.09.2009

Действительно, вы хотите искать заголовок Last-Modified после выдачи запроса HEAD (а не GET). Я написал код для получения HEAD через WebClient здесь.

person Marc Gravell    schedule 25.09.2009
comment
Следует отметить, что не все сайты предоставляют правильный заголовок Last-Modified, даже если они должны правильно кэшировать свой сайт. - person Ben S; 25.09.2009
comment
Но вы мало что можете сделать, если сервер не играет по правилам. - person Bryan; 25.09.2009
comment
Если сервер не предоставляет правильные заголовки управления кешем (Last-Modified и т. д.), то невозможно определить, изменился ли файл с определенного времени, кроме его загрузки и сравнения содержимого. - person David Z; 25.09.2009

Вы можете выполнить запрос HEAD и проверить последнее измененное значение даты и времени, а также длину содержимого.

person D'Arcy Rittich    schedule 25.09.2009
comment
Спасибо за упоминание длины контента: это простая проверка, но отличный запасной вариант, если сервер настроен неправильно. - person Frank Krueger; 26.09.2009