[Cookies] Norme RFC 6265 : caractères spéciaux

Adieux accents

Le problème exposé dans ce sujet a été résolu.

Bonjour,

En codant sur Golang, je suis tombé sur un problème concernant les caractères spéciaux dans la valeur d’un cookie. En effet, ces caractères ne sont pas lus par le navigateur et la console du serveur affiche un message d’erreur spécifique à Go.

1
net/http: invalid byte 'Ã' in Cookie.Value; dropping invalid bytes

En regardant dans la documentation officielle, il apparait que Go utilise la norme RFC 6265 concernant les cookies. Je ne suis pas certain d’avoir bien interprété la page 8 de cette norme dont voici un extrait.

1
2
3
4
5
 cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
 cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
                       ; US-ASCII characters excluding CTLs,
                       ; whitespace DQUOTE, comma, semicolon,
                       ; and backslash

Cela veut dire que seuls les caractères unicode %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E sont autorisés comme valeurs "spéciales" dans la valeur du cookie ? Comment faire pour afficher les accents ?

Merci d’avance.

+0 -0

C’est pas recommandé, ce qui est recommandé c’est l’URL Encoding.

La raison à ça est que base64 utilise des =, et que certains clients interprètent ça comme le séparateur key=value présent dans les cookies. Le = dans est donc potentiellement ambigüe dans les clés.

+3 -0

Merci Victor pour cette info.

Du coup, j’ai utilisé la librairie officielle net/url.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
    "fmt"
    "net/url"
)

func main() {
    s := encode("À la pêche à la grenouille")
    fmt.Println(s) // %C3%80%20la%20p%C3%AAche%20%C3%A0%20la%20grenouille
    fmt.Println(decode(s))
}

// Encodage de la chaine de caractères
func encode(value string) string {
    encode := &url.URL{Path: value}
    return encode.String()
}

// Décodage de la chaine de caractères
func decode(value string) string {
    decode, _ := url.QueryUnescape(value)
    return decode
}
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte