O RFC relevante, Protocolo de Transferência de Hipertexto (HTTP / 1.1): Sintaxe e Roteamento de Mensagens contém a resposta para sua pergunta : que cada linha de uma solicitação HTTP deve terminar com CR / LF.
A gramática para o Formato de mensagem do HTTP especifica que cada linha de cabeçalho deve terminar com um caractere de retorno de carro ( 0x0d
em ASCII) seguido por um caractere de alimentação de linha ( 0x0a
):
HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
Isso é expresso mais claramente na descrição da Linha de solicitação :
A request-line begins with a method token, followed by a single space (SP), the request-target, another single space (SP), the protocol version, and ends with CRLF.
request-line = method SP request-target SP HTTP-version CRLF
Como curl
é especificamente desenvolvido para solicitações HTTP, ele já usa as terminações de linha apropriadas ao fazer solicitações HTTP. No entanto, o netcat é um programa de propósito mais geral. Como um utilitário Unix, ele usa caracteres de alimentação de linha para fins de linha por padrão, exigindo, portanto, que o usuário garanta que as linhas sejam finalizadas corretamente.
Você pode usar o utilitário unix2dos
para converter o arquivo que contém os cabeçalhos de solicitação para usar finais de retorno de carro / alimentação de linha.
Se você quiser digitar a solicitação HTTP manualmente e tiver uma versão recente de nc
, use sua opção -C
para usar CRLF
para fins de linha:
nc -C www.youtypeitwepostit.com 80
A propósito, é importante notar que os protocolos de Internet mais populares (por exemplo, SMTP) usam finais de linha CR / LF.
Observe que alguns servidores da Web (por exemplo, o Apache) são mais tolerantes e aceitam linhas de solicitação que são encerradas apenas com um caractere de Feed de linha. A especificação HTTP permite isso, conforme mencionado na seção Robustez da análise de mensagens :
Although the line terminator for the start-line and header fields is the sequence CRLF, a recipient MAY recognize a single LF as a line terminator and ignore any preceding CR.