2.1.3. Campi HTTP avvolti in binario (Binary-Wrapped HTTP Fields)
2.1.3. Campi HTTP avvolti in binario (Binary-Wrapped HTTP Fields)
Se il valore del campo HTTP in questione è noto all'applicazione come causa di problemi con la serializzazione, in particolare con la combinazione di più valori in una singola riga come discusso nella Sezione 7.5.6, il firmatario DOVREBBE includere il parametro bs in un identificatore di componente per indicare che i valori del campo devono essere avvolti come strutture binarie prima di essere combinati.
Se questo parametro è incluso con un identificatore di componente, il valore del componente DEVE essere calcolato usando il seguente algoritmo:
-
Sia l'input l'insieme ordinato di valori per un campo, nell'ordine in cui compaiono nel messaggio.
-
Creare una List vuota per accumulare i valori di campo elaborati.
-
Per ogni valore di campo nell'insieme:
3.1. Rimuovere gli spazi bianchi iniziali e finali dal valore di campo. Si noti che poiché i valori dei campi HTTP non possono contenere spazi bianchi iniziali e finali, questo sarebbe un no-op in un'implementazione conforme.
3.2. Rimuovere qualsiasi line folding obsoleto nella riga e sostituirlo con un singolo spazio (" "), come discusso nella Sezione 5.2 di [HTTP/1.1]. Si noti che questo comportamento è specifico di [HTTP/1.1] e non si applica ad altre versioni della specifica HTTP.
3.3. Codificare i byte del valore di campo risultante come Byte Sequence. Si noti che la maggior parte dei campi è limitata a caratteri ASCII, ma altri ottetti potrebbero essere inclusi nel valore in alcune implementazioni.
3.4. Aggiungere la Byte Sequence all'accumulatore List.
-
Il risultato intermedio è una List di valori Byte Sequence.
-
Seguire la serializzazione rigorosa di una List come descritto nella Sezione 4.1.1 di [STRUCTURED-FIELDS], e restituire questo output.
Ad esempio, il seguente campo con virgole interne impedisce di combinare in sicurezza i distinti valori di campo:
Example-Header: value, with, lots Example-Header: of, commas
Nel nostro esempio, lo stesso campo può essere inviato con un singolo valore semanticamente diverso:
Example-Header: value, with, lots, of, commas
Entrambe queste versioni sono trattate diversamente dall'applicazione. Tuttavia, se incluso nella base della firma senza parametri, il valore del componente sarebbe lo stesso in entrambi i casi:
"example-header": value, with, lots, of, commas
Tuttavia, se si aggiunge il parametro bs, le due istanze separate sono codificate e serializzate come segue:
"example-header";bs: :dmFsdWUsIHdpdGgsIGxvdHM=:, :b2YsIGNvbW1hcw==:
Per il campo a singola istanza sopra, la codifica con il parametro bs è:
"example-header";bs: :dmFsdWUsIHdpdGgsIGxvdHMsIG9mLCBjb21tYXM=:
Questo valore di componente è distinto dal campo a istanze multiple sopra, impedendo una collisione che potrebbe essere sfruttata.