Пишем свой HTTP сервер. Распознать download файла.
От: Dimatec  
Дата: 10.06.17 15:06
Оценка: -1
В HTML есть такие теги:

<a download href= ...>
и
<a href= ...>

по первому тегу браузер должен понимать, что он будет загружать файл по указанной ссылке.
Но на самом деле это зависит от того, какой ответ отдаст 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 файла.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.06.17 15:28
Оценка:
Здравствуйте, Dimatec, Вы писали:

D>Но как понять web-серверу, что клиент именно жмакнул по ссылке, чтобы скачать файл?


Я не совсем понимаю, зачем это вообще различать. Как он ещё может попасть на эту ссылку?
Скопировать? Ну пусть копирует, если хочет. Чем это вредно?

D>Не могли что ли изобретатели html в запрос встроить ключевые слова...


Видимо, они полагали, что возможности строить URI достаточно
Добавьте к URL по ссылке что-то вроде ?mode=download
The God is real, unless declared integer.
Re: Пишем свой HTTP сервер. Распознать download файла.
От: vsb Казахстан  
Дата: 10.06.17 15:36
Оценка: 5 (2) +3
Непонятно, что вы хотите сделать и в чём проблема. Отобразить или скачать — с точки зрения HTTP нет никакой разницы, это браузер решает, в зависимости от разных факторов. Сервер отдаёт те байты, которые у него запрашивает клиент. Если браузер может отобразить данный тип и юзер специально не просит скачать, он отобразит, если не может — скачает. Например какой-то браузер умеет рисовать PDF и отобразит его, какой-то не умеет и скачает его. Юзер тыкнул по ссылке правой кнопкой и выбрал "Сохранить файл по ссылке" — браузер сохранит этот ресурс, даже если там обычный HTML.
Re[2]: Пишем свой HTTP сервер. Распознать download файла.
От: Pasha1st  
Дата: 12.06.17 14:20
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Непонятно, что вы хотите сделать и в чём проблема. Отобразить или скачать — с точки зрения HTTP нет никакой разницы, это браузер решает, в зависимости от разных факторов. Сервер отдаёт те байты, которые у него запрашивает клиент. Если браузер может отобразить данный тип и юзер специально не просит скачать, он отобразит, если не может — скачает. Например какой-то браузер умеет рисовать PDF и отобразит его, какой-то не умеет и скачает его. Юзер тыкнул по ссылке правой кнопкой и выбрал "Сохранить файл по ссылке" — браузер сохранит этот ресурс, даже если там обычный HTML.


Дополню. Сервер может отдать MIME-тип файла через Content-Type. Обычно как раз по расширению отдаваемого файла. Или если данные отдаются скриптом — от сам этот заголовок выставит. Это будет подсказкой браузеру что именно в этих данных, а дальше всё равно браузеру решать — предложить скачать или попытаться отобразить.
Re: Пишем свой HTTP сервер. Распознать download файла.
От: GarryIV  
Дата: 12.06.17 15:27
Оценка: -1 :)
Здравствуйте, Dimatec, Вы писали:

Может не надо, а? Сервер писать в смысле. Их же написано в ассортименте.

D>Не могли что ли изобретатели html в запрос встроить ключевые слова...


Потому что HTML это только для клиента, для сервера HTTP.
WBR, Igor Evgrafov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.