2017-01-12 10 views
9

Существует 3d-участник API с конечной точкой http://endpoint/image_id который возвращает ответ с такими заголовками:Можно ли использовать источник с заголовком «Content-Disposition: attachment» как значение src для <img>?

content-disposition:attachment; filename=image.png 
content-length:27774 
content-type:image/png 

По словам MDN documentation,

В обычном ответе HTTP, то Content-Disposition ответ заголовок заголовок, указывающий, будет ли отображаться содержимое inline в браузере, то есть как веб-страница или как часть веб-страницы, или как приложение, которое загружается и сохраняется локально.

Тем не менее, я должен использовать его как это:

<img src="http://endpoint/image_id"> 

В Chrome, он хорошо работает для меня, у меня есть изображение, показанное. Но я сомневаюсь в этом. Это нормально?

+3

Я голосующий, чтобы закрыть этот вопрос не по теме, потому что он запрашивает [обзор кода] (http://codereview.stackexchange.com/help/on-topic). – Quentin

+0

@Quentin Мне кажется, что вы не прочитали ни ссылку, которую вы предоставили, ни мой вопрос (или, может быть, и то?), Потому что вопрос обычно применим, а не конкретный фрагмент кода. –

+0

Дело в том, что с некоторыми незначительными изменениями он был бы подходящим для проверки кода. – Quentin

ответ

1

Это работает, потому что хром достаточно умен, чтобы понять, что вы используете его внутри веб-страницы, и это не отображались какдиалоговое, но почему вы рискуете с помощью

content-disposition:attachment; 

вместо этого вы должны использовать :

Content-Disposition: inline 

также там был вопрос здесь на переполнение стека, который имел схожие ответы на ваш вопрос, объясняющие разницу между использованием прикрепленного вместо рядный взглянуть на утвержденный ответ на вопрос this.

+0

Проблема в том, t изменить этот заголовок, потому что он используется в другом месте для фактической загрузки изображений. –

+1

Вы можете сделать несколько HTTP-запросов один для загрузки этих изображений, а один для их использования inline –

-1

Если все в порядке или нет, это не так просто.
Это потому, что это подразумевает два разных стандарта. Спецификация HTML и Спецификация протокола HTTP. Таким образом, у него есть серый. Это зависит от того, как агент пользователя решает принять ответ.

Согласно стандарту http заголовок ответа указывает, что файл следует рассматривать как вложение.

Howewer здесь: https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

Также говорит: «Если этот заголовок используется в ответ с типом диспозиции„крепежного“ приложения/октет-поток контента типа, подразумеваемое предположение о том, что пользовательский агент не должен отображать ответ, но непосредственно вводит диалог «сохранить ответ как ...».

UPDATE: RFC 6266, не замечает, что ограничение о бытийного приложения/октет потока типа содержимого больше не нужен

Таким образом, ваш тип контента технически оставляет это решение агента пользователя (хром в этом случае), чтобы показать содержимое или нет.

Мы достигли сейчас своего рода баланса между браузерами, поэтому сегодня, чтобы сделать выбор мудрости, я бы рекомендовал провести кросс-браузерное тестирование.

В идеале это будет в вашем рабочем процессе CI с помощью какого-либо инструмента, такого как лаборатории suce или ваше собственное решение.

Другого быстрый выбор будет загрузить этот простой HTML пример некоторого хост как свободный GitHub репо и навигацию необработанного файла со страницы, как это: https://www.browserling.com/

, который позволяет перемещаться с различными операционными системами и браузерами конкретных URL-адрес.

+0

RFC 2616 абсолютно не имеет значения. См. RFC 6266. –

+0

@JulianReschke Я вижу, что вы написали RFC 6266, и я также вижу, что RFC 2616 просто документирует, как работает контент. Пожалуйста, не стесняйтесь предлагать, как лучше перефразировать ответ, чтобы мы могли предоставить более точную информацию. Спасибо btw – nico

+0

Важным моментом является то, что RFC 6266 не имеет специального приложения-приложения/октета-потока в любой форме. –