2012-06-27 10 views
5

Tengo un programa C++ que actúa como script CGI, y actualmente estoy usando Cgicc para hacer algunos de los análisis sintácticos y de formateo para mí (aunque probablemente será reemplazado en algún momento). Al construir mi respuesta, yo uso cgicc::HttpResponseHeader, lo que me va a crear algo así comoEncabezado mal formado del script. Bad header = HTTP/1.1 302 Found

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

Esto parece bastante normal para mí. Sin embargo, el servidor web se ahoga con eso, yo un

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

dando descubrí cómo solucionar este problema:

  1. quitar la línea HTTP/...
  2. Añadir lugar una línea Status: 302 Found

Y de hecho, eso es exactamente lo que hace cgicc::HttpRedirectHeader. Tengo ahora dos preguntas:

  1. ¿Esta línea HTTP/1.1 302 Found no es estándar?
  2. Si no lo es, ¿por qué se hace cgicc::HttpResponseHeader? Si es así, ¿por qué mi servidor web se atraganta con él?

Nota No estoy buscando formas de evitar esto, sé cómo hacerlo. Solo quiero entender qué está pasando.

Saludos Ole

Respuesta

5

La línea HTTP es estándar HTTP, pero no CGI estándar.

En CGI, el script utiliza un encabezado Status para comunicar el estado al servidor web, y el servidor web construye la línea de respuesta HTTP a partir de ese código de estado.

¿Por qué cgicc está construyendo la línea HTTP? No sé - ¿es posible que no se suponga que deba usar esa clase en particular en ese contexto? Tal vez esa clase solo se use con scripts nph? The documentation qué tipo de implica que - después de describir el conjunto de clases de respuesta estándar, que dice:

cgicc :: HTTPResponseHeader es una clase más poderosa, genérica cabecera HTTP utilizado para construir una respuesta HTTP completa.

La consecuencia es que es inusual usar eso en una secuencia de comandos CGI normal.

+0

Bien, eso lo explica. ¿Hay alguna forma para mí, usando CGI, para especificar qué versión de HTTP quiero usar (1.0/1.1)? Realmente no necesito eso ahora, pero por curiosidad quisiera entender mejor CGI. – Ole

+0

Lo siento, no sé si la CGI estándar te permite controlar eso. Puede hacerse cargo de todo el proceso utilizando un script 'nph', en cuyo caso puede hacer lo que quiera. – RichieHindle

Cuestiones relacionadas