Vários parâmetros de solicitação HTTP GET
-
03-07-2019 - |
Pergunta
são URLs do formulário http://asdf.com/something.do ? param1 = true? param2 = false válido?
Eu não acho que o segundo? é permitido em URLs válidos e que deve, em vez ser um comercial (&), mas eu sou incapaz de encontrar qualquer coisa sobre isso no HTTP 1.1 RFC. Alguma idéia?
Solução
Não é válida para usar? novamente. ? deve indicar o início da lista de parâmetros. & Deve separar os parâmetros.
A partir RFC 3986 :
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
A partir RFC 1738 :
Uma URL HTTP toma a forma:
http:// <host> : <port> / <path> ? <searchpart>
onde
<host>
e<port>
são como descrito na Seção 3.1. Se:<port>
é omitido, o padrão de porta para o nome de usuário ou senha 80. Não é permitido.<path>
é um seletor HTTP, e<searchpart>
é uma consulta corda. O<path>
é opcional, como é o<searchpart>
e sua anterior "?". Se nem<path>
nem<searchpart>
estiver presente, o "/" também podem ser omitidos.Dentro dos componentes
<path>
e<searchpart>
, "/", ";", "?" estão reservado. O caractere "/" pode ser usado dentro de HTTP para designar um estrutura hierárquica.
Outras dicas
uso e para o segundo e terceiro
application / x-www-form-urlencoded
Este é o tipo de conteúdo padrão. Formulários enviados com este tipo de conteúdo deve ser codificado como segue:
- nomes e valores de controle são escapou. caracteres de espaço são substituídos por
+
, e os personagens, então reservados são escapados como descrito em [RFC1738], secção 2.2: caracteres não alfanuméricos são substituídos por%HH
, um sinal de porcentagem e dois dígitos hexadecimais que representam o código ASCII do caractere. Quebras de linha são representadas como pares "CR LF" (ou seja,%0D%0A
).- Os nomes de controlo / valores são listados na ordem em que aparecem no documento. O nome é separado do valor por
=
e pares nome / valor são separados um do outro por&
.
Como mencionado, não é válido para usá-lo novamente. No entanto, se você tem a? caráter como parte de um valor de parâmetro, você pode codificá-lo como% 63 (assim como o caractere de espaço que fica codificados como% 20).