我有一個 REST API 正在監聽localhost:8000,我希望它只接受來自的請求localhost:5000。有沒有辦法在不修改 API 代碼的情況下在 Linux 上實作這一點?
uj5u.com熱心網友回復:
你可以使用iptables,
但我認為像這樣使用 socat 會更容易:
socat TCP4:localhost:8000 TCP4:localhost:5000
有關更多資訊,您可以查看此 https://unix.stackexchange.com/questions/10428/simple-way-to-create-a-tunnel-from-one-local-port-to-another
uj5u.com熱心網友回復:
您的 REST API 可能有它自己的機制來防止跨域請求,這就是您難以連接這兩個位置的原因。這個問題在Linux層面是無法解決的。
首先,讓我們解釋一些事情。請求的來源由以下特征定義:
- scheme,這只是您 API 使用的協議(HTTP 或 HTTPS)
- hostname,它是域或 IP 地址(在您的情況下是localhost)
- port,這是不言自明的。
所以,你想執行一個跨域請求。對于簡單的HTTP 請求(GET、HEAD 或 POST 請求),您必須Access-Control-Allow-Origin在 REST API 一側進行設定(localhost:8000)。為此,請檢查如何在您的特定技術中設定該標頭。
如果您將此標頭設定為以下值,則可以在您的情況下進行跨域請求:
Access-Control-Allow-Origin: *
您希望您的 localhost 只能通過特定 URL 訪問 - 如果是 localhost,它只能由本地運行的應用程式訪問。如果您將應用程式部署在 Web 的某個位置,并且只希望特定的 URL 能夠與 REST API 連接,則必須使用以下Access-Control-Allow-Origin標頭設定:
Access-Control-Allow-Origin: https://foo.example
在本地主機上的情況下,這將是:
Access-Control-Allow-Origin: http://localhost:5000
(我假設您使用http協議)...
在我看來,以這種方式限制localhost連接沒有多大意義-'*'很好。我能想到的唯一原因是防止 SSRF 攻擊,是這樣嗎?(僅當您的服務器暴露于網路時才合理。)
更多資源:
- 簡單的跨域請求檔案
- 為 REST API 啟用 CORS
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418644.html
標籤:
