2013-07-07 14 views
14

Una risposta HTTP normale assomiglia:Una risposta HTTP può omettere la frase motivo?

HTTP/1.0 200 OK 

è ok di omettere ciò che il RFC chiama la Motivo Frasi? Qualcosa di simile:

HTTP/1.0 200 

La RFC dice:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF 
Reason-Phrase = *<TEXT, excluding CR, LF> 

ho capito questo come:

  • Una stringa vuota è OK per la ragione Frasi
  • Ma ci dovrebbe essere un spazio dopo lo Status-Code in ogni caso

Così il seguente sarebbe valido:

HTTP-Version SP Status-Code SP CRLF 

Ho capito bene il RFC?

+0

Perché omettere? Se stai cercando un risparmio di byte in scrittura, usa semplicemente [SPDY] (http://en.wikipedia.org/wiki/SPDY). – josh3736

+0

@josh Creazione di una libreria che consente all'utente di impostare il codice di risposta.Se l'utente imposta un codice di risposta esotiche, dovrei scegliere se lasciare la stringa vuota, impostare qualche re di Frase motivo 'UNKNOWN', o forzare l'utente a impostare anche la frase motivo. – Benjamin

+0

FWIW, la libreria HTTP di base di Node (e quindi la maggior parte delle cose costruite su di essa, come Express) [il default è inviando la stringa 'unknown' come Frase Motivo] (https://github.com/joyent/node/blob/v0. 10.12/lib/http.js # L1119) quando l'autore imposta un codice di stato esotico e non fornisce una stringa di motivazione. – josh3736

risposta

14

Sembra così, se si legge il * come 'zero o più caratteri', come nelle espressioni regolari.

Sembra avere un significato leggermente diverso se si legge la Notational Convention del RFC:

*rule

The character "*" preceding an element indicates repetition. The full form is "<n>*<m>element" indicating at least <n> and at most <m> occurrences of element. Default values are 0 and infinity so that "*(element)" allows any number, including zero; "1*element" requires at least one; and "1*2element" allows one or two.

Quindi anche se non è regex, il significato è essenzialmente la stesso. L'asterisco, che non ha un numero finale in questo caso, significa che possono esserci "0 o più" "testi". Strano modo di dirlo, ma sembra che tu abbia ragione.

In senso stretto, lo spazio è obbligatorio, anche se penso che un separatore potrebbe essere omesso se non c'è nulla da separare. Potrebbe uccidere i client che hanno un'implementazione rigorosa, tuttavia, se si limitano a suddividere questa stringa negli spazi e provare a leggere l'elemento in cui dovrebbe essere la descrizione. Ma poi di nuovo, quei client avrebbero dovuto usare una programmazione difensiva per catturare quella situazione. ;)

La RFC fa dire che può essere qualsiasi testo, purché sia ​​una descrizione leggibile dal punto di vista umano del problema. Questo testo è importante, poiché il client potrebbe non comprendere il significato esatto del codice di stato, quindi potrebbe essere necessario visualizzare il testo all'utente. Quindi, anche se puoi ometterlo, personalmente non lo farei.

+0

Grazie, è utile. – Benjamin

Problemi correlati