我在帶有 Gunicorn 的 Ubuntu 20.04 服務器上部署了一個帶有多個 API 的 Django rest 框架服務,一切正常,但是來自服務器外部的 PATCH 請求沒有收到回應,盡管應用程式收到了請求并完全處理了它。
我什至用 Django runserver 測驗過它,問題仍然存在,與 Gunicorn 無關。
重現步驟:
- 在服務器上,我們創建一個新的 Django 應用程式:
ssh to_my@server
python3 -m pip install django
django-admin mytest
cd mytest
python3 manage.py runserver 0.0.0.0:9999
- 在嘗試向應用程式發送請求的服務器上:
ssh to_my@server
curl --request GET localhost:9999/ # this works fine and we can see the response
curl --request PATCH localhost:9999/ # this works fine too
- 在另一臺機器上試試這些:
# on my local machine
curl --request GET IP:9999/ # this works fine
curl --request PATCH IP:9999/ # **** this will get a `curl: (56) Recv failure: Connection reset by peer` after some times
盡管在控制臺中您可以看到請求已完全接收并且 Django 沒有問題,但回應永遠不會到達:
Invalid HTTP_HOST header: '207.154.246.122:9999'. You may need to add '207.154.246.122' to ALLOWED_HOSTS.
Bad Request: /
[02/Nov/2021 11:18:25] "PATCH / HTTP/1.1" 400 62827
請忽略與我們的問題無關的例外。
請注意,這是一個最小部署,我通過 HTTP 而不是 HTTPS 提供服務,并且埠已經打開,我知道我可以使用 PUT 而不是 PATCH 方法,而且我沒有使用 NGINX 只是直接轉發它。
我的問題是:是什么導致了這種行為?這是作業系統嗎?以及如何解決這個問題并從我的 PATCH 請求中接收回應?
uj5u.com熱心網友回復:
經過一番調查,我發現我能夠將補丁請求發送到服務器并接收來自另一臺服務器的回應,這意味著我的客戶端網路阻止了來自服務器的回應,當時我使用的是Irancell網路,如果你有類似的問題,這是你的 ISP 的事情,如果有必要,你必須聯系他們,最后與這些技術相關的一切都運行良好......
但我的問題已經升級到 ISP 的情況是否能夠決定并阻止對 Patch 方法的回應?也許我會在另一個問題中提出并稍后在此處添加鏈接...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350155.html
