Estou tentando fazer uma verificação de integridade em um contêiner docker. Encontrei este comando:
wget --quiet --tries=1 --spider http://localhost:6077 || exit 1
O problema é que enquanto o container está rodando, se eu rodar wget sem --spider eu recebo um código HTTP 200, mas se usar --spider ele retorna um 404.
Por que isso pode estar acontecendo?
$ wget --tries=1 http://localhost:6077
--2019-04-22 04:20:12-- http://localhost:6077/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:6077... connected.
HTTP request sent, awaiting response... 200 OK
Length: 436 [application/xml]
Saving to: ‘index.html.1’
$ wget --tries=1 --spider http://localhost:6077
Spider mode enabled. Check if remote file exists.
--2019-04-22 04:21:46-- http://localhost:6077/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:6077... connected.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!
Esse comportamento estranho está quebrando minha verificação de integridade, se eu não usar --spider, suponho que o wget tentará baixar o index.html em algum lugar, certo?
A resposta aceita parece estar incorreta e realmente ajuda você a ocultar um bug em seu contêiner docker. Adicionar a
--spider
opção ao Wget fará com que o Wget envie umaHEAD
solicitação em vez de um arquivoGET
. Especialmente neste caso específico, onde você não está invocando Wget com--recursive
.De acordo com a RFC 7231, seção 4.3.2, uma
HEAD
solicitação é idêntica a umaGET
solicitação, exceto que não contém o corpo da mensagem. No entanto, no seu caso, o servidor parece retornar uma resposta diferente para aHEAD
e umaGET
solicitação. Eu chamaria isso de um bug no seu servidor. Por favor, não simplesmente invoque o Wget sem spider e varra o problema para debaixo do tapete. Esse comportamento vai contra a especificação HTTP e possivelmente levará a outros problemas no futuro, pois os clientes que se conectam a ele veem uma resposta errada.Parece que sua chamada wget
--spider
não funciona como deveria. Ele também deve retornar um HTTP 200 usando umaHEAD
solicitação. Veja a resposta de darnir .Você pode definir o documento de saída definido com a
-O
opção se precisar de um nome de arquivo específico, por exemploOu se você não quiser nenhuma saída, você pode usar
-O -
para imprimir o resultado para stdout e então redirecionar stdout/stderr para/dev/null
.