Wget
wget –spider 以 404 失敗,但沒有 –spider 工作
我正在嘗試在 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 規範,並且將來可能會導致其他問題,因為連接到它的客戶端會看到錯誤的響應。