2009-05-26 2 views
0

У меня возникла странная проблема, возможно, что-то связанное с Apache больше, чем у Perl. В моем коде, когда я пишу:Почему мой заголовок CGI печатается как часть тела?

print "content-type: text/html\n\n"; 

оно печатает это вместе с кодом. Но когда я набираю:

$c = new CGI; $c->header(); 

он отлично работает и отображает вывод HTML.

В чем проблема?

Спасибо

+0

Уменьшите свою программу до наименьшего примера, демонстрирующего проблему, а затем покажите нам это. Существует так много, что можно было бы сделать, чтобы вытащить пару линий, не поможет нам помочь вам. :) –

ответ

1

Имейте в виду, HTTP RFC определяет, что

\r\n 

используется для линейных разделителей, не

\n 

так что вы хотите быть излучающий

print "Content-Type: text/html\r\n\r\n"; 

Вместо.

Вы должны использовать только ->headers, хотя для этого вам нужно.

Кроме того, обратите внимание, что я использовал Camel-Case вместо нижнего регистра. Хотя оба должны работать, Camel-Case - это обозначение, используемое в спецификации, так что это предпочтительнее и с большей вероятностью работать на странных UA.

2

Является ли "Content-Type: текст/html" очень первая вещь, которая выход? Используйте wget или аналогичный, чтобы проверить фактический вывод; не доверяйте своим глазам или источнику просмотра браузера.

Также обратите внимание, что в режиме mod_perl CGI вызывает метод send_cgi_header запроса, а не только печать заголовков.

Возможно ли, что вы используете заголовок CGI() в нескольких местах? Это безобидно, но замена только одного вызова header() с явной печатью заголовка даст результаты, которые вы видите.

+0

Да, тот же код работает с использованием cgi. так что странно :( –

+0

@Alec Smart: этот комментарий не кажется ответом на то, что я сказал ??? – ysth

Смежные вопросы