Непонятно, что вы хотите сделать и в чём проблема. Отобразить или скачать — с точки зрения HTTP нет никакой разницы, это браузер решает, в зависимости от разных факторов. Сервер отдаёт те байты, которые у него запрашивает клиент. Если браузер может отобразить данный тип и юзер специально не просит скачать, он отобразит, если не может — скачает. Например какой-то браузер умеет рисовать PDF и отобразит его, какой-то не умеет и скачает его. Юзер тыкнул по ссылке правой кнопкой и выбрал "Сохранить файл по ссылке" — браузер сохранит этот ресурс, даже если там обычный HTML.
Re: Пишем свой HTTP сервер. Распознать download файла.
по первому тегу браузер должен понимать, что он будет загружать файл по указанной ссылке.
Но на самом деле это зависит от того, какой ответ отдаст 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[2]: Пишем свой HTTP сервер. Распознать download файла.
Здравствуйте, vsb, Вы писали:
vsb>Непонятно, что вы хотите сделать и в чём проблема. Отобразить или скачать — с точки зрения HTTP нет никакой разницы, это браузер решает, в зависимости от разных факторов. Сервер отдаёт те байты, которые у него запрашивает клиент. Если браузер может отобразить данный тип и юзер специально не просит скачать, он отобразит, если не может — скачает. Например какой-то браузер умеет рисовать PDF и отобразит его, какой-то не умеет и скачает его. Юзер тыкнул по ссылке правой кнопкой и выбрал "Сохранить файл по ссылке" — браузер сохранит этот ресурс, даже если там обычный HTML.
Дополню. Сервер может отдать MIME-тип файла через Content-Type. Обычно как раз по расширению отдаваемого файла. Или если данные отдаются скриптом — от сам этот заголовок выставит. Это будет подсказкой браузеру что именно в этих данных, а дальше всё равно браузеру решать — предложить скачать или попытаться отобразить.