Wget

wget –spider 以 404 失敗,但沒有 –spider 工作

  • April 24, 2019

我正在嘗試在 docker 容器中進行健康檢查。我找到了這個命令:

wget --quiet --tries=1 --spider http://localhost:6077 || exit 1

問題是,當容器執行時,如果我在沒有 –spider 的情況下執行 wget,我會得到一個 HTTP 200 程式碼,但如果使用 –spider 它會返回一個 404。

為什麼會發生這種情況?

$ 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!!!

這種奇怪的行為正在破壞我的健康檢查,如果我不使用 –spider 我假設 wget 會嘗試在某個地方下載 index.html 嗎?

您的 wget 呼叫--spider似乎無法正常工作。它還應該使用HEAD請求返回 HTTP 200。請參閱darnir 的回答

如果我不使用 –spider 我假設 wget 會嘗試在某個地方下載 index.html 嗎?

-O如果您需要特定的文件名,您可以使用該選項設置設置輸出文件,例如

wget --quiet --tries=1 -O/tmp/docker.html http://localhost:6077

或者,如果您不想要任何輸出,您可以使用-O -將結果列印到 stdout,然後將 stdout/stderr 重定向到/dev/null.

wget -O - http://localhost:6077 &>/dev/null

接受的答案似乎不正確,實際上可以幫助您隱藏 docker 容器中的錯誤。將--spider選項添加到 Wget,將導致 Wget 發送HEAD請求而不是GET. 特別是在這種特殊情況下,您沒有使用--recursive.

根據 RFC 7231 第 4.3.2 節,HEAD請求與請求相同,GET只是它不包含消息正文。但是,在您的情況下,伺服器似乎對 aHEAD和 aGET請求返回不同的響應。我將其稱為您伺服器中的錯誤。請不要在沒有蜘蛛的情況下簡單地呼叫 Wget 並將問題掃到地毯下。這種行為違反了 HTTP 規範,並且將來可能會導致其他問題,因為連接到它的客戶端會看到錯誤的響應。

引用自:https://unix.stackexchange.com/questions/513749