【发布时间】:2017-08-06 17:36:42
【问题描述】:
我正在为某个运行良好的 DRF 端点设置分页 - 但是,当部署在使用 HTTPS 的服务器上时,指向下一页和上一页的链接由 http:// 而不是 https:// 形成。这会导致浏览器阻止对下一页/上一页的请求。
我已经仔细检查了初始请求是使用 HTTPS 发出的,而对 this question 的第二个回答指出它应该在形成的 URL 中使用 HTTPS,因为请求是通过 HTTPS 来的。
同一个问题的第一个答案也没有帮助 - 我将 X-Forwarded-Proto 行添加到我的 nginx 配置并重新加载,但无济于事。
The DRF docs 提到 reverse() 应该表现得像基本的 Django 反向,但似乎很清楚初始请求是 HTTPS 而返回的 URL 是 HTTP。
这里有几个显示初始请求的屏幕截图 (https://<domain>.com/api/leaderboard/):
回复包含next: http://<domain>.com/api/leaderboard/?page=2):
我认为这将是一个简单的设置,但在搜索了这个站点和 DRF 站点后都找不到任何东西。
这是我的 nginx 配置:
location / {
# proxy_pass http://127.0.0.1:9900;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
root /opt/app/client/dist;
index index.html index.htm;
}
This question 包含一个非常详细的答案,但最终表示 url 是使用与请求相同的协议形成的,这似乎不是这里的情况。我需要设置 Django SECURE_PROXY_SSL_HEADER 吗?考虑到它可能不安全的警告,我不确定。
【问题讨论】:
-
这个问题我应该给2分。谢谢
标签: django django-rest-framework