2012-06-27 4 views
5

У меня есть программа на C++, работающая как скрипт CGI, и я использую Cgicc для выполнения некоторых синтаксических разборов и форматирования для меня (хотя в какой-то момент он, вероятно, будет заменен). При построении моего ответа, я использую cgicc::HttpResponseHeader, который создаст мне что-то вродеMalformed header из сценария. Плохой заголовок = HTTP/1.1 302 Найдено

HTTP/1.1 302 Found 
Location: www.bla.com 

Это выглядит довольно стандартным для меня. Тем не менее, Вебсервер дроссели на том, что, давая мне

<...> malformed header from script. Bad header=HTTP/1.1 302 Found: script.cgi 

Я узнал, как это исправить:

  1. Снимите HTTP/... линию вместо
  2. добавить строку Status: 302 Found

И фактически, это именно то, что делает cgicc::HttpRedirectHeader. У меня есть два вопроса:

  1. Это линия HTTP/1.1 302 Found не стандарт?
  2. Если это не так, то почему cgicc::HttpResponseHeader делать это? Если это так, почему мой веб-сервер задыхается?

Примечание. Я не ищу способы обойти это, я знаю, как это сделать. Я просто хочу понять, что происходит.

Приветствия Оле

ответ

5

HTTP линия стандарт HTTP, но не стандартный CGI.

В CGI сценарий использует заголовок Status для передачи статуса на веб-сервер, а веб-сервер строит строку ответа HTTP из этого кода состояния.

Почему cgicc строит линию HTTP Не знаю - возможно ли, что вы не должны использовать этот конкретный класс в этом контексте? Возможно, этот класс предназначен только для использования с скриптами nph? The documentation делает вид, что подразумевает - после описания набора стандартных классов ответа, он говорит:

cgicc :: HTTPResponseHeader является более мощным, общим классом заголовка HTTP используется для построения полного ответа HTTP.

Подразумевается, что это необычно использовать в обычном сценарии CGI.

+0

Хорошо, это объясняет это. Есть ли какой-либо способ для меня, используя CGI, указать, какую версию HTTP я хочу использовать (1.0/1.1)? Мне сейчас это не нужно, но из любопытства хотелось бы лучше понять CGI. – Ole

+0

Извините, я не знаю, позволяет ли стандартный CGI управлять этим. Вы можете взять весь процесс, используя скрипт 'nph', и в этом случае вы можете делать все, что вам нравится. – RichieHindle

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