不使用快取的 cURL 命令
簡介
cURL(客戶端 URL)是一個命令列工具。它允許在不需使用者互動的情況下,透過使用支援的 libcurl 庫將資料傳輸到或從伺服器傳輸資料。cURL 還可以用於排查網路連線問題。
在某些情況下,我們可能需要傳送繞過快取並從伺服器生成新響應的請求。快取可能發生在客戶端(瀏覽器快取)或伺服器端。
在使用 cURL 命令時,請記住它只是一個 HTTP 客戶端,不會在客戶端快取任何請求。因此,在使用此命令時發生的任何快取都發生在伺服器上。為了避免伺服器端快取,我們可以修改正在傳送的 HTTP 請求。但是,根據伺服器的快取配置方式,這些方法可能有效也可能無效。這些更改將在下面進一步討論。我們可以透過以下方式使用 curl 命令而不使用快取:-
包含 Cache-Control HTTP 頭
包含 Pragma HTTP 頭
更改 URL
1. 包含 Cache-Control HTTP 頭
我們可以使用帶 Cache-Control 頭的 curl 命令,幷包含以下指令:-
$ curl -H 'Cache-Control: no-cache' http://tutorialspoint.tw
伺服器可能接受也可能不接受 Cache-Control 頭。因此,此方法是否有效取決於我們正在傳送 HTTP 請求的伺服器或網站。
2. 包含 Pragma HTTP 頭
我們可以使用 Pragma 頭:-
$ curl -H 'Pragma: no-cache' http://tutorialspoint.tw
與之前的方法一樣,伺服器可能考慮也可能不考慮此指令來服務新請求,但值得一試。
更改 URL
“-H 'Cache-Control: no-cache'” 引數不能保證有效,因為它可能被遠端伺服器或之間的任何代理層忽略。如果失敗,您可以使用傳統方法包含唯一的查詢字串引數。通常,伺服器/代理會將其視為唯一的 URL,並且不會使用快取。
$ curl http://tutorialspoint.tw?$RANDOM
但是,您每次都必須使用不同的查詢字串值。否則,伺服器/代理將再次匹配快取。要每次生成不同的查詢字串引數,請使用 date +%s,它返回自紀元以來的秒數。
$ curl http://tutorialspoint.tw?$(date +%s)
結論
首先,我們必須注意 cURL 命令不會執行任何客戶端快取,並且在使用此命令時發生的任何快取都發生在伺服器端。要繞過伺服器端的快取,我們可以使用 HTTP 頭(如 CacheControl 和 Pragma)以及適用的指令,或者我們可以透過修改 URL 的查詢引數來更改正在訪問的 URL。
這些方法可能有效也可能無效,具體取決於伺服器端的配置。調整查詢引數也存在更改預期響應的風險。
因此,如果我們能夠控制伺服器端程式碼和部署,我們應該始終從伺服器端解決此問題。否則,我們可以參考提供的文件或聯絡我們正在使用的服務的支援團隊。這是確保所討論系統快取工作方式的唯一方法。