[rfc] Onduidelijkheden in rfc HTTP 1.1

Pagina: 1
Acties:

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Voor mijn webserver ben ik rfc 2616 (HTTP 1.1) aan het doorploegen.

Daarin ben ik nu al op drie onduidelijkheden gestuit:

quote: pagina 14
implied *LWS
The grammar described by this specification is word-based. Except
where noted otherwise, linear white space (LWS) can be included
between any two adjacent words (token or quoted-string), and
between adjacent words and separators, without changing the
interpretation of a field. At least one delimiter (LWS and/or
separators) MUST exist between any two tokens (for the definition
of "token" below), since they would otherwise be interpreted as a
single token.
(Een token is alles behalve control characters en separators (lange lijst).)
Ik ben onzeker of er tussen twee tokens ook twee keer LWS direct na elkaar mag (dat is niet hetzelfde als één keer LWS!). Ik ga er voorlopig maar van uit dat dat niet mag. Een ander probleem is dan of er ook LWS mag tussen twee tokens als een van beide een expliciete LWS is. Je zou intuïtief zeggen van niet, maar dat vermoeden zie ik nergens in de rfc bevestigd.

• Als je bovenstaande regel toepast op deze definitie
quote: pagina 17
HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
, moet je concluderen dat voor en na de "." LWS moet (dat is de "MUST" bij het vorige punt) ("." is geen separator). Voor zover ik weet wordt dat echter nooit gedaan: het is altijd "HTTP/1.1" zonder spaties. Hoe zit dat?
Iets dergelijks doet zich even verder (pagina 18) voor: daar staat impliciet dat URI's LWS mogen bevatten op een paar punten (let op: die white space maakt dus geen deel uit van de URI!). Daar kan ik op zich mee leven, maar ik betwijfel toch of dat werkelijk zo bedoeld is.

• Een vervelende dubbelzinnigheid zit in het volgende:
quote: pagina 16
A string of text is parsed as a single word if it is quoted using
double-quote marks.

quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext = <any TEXT except <">>

The backslash character ("\") MAY be used as a single-character
quoting mechanism only within quoted-string and comment constructs.

quoted-pair = "\" CHAR
Hoe moet je namelijk de quoted string "\\" interpreteren? De backslash is een geldig karakter van TEXT en dus ook van qdtext, dus het kunnen twee backslashes zijn, maar het kan net zo goed één geëscapete backslash zijn.
Als ik mocht kiezen, zou ik backslashes niet toelaten in qdtext, zodat je ze altijd moet escapen, maar ja, wat is dat waard?

Pas op pagina 20, en nu al onduidelijkheid. Dat belooft niet veel goeds :/.

Pas de replâtrage, la structure est pourrie.


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Apollo_Futurae schreef op 23 juli 2004 @ 01:49:
Voor mijn webserver ben ik rfc 2616 (HTTP 1.1) aan het doorploegen.

Daarin ben ik nu al op drie onduidelijkheden gestuit:

• Except
where noted otherwise, linear white space (LWS) can be included
between any two adjacent words (token or quoted-string), and
between adjacent words and separators, without changing the
interpretation of a field.
[...]
Als je dit nou eens leest als:

Except where noted otherwise, linear white space (LWS) can be included between any two adjacent token or quoted-string words, and between adjacent words and separators, without changing the interpretation of a field.

wordt hij vast al een stuk duidelijker. Een woord kan een een quoted string woord zijn, of een token woord. De eerste bestaat uit een gequote string, de tweede uit een serie opeenvolgende tokens zonder separators ertussen.

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
jochemd schreef op 23 juli 2004 @ 02:38:
Als je dit nou eens leest als:

Except where noted otherwise, linear white space (LWS) can be included between any two adjacent token or quoted-string words, and between adjacent words and separators, without changing the interpretation of a field.

wordt hij vast al een stuk duidelijker. Een woord kan een een quoted string woord zijn, of een token woord. De eerste bestaat uit een gequote string, de tweede uit een serie opeenvolgende tokens zonder separators ertussen.
Het begrip "token word" vind ik vergezocht (en wordt verder in de rfc niet gebruikt, voor zover ik kan zien). En wat scheidt twee tokens van zo'n token word, als het geen separator is? Dat kan alleen nog een control character zijn :??

Pas de replâtrage, la structure est pourrie.


  • sjokki
  • Registratie: Juli 2002
  • Niet online
1.1 is één token

token := 1*<any CHAR except CTLs or separators>

Verwijderd

Er staat inderdaad "for the definition of token below", en dat is de definitie die door sjokki aangehaald is. Inderdaad, "." is géén separator :-

code:
1
2
3
4
       separators     = "(" | ")" | "<" | ">" | "@"
                      | "," | ";" | ":" | "\" | <">
                      | "/" | "[" | "]" | "?" | "="
                      | "{" | "}" | SP | HT


Bovendien zou ik zeggen dat je zoveel LWS tussen twee tokens mag gooien als je wilt, zolang het er op zijn minst één is :-
implied *LWS (Let op de *)
The grammar described by this specification is word-based. Except
where noted otherwise, linear white space (LWS) can be included
between any two adjacent words (token or quoted-string), and
between adjacent words and separators, without changing the
interpretation of a field.
De opmerking over de backslashes is tamelijk ambigu, want er staat dat je backslashes MAG gebruiken om te escapen. Je MAG ze dus ook niet gebruiken om te escapen... beetje raar, want nu weet je dus niet wat je met een bs moet. Of zouden ze bedoelen dat je die backslash MOET lezen als een escape character (geïmpliceerd), maar dat hij alleen gebruikt MAG worden in een quoted-string... :? ?

[ Voor 63% gewijzigd door Verwijderd op 23-07-2004 09:56 ]


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Bedankt voor jullie reacties :).
sjokki schreef op 23 juli 2004 @ 03:54:
1.1 is één token

token := 1*<any CHAR except CTLs or separators>
Inderdaad, stom van me.
Verwijderd schreef op 23 juli 2004 @ 09:48:
Bovendien zou ik zeggen dat je zoveel LWS tussen twee tokens mag gooien als je wilt, zolang het er op zijn minst één is :-
[...] Let op de * [...]
Dat is een goed punt.
De opmerking over de backslashes is tamelijk ambigu, want er staat dat je backslashes MAG gebruiken om te escapen. Je MAG ze dus ook niet gebruiken om te escapen... beetje raar, want nu weet je dus niet wat je met een bs moet. Of zouden ze bedoelen dat je die backslash MOET lezen als een escape character (geïmpliceerd), maar dat hij alleen gebruikt MAG worden in een quoted-string... :? ?
Is er niemand die hier het antwoord op weet?

Pas de replâtrage, la structure est pourrie.


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
ik heb de rfc niet doorgelezen, maar is LWF niet gedefinieerd als een reeks van een of meer spaties|tabs|newlineswhatever-tekens ?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Grijze Vos schreef op 25 juli 2004 @ 18:53:
ik heb de rfc niet doorgelezen, maar is LWF niet gedefinieerd als een reeks van een of meer spaties|tabs|newlineswhatever-tekens ?
Nee, het is
code:
1
LWS = [CRLF] 1*( SP | HT )
. In woorden: eventueel één crlf, gevolgd door één of meer spaties/tabs.

Pas de replâtrage, la structure est pourrie.

Pagina: 1