Na especificação HTTP, qual é a string que separa os cookies?
-
27-10-2019 - |
Pergunta
Ponto-e-vírgula ;
, a string Cookie:
ou alguma outra string?
Solução
Inspecionando cookies em uma solicitação HTTP
O cabeçalho Cookie:
tem a seguinte sintaxe:
Cookie: <Name> = <Value> { ; <Name> = <Value> }
Portanto, os cookies individuais são separados por ponto e vírgula.
Definindo cookies em uma resposta HTTP
Por outro lado, ao definir um cookie na resposta, há um cookie para o cabeçalho Set-Cookie:
:
Set-Cookie: <Name> = <Value> [ ; expires = <Date>] [ ; path = <Path> ] [ ; domain = <Domain> ] // etc…
Para definir vários cookies, o cabeçalho Set-Cookie
é repetido em uma resposta HTTP.
Observações:
- Dê uma olhada aqui para um tutorial com exemplos e RFC 6265 HTTP State Management Mechanism para uma referência normativa que mostra os detalhes completos da sintaxe.
- O agora obsoleto RFC 2965 definiu um par alternativo de cabeçalhos
Cookie2
eSet-Cookie2
que foram abandonados . - As versões obsoletas do HTTP State Management Mechanism ( RFC 2109 e RFC 2965 ) forneceu uma maneira de juntar vários cabeçalhos
Set-Cookie
(ouSet-Cookie2
) em um. No entanto, essa dobradura não é recomendada pela última especificação RFC 6265 .
Outras dicas
A resposta é um sinal de código genérico de vírgula.
Na seção 4.2.2 de RFC 2109 há esta especificação de cabeçalho ,
set-cookie = "Set-Cookie:" cookies
cookies = 1#cookie
com a seguinte declaração Informalmente, o cabeçalho de resposta Set-Cookie compreende o token Set-Cookie :, seguido por uma lista separada por vírgulas de um ou mais cookies. (significado formal de Set-Cookie
acima a notação é definida em RFC 733 na seção A. CONVENÇÕES NOTACIONAIS , ponto 5
Uma construção "#" é definida, semelhante a "*", como segue:
<l>#<m>element
indicando pelo menos
#
e no máximo elementos<l>
, cada um separado por uma ou mais vírgulas (",").
Sim, o RFC 2109 foi obsoleto pelo RFC 2965, que por sua vez tornou-se obsoleto pelo RFC 6265 .
Não, isso não muda nada neste contexto, como
- a maioria dos servidores e clientes HTTP existentes são compatíveis com RFC 2109
- RFC 6265 não proíbe dobradura
<m>