Recursos ocultos de HTTP

85

Quais recursos ocultos do HTTP você acha que vale a pena mencionar?

Por recursos ocultos, quero dizer recursos que já fazem parte do padrão, mas amplamente desconhecidos ou não utilizados.

Apenas um recurso por resposta, por favor.

Gumbo
fonte

Respostas:

124

Deve ser o código de status 418 I'm a bule de chá , parte do Hyper Text Coffee Pot Control Protocol (uma extensão para HTTP). Me faz rir o tempo todo.

2.3.2 418 Eu sou um bule

Qualquer tentativa de preparar café com um bule de chá deve resultar no código de erro "418 I'm a bule". O corpo da entidade resultante PODE ser curto e robusto.

Greg Beech
fonte
3
Na verdade, implementei esse status em um script para quando nenhum outro status for apropriado.
ausência de pálpebras
4
Do RFC: "O corpo da entidade resultante PODE ser curto e robusto."
Piskvor saiu do prédio em
2
Eu escrevi meu próprio servidor HTTP e certifiquei-me de implementá-lo.
Matt Joiner
Não era um protocolo real que eles escreveram para enviar comandos para a máquina de café, tenho certeza de que li isso em algum lugar! - Eles construíram uma máquina de café para aceitar comandos por meio deste protocolo, então na verdade é um protocolo legítimo
RobertPitt
48

O fato de que o referenciador foi digitado incorretamente e foi decidido que o erro ortográfico deve ser mantido.

Nathan Osman
fonte
42

Resposta óbvia: métodos PUT, DELETE, TRACE, OPTIONS, CONNECT

A maioria das pessoas conhece os métodos GET e POST porque é isso que eles usam ao construir formulários. Os navegadores também usam muito o HEAD. Os outros métodos são muito menos conhecidos; eles são usados ​​principalmente por aplicativos mais específicos.

Martijn
fonte
1
Boa resposta. Você poderia fornecer mais informações sobre todos os métodos?
Louis
2
Você pode ler tudo sobre isso em vários sites, como en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn
1
Infelizmente, quantos navegadores suportam esses métodos? (Eu sei, é uma pena)
Pascal Qyy
Por que ninguém inclui o PATCH nessas listas?
tobib
29

Alguém já viu o 402 Pagamento Obrigatório ?

raspi
fonte
17
Sim. No gateway HTTP <-> SMS. Se ficar sem crédito pré-pago, você começará a receber 402 respostas.
Kornel
26
@ zildjohn01: Isso significa ... pausa dramática ... QUE ESTAMOS VIVENDO NO FUTURO! ;)
Piskvor saiu do prédio em
6
@Piskvor: Observação brilhante. Também destacarei que rejeito esse futuro e suas pilhas de software patéticas.
Matt Joiner
3
"O futuro já está aqui, apenas não está distribuído uniformemente."
XTL
25

204 Sem conteúdo

Pensei que 204 fosse apenas se você não tivesse conteúdo para exibir, mas a especificação parece que há um comportamento adicional de que o agente do usuário "não altere a visualização do documento".

De acordo com o HOWTO: Configure o Apache para retornar um HTTP 204 (sem conteúdo) para AJAX

FWIW, o Google realmente faz algo semelhante. Cada vez que um usuário clica em um link em seus resultados de pesquisa, o Google executa um ping para registrar o clique; o código de resposta do ping é um HTTP 204.

Além disso, 204 Sem conteúdo propõe que essa é uma boa técnica para "bugs da web" ou "beacons" se você quiser economizar até o último byte de tráfego de rede possível.

Kevin Hakanson
fonte
17

Código de Resposta410 Gone :

(...) os proprietários do servidor desejam que os links remotos para esse recurso sejam removidos. (...)

Web spiders (mais notavelmente o Google) irão desindexar (geralmente no próximo rastreamento) uma página que começa a retornar 410.

Piskvor saiu do prédio
fonte
16

No conteúdo dinâmico, use o cabeçalho Last_Modified ou ETag

Às vezes, você tem conteúdo dinâmico que pode ser grande e / ou caro para gerar e que pode não mudar de solicitação para solicitação. Você pode adicionar um cabeçalho Last_Modified ou ETag à sua resposta gerada.

No topo de seu caro código dinâmico, você pode usar If_Modified_Since ou If_None_Match para determinar se o solicitante de conteúdo já está atualizado. Se estiver, altere o status da resposta para "304 Unmodified" e encerre a solicitação.

Algumas tecnologias do lado do servidor fornecem esses recursos formalmente, mas você pode fazer o acima mesmo no modesto ASP-Classic.

Observe que isso difere da configuração dos cabeçalhos Cache-Control, Expires, pois garante que o cliente sempre tenha as informações mais recentes sob solicitação.

AnthonyWJones
fonte
13

Você pode solicitar o retorno de uma resposta HTTP (grande) (por exemplo, download de arquivo) usando Rangee If-Rangesolicitar cabeçalhos com, respectivamente, o intervalo de bytes especificado e o identificador de arquivo exclusivo ou o carimbo de data / hora de modificação do arquivo. Isso é possível se o servidor tiver enviado os cabeçalhos de resposta Accept-Ranges: bytese ETagou Last-Modifiedna resposta inicial com, respectivamente, a notificação de que o servidor oferece suporte a solicitações de intervalo de bytes, o identificador de arquivo exclusivo e o carimbo de data / hora de modificação do arquivo.

A resposta inicial pode ser semelhante a ( ETaggeralmente é composto do nome do arquivo, tamanho e data e hora da última modificação):

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 0-1233/1234

Quando o download é abortado em, por exemplo, 1 KB (1024 bytes), o cliente pode retomá-lo da seguinte maneira:

If-Range: file.ext_1234_1234567890
Range: bytes=1024-

Que deve retornar esta resposta com os bytes apropriados no corpo:

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 1024-1233/1234
BalusC
fonte
1Mbyte = 1024 kbytes, 1kbyte = 1024 bytes, o que torna 1Mbyte = 1024 * 1024 bytes
Maerlyn
12

ReST tenta empurrar o HTTP até seus limites como um protocolo de interface.

Não é um recurso oculto , mas olhando para APIs ReST bem definidas, pode-se obter uma boa noção de como o HTTP deve funcionar e encontrar exemplos maravilhosos do que pode ser alcançado com a simples combinação de métodos HTTP, códigos de status e cabeçalhos para e para lá.

Boldewyn
fonte
9

Trailer (em contraste com Header)

Ebrahim Mohammadi
fonte
8

O protocolo permite que você defina seus próprios campos personalizados. Eles podem ser usados ​​para transportar outras informações, se você não quiser usar cookies para isso.

síbreon
fonte
6

Status HTTP 100 (continuar)

Um cliente pode enviar uma mensagem de solicitação com um corpo de solicitação para determinar se o servidor de origem está disposto a aceitar a solicitação.

Em alguns casos, pode ser inapropriado ou altamente ineficiente para o cliente enviar o corpo se o servidor rejeitar a mensagem sem olhar para o corpo.

Pode ser usado para evitar o tráfego de clientes invasores ... e / ou onde a largura de banda é um bem precioso.

No entanto, para o uso completo desse recurso, existem alguns critérios para Cliente, Servidores e Proxies HTTP1.1. Consulte HTTP / 1.1 RFC 2616 para obter mais informações sobre Conexões HTTP.

Robin Maben
fonte
3

Códigos de status :

  • Quando o URI http://www.domain.invalid/index.php?id=44 é chamado, se a query ( id=44) não pôde retornar um recurso, por que não retornar um código de status 404?
  • Quando URI http://www.domain.invalid/index.php?id=foo é chamado enquanto idaceita apenas inteiros, por que não retornar um código de status 400?
  • Por que, quando você insere o login / senha incorretos, quase todos os aplicativos web retornam uma mensagem como "Falha na autenticação" com o código de status 200(ok, sem problemas, você fez bem) ao invés de 401?

Sim, os códigos de status parecem ser uma espécie de funcionalidade secreta do HTTP para alguns desenvolvedores web ... Mas eu me pergunto se o mais oculto de todos os "recursos" desse protocolo não é seu RFC !

Pascal Qyy
fonte
2
Acho que 401é apenas para autenticação HTTP e não outros tipos. Afaik, faz com que a maioria dos navegadores solicite ao usuário uma senha http.
CodesInChaos
Você está certo, e esse é o ponto! Aqui está um outro recurso "oculto" do HTTP: HTTP-Authentication... ^^ É tão difícil usá-lo em vez de reinventar a roda?
Pascal Qyy
1
@G. Qyy: Para uma aplicação web, faz uma grande diferença se seu banco de dados de usuário está armazenado em algum banco de dados SQL, que pode ser facilmente manipulado, ou em algum arquivo de configuração de servidor web (bastante estático), como os .htaccessarquivos do Apache - que provavelmente apenas um o webmaster pode atualizar. Portanto, a autenticação HTTP não é muito adequada para gerenciar os direitos de usuário de um aplicativo e login / logoff.
stakx - não contribuindo mais em
4
@stakx: É fácil usar MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP ou outros para armazenar informações HTTP-Authentication, e até mesmo o PHP é capaz de manipular HTTP-Authentication( php.net/manual/en/features.http-auth.php ). Se você é um desenvolvedor web, você deve obter os fundamentos da administração de servidores, apenas por razões de segurança! Como o desenvolvedor da web deve ter habilidades de webmaster / administrador de sistema, ele pode executar facilmente essas tarefas.
Pascal Qyy
1
De qualquer forma, não se trata da minha resposta: para mim o principal problema continua sendo os códigos de status incorretos quase sistemáticos retornados pelos aplicativos da web, mesmo deixando de lado a autenticação HTTP.
Pascal Qyy