Почему я не могу просто добавить Content-Type: text / html в текстовый файл, когда Python может? - PullRequest
2 голосов
/ 21 октября 2011

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

Content-Type:text/html

<html>
<head><title>Hello</title></head>
<body>
<h1>Hello, World!</h1>
</body>
</html>

в файле с именем test.txt и откройте его в моем браузере как HTML, когда скрипт Python может сделать это:

#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! This is my first CGI program</h2>'
print '</body>'
print '</html>'

и все работает отлично. Я не вижу никакой разницы, они оба печатают Content-Type:text/html вверху информации, запрошенной браузером.

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

HTTP-ответ состоит из заголовков и тела, разделенных первым полученным \r\n\r\n. К тому времени, когда веб-сервер отправляет обычный файл, он уже отправил все заголовки и разделитель.
Однако при запуске сценария заголовки не отправляются автоматически.

Итак, в первом случае ваш веб-сервер угадал тип содержимого по расширению и отправил соответствующие заголовки перед отправкой содержимого файла. Во втором сценарий отправляет переопределяющий заголовок для типа содержимого. Затем веб-сервер решает, как это сделать, с точки зрения вставки других стандартных заголовков http.

EDIT: Apache использует mod_mine и /etc/mime.types для сопоставления расширений файлов с типами содержимого. Вероятно, по умолчанию это text / plain для всего, что не имеет расширения, которое оно понимает.

Возможно, браузер отключит расширение, только если у него нет типа содержимого для использования.

Предполагается, что простые файлы содержат только данные, а заголовки генерируются веб-сервером, в то время как сценарии cgi ожидают / могут генерировать свои собственные заголовки.

3 голосов
/ 21 октября 2011

Когда браузеры читают напрямую из файла, они не ищут заголовки http. Когда скрипт Python отвечает на http-запрос браузера, это не так, и браузер ожидает, что первые строки будут заголовками http, которые затем интерпретируются так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...