簡體   English   中英

具有多個允許主機的Django和CORS策略

[英]Django and CORS policy with multiple allowed hosts

我有一個帶有NGINX和gunicorn的ubuntu服務器上運行的Django小項目。

一切都很正常,當用戶訪問www .example.com的,但是,當用戶訪問example.com,而不是www.example.com,這是它分崩離析。 我在fetch命令中使用一些javascript,從我的API(Django REST)獲取數據,並且返回:

Access to fetch at 'https://www.example.com/builds/apidata/4' 
from origin 'https://example.com' has been blocked by CORS 
policy: No 'Access-Control-Allow-Origin' header is present on the requested 
resource. If an opaque response serves your needs, set the request's mode to 
'no-cors' to fetch the resource with CORS disabled.

我找到的最簡單的解決方案是從我的settings.py文件中的ALLOWED_HOSTS中刪除example.com,但是當用戶忘記www. 他們會遇到404錯誤。

CORS錯誤消息還指出我可以更改請求模式,但是我不知道這樣做的安全性。

我還嘗試在我的域設置中使用從example.com到www.example.com的重定向,但這似乎也不起作用。

任何建議,將不勝感激!

在您的Web服務器配置中,您可以在www子域上添加一個Access-Control-Allow-Origin標頭,該標頭將允許來自根域的請求。

這將起作用: Access-Control-Allow-Origin: https://example.com

盡管您當然可以使用CORS允許這種跨域使用,但一種更簡單,更簡潔的解決方案是僅允許一個根域(無論是否使用www

PREPEND_WWW設置為True是確保請求始終使用www版本的簡單方法,因為當使用非www版本時,它會導致CommonMiddleware發出重定向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM