Тип содержимого text-plain вызывает загрузку файла браузером - PullRequest
13 голосов
/ 12 марта 2012

Я пишу API веб-приложения, где, когда кто-то обращается к URL, он возвращает текстовые данные.Я установил тип содержимого "text / plain", но когда я обращаюсь к нему с помощью Chrome, он загружает файл, содержащий информацию, а не отображает ее.Когда я обращаюсь к нему через IE, он отображается правильно, а когда я обращаюсь к Firefox, он говорит, что пытается получить доступ к потоку приложения / октету, и спрашивает меня, хочу ли я загрузить файл.

Iзаписал то, что было возвращено веб-сервером с помощью TinyHTTPProxy, и выглядит следующим образом:

[2012-03-11 16:51:45.345] INFO     {TinyHTTPProxy Thread-4} HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: close
Date: Mon, 05 Mar 2012 09:49:54 GMT
Server: localhost


[2012-03-11 16:51:45.345] INFO     {TinyHTTPProxy Thread-4} 10b
P,FIO,7,31.5900,0.,,0,100,0,0,30.7600,31.9600,100,1000,,,0.,16:03:14t,,0,31.5900    ,1.2,,,15,n,,,,,03/09/2012,,31.2200,,,,-0.37,-0.37,0.274456994,,,,,0,,2846732.85    ,14,4,,3989502,BSE-CSE-NYSE-PSE-NMS,,,,,0,,,0,1155872,N,,26,26,26,16:03:14,5-7-10-11-12-13-18-25-26-28-80,0

Если я изменю тип контента на «application-json», то он отображается во всех браузерах.Кроме того, если я изменяю тип содержимого на «text / html», он также работает, даже если я не возвращаю файл HTML.

Есть ли объяснение, почему text / plain ведет себя так?Я проверил, чтобы убедиться, что все возвращаемые данные на самом деле являются ASCII, и, поскольку я устанавливаю тип содержимого как text / plain, я запутался, почему он интерпретируется как application / octet-stream.

Ответы [ 2 ]

9 голосов
/ 25 октября 2013

Объяснение Лоуренса верно.Только IE и Chrome во время этого поста нюхают пантомиму.Теперь вы можете просто установить HTTP-заголовок X-Content-Type-Options: nosniff, и это поможет!

8 голосов
/ 12 марта 2012

Похоже, вы столкнулись с Chrome Issue 106150 .Chrome, по-видимому (иногда) решает использовать логику «сниффинга», когда тип содержимого является text / plain.

Возможные обходные пути:

  • Отправка заголовка X-Content-Type-Options: nosniff.
  • Если текст Unicode, включите спецификацию.Это скажет логике сниффинга, что это действительно текст.
  • Удалите «двоичные» байты из файла.Из сообщения об ошибке «Любое значение от 0x00 до 0x1f выглядит двоичным , за исключением для ESC, CR, NP, NL, HT».
  • Звучит как использование расширения, которое, очевидно, должно быть текстом/ plain (например, .txt) может отключить сниффинг.
...