2012-06-27 8 views
5

Ho un programma C++ che agisce come uno script CGI e attualmente sto usando Cgicc per eseguire l'analisi e la formattazione per me (anche se sarà probabilmente sostituito in qualche momento). Nel costruire la mia risposta, io uso cgicc::HttpResponseHeader, che mi creare qualcosa di simileIntestazione non corretta dallo script. Intestazione errata = HTTP/1.1 302 Trovata

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

Questo sembra piuttosto standard per me. Tuttavia, il Webserver soffoca su questo, dandomi una

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

ho scoperto come risolvere questo problema:

  1. rimuovere la linea HTTP/...
  2. Aggiungi invece una linea Status: 302 Found

E infatti, questo è esattamente ciò che fa cgicc::HttpRedirectHeader. Ho ora due domande:

  1. Questa riga è HTTP/1.1 302 Found non standard?
  2. Se non lo è, perché è cgicc::HttpResponseHeader farlo? Se lo è, perché il mio server web si soffoca su di esso?

Nota Non sto cercando modi per aggirare questo, so come farlo. Voglio solo capire cosa sta succedendo.

Acclamazioni Ole

risposta

5

La linea HTTP è HTTP standard, ma non CGI standard.

In CGI, lo script utilizza un'intestazione Status per comunicare lo stato al server Web e il server Web crea la riga di risposta HTTP da tale codice di stato.

Perché cgicc sta costruendo la linea HTTP Non so - è possibile che non si debba utilizzare quella particolare classe in quel contesto? Forse quella classe è utilizzabile solo con gli script nph? The documentation fa tipo di implica che - dopo aver descritto l'insieme di classi di risposta standard, si dice:

cgicc :: HTTPResponseHeader è un più potente classe generica, un'intestazione HTTP utilizzato per costruire una risposta completa HTTP.

L'implicazione è che è insolito utilizzarlo in un normale script CGI.

+0

Ok, questo lo spiega. C'è qualche modo per me, usando CGI, per specificare quale versione HTTP voglio usare (1.0/1.1)? Non ne ho davvero bisogno adesso, ma per curiosità vorrei capire meglio la CGI. – Ole

+0

Mi dispiace, non so se CGI standard ti permette di controllarlo. Puoi prendere il controllo dell'intero processo usando uno script 'nph', nel qual caso puoi fare tutto quello che vuoi. – RichieHindle

Problemi correlati