我有一个运行在带有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.
我找到的最简单的解决方案是从ALLOWED_HOSTS
文件中的settings.py
中删除example.com,但是当用户忘记www.
时,他们会遇到404错误
CORS错误消息还指出我可以更改请求模式,但是我不知道这样做的安全性。
我也尝试对我的域设置使用重定向,从example.com到www.example.com,但这似乎也不起作用。
任何建议将不胜感激!
答案 0 :(得分:1)
在Web服务器配置中,您可以在www子域上添加一个Access-Control-Allow-Origin
标头,该标头将允许来自根域的请求。
这将起作用:Access-Control-Allow-Origin: https://example.com
答案 1 :(得分:1)
尽管您当然可以使用CORS允许这种跨域使用,但一种更简单,更干净的解决方案是仅允许一个根域,无论是否使用www
。
将PREPEND_WWW
设置为True
是一种确保请求始终使用www
版本的简单方法,因为它会导致CommonMiddleware
在非{{ 1}}版本。