Um URL é http://example.com/foo?bar
válido?
Estou procurando um link para algo oficial que diga de uma forma ou de outra. Uma resposta sim / não simples ou uma evidência anedótica não será suficiente.
url
query-parameters
Conley Owens
fonte
fonte
Respostas:
O URI RFC não exige um formato para a cadeia de caracteres de consulta. Embora seja reconhecido que a string de consulta geralmente carrega pares nome-valor, não é necessário (por exemplo, geralmente conterá outro URI).
O HTML estabelece que um formulário enviado via HTTP GET deve codificar os valores do formulário como pares nome-valor no formato "? Key1 = value1 & key2 = value2 ..." (codificado corretamente). A análise da sequência de consultas depende do código do servidor (por exemplo, mecanismo de servlet Java).
Você não identifica a estrutura do lado do servidor que usa, se houver, mas é possível que a estrutura do lado do servidor assuma que a cadeia de caracteres de consulta sempre estará em pares nome-valor e pode engasgar com uma cadeia de caracteres de consulta que não seja nesse formato (por exemplo
?bar
). Se for seu próprio código personalizado, analisando a sequência de consultas, basta garantir que você lide com esse formato de sequência de consultas. Se for uma estrutura, você precisará consultar sua documentação ou simplesmente testá-la para ver como ela é tratada.fonte
isindex
mágicaname
do HTML5 permite o envio de uma string de consulta sem o formato de valor-chave stackoverflow.com/a/37579004/895245Eles são perfeitamente válidos. Você poderia considerá-los o equivalente ao grande homem musculoso parado silenciosamente atrás do mensageiro da máfia. O cara não tem nome e não fala, mas sua mera presença transmite informações.
fonte
"O esquema" http "é usado para localizar recursos de rede por meio do protocolo HTTP. Esta seção define a sintaxe e a semântica específicas do esquema para URLs http." http://www.w3.org/Protocols/rfc2616/rfc2616.html
Então, sim, qualquer coisa é válida após um ponto de interrogação. Seu servidor pode interpretar de maneira diferente, mas, curiosamente , você pode ver alguns idiomas tratando isso como um valor booleano que é verdadeiro se listado.
fonte
Sim, é válido.
Se alguém quiser simplesmente verificar se o parâmetro existe ou não, esta é uma maneira de fazê-lo.
fonte
Especificação de URI
A única parte relevante da especificação do URI é saber tudo entre o primeiro
?
e o primeiro#
se encaixa na definição de consulta da especificação. Pode incluir caracteres como[:/.?]
. Isso significa que uma string de consulta como?bar
, ou?ten+green+apples
é válida.Encontre o RFC 3986 aqui
Especificações HTML
isindex
não é significativamente HTML5.Ele foi descontinuado para uso como o primeiro elemento apenas de um formulário e é enviado sem um nome.
A última vez que isindex foi suportado foi HTML3 . Seu uso no HTML5 é fornecer compatibilidade retroativa mais fácil.
Suporte em bibliotecas
O suporte nas bibliotecas para este formato de URI varia, no entanto, algumas bibliotecas fornecem suporte legado para facilitar o uso
isindex
.Perl URI.pm (suporte especial)
Algumas bibliotecas como o URI do Perl fornecem métodos para analisar esse tipo de estrutura
Node.js
url
(sem suporte especial)Como outro exemplo muito mais frequente,
node.js
segue a rota normal e facilita a análise, poisparseQueryString
)A maioria das outras APIs de análise de URI segue algo semelhante a isso.
parse_url
segue uma implementação semelhante, mas retorna apenas a string da consulta. A análise em um objeto dek=>v
requerparse_string()
fonte
É válido: consulte Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Componentes de sintaxe) .
fonte
isindex
magia obsoletaname
do HTML5Esse recurso descontinuado permite que um envio de formulário gere esse URL, fornecendo mais evidências de que ele é válido para HTML. Por exemplo:
gera um URL do tipo:
Padrão: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
é, no entanto, preterido, conforme mencionado em: https://stackoverflow.com/a/41689431/895245fonte
Como todas as outras respostas descritas, é perfeitamente válido para verificação, especialmente para coisas do tipo booleano
Aqui está uma função simples para obter a string de consulta pelo nome:
e agora você deseja verificar se a string de consulta que você procura existe ou não, faça algo simples como:
o
exampleQueryString
seráfalse
se a função não consegue encontrar a string de consulta, caso contrário serátrue
.fonte