по первому тегу браузер должен понимать, что он будет загружать файл по указанной ссылке.
Но на самом деле это зависит от того, какой ответ отдаст web-сервер.
Он может так отдать файл, как содержимое, которое браузер должен открыть в свое окне, а не скачать.
Но как понять web-серверу, что клиент именно жмакнул по ссылке, чтобы скачать файл?
Вот, к примеру, запросы которые приходят в web-сервер
GET / HTTP/1.1..Accept: text/html, application/xhtml+xml, */*..
GET /www/files/file.txt HTTP/1.1..Accept: text/html, application/xhtml+xml, */*..
первый это просто запрос страницы по умолчанию
Второй это по ссылке <a download href= ...> или <a href= ...>
как видим второй запрос не отличается от того, жмем ли мы по ссылке, чтобы открыть ее или скачать файл.
Как быть?
Неужели парсить подстроку идущую после GET /www/files/file.txt на предмет поиска расширения файла.
И к примеру если хвост будет не .htm или .html или другое предопределенное расширение, то значит считать, что пришел запрос на загрузку файла?
Как-то неудобно...
Не могли что ли изобретатели html в запрос встроить ключевые слова...
Re: Пишем свой HTTP сервер. Распознать download файла.
Здравствуйте, Dimatec, Вы писали:
D>Но как понять web-серверу, что клиент именно жмакнул по ссылке, чтобы скачать файл?
Я не совсем понимаю, зачем это вообще различать. Как он ещё может попасть на эту ссылку?
Скопировать? Ну пусть копирует, если хочет. Чем это вредно?
D>Не могли что ли изобретатели html в запрос встроить ключевые слова...
Видимо, они полагали, что возможности строить URI достаточно
Добавьте к URL по ссылке что-то вроде ?mode=download
The God is real, unless declared integer.
Re: Пишем свой HTTP сервер. Распознать download файла.
Непонятно, что вы хотите сделать и в чём проблема. Отобразить или скачать — с точки зрения HTTP нет никакой разницы, это браузер решает, в зависимости от разных факторов. Сервер отдаёт те байты, которые у него запрашивает клиент. Если браузер может отобразить данный тип и юзер специально не просит скачать, он отобразит, если не может — скачает. Например какой-то браузер умеет рисовать PDF и отобразит его, какой-то не умеет и скачает его. Юзер тыкнул по ссылке правой кнопкой и выбрал "Сохранить файл по ссылке" — браузер сохранит этот ресурс, даже если там обычный HTML.
Re[2]: Пишем свой HTTP сервер. Распознать download файла.
Здравствуйте, vsb, Вы писали:
vsb>Непонятно, что вы хотите сделать и в чём проблема. Отобразить или скачать — с точки зрения HTTP нет никакой разницы, это браузер решает, в зависимости от разных факторов. Сервер отдаёт те байты, которые у него запрашивает клиент. Если браузер может отобразить данный тип и юзер специально не просит скачать, он отобразит, если не может — скачает. Например какой-то браузер умеет рисовать PDF и отобразит его, какой-то не умеет и скачает его. Юзер тыкнул по ссылке правой кнопкой и выбрал "Сохранить файл по ссылке" — браузер сохранит этот ресурс, даже если там обычный HTML.
Дополню. Сервер может отдать MIME-тип файла через Content-Type. Обычно как раз по расширению отдаваемого файла. Или если данные отдаются скриптом — от сам этот заголовок выставит. Это будет подсказкой браузеру что именно в этих данных, а дальше всё равно браузеру решать — предложить скачать или попытаться отобразить.
Re: Пишем свой HTTP сервер. Распознать download файла.