我正在为某个运行良好的 DRF 端点设置分页 - 但是,当部署在使用 HTTPS 的服务器上时,下一页和上一页的链接是通过http://
代替https://
。这会导致浏览器阻止对下一页/上一页的请求。
我已经仔细检查了初始请求是否已通过 HTTPS 发出,以及第二个答案这个问题 https://stackoverflow.com/questions/37097643/django-rest-framework-https-for-absolute-urls指出它应该在形成的 URL 中使用 HTTPS,因为请求是通过 HTTPS 发送的。
对同一问题的第一个答案也没有帮助 - 我添加了X-Forwarded-Proto
行到我的 nginx 配置并重新加载,但无济于事。
DRF 文档 http://www.django-rest-framework.org/api-guide/reverse/提到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;
}
这个问题 https://stackoverflow.com/questions/22279893/djangorestframework-https-links-with-routers-and-viewsets包含一个非常详细的答案,但最终说 url 是使用与请求相同的协议形成的,但这里的情况似乎并非如此。我需要设置 Django SECURE_PROXY_SSL_HEADER 吗?考虑到它可能不安全的警告,我不确定。