【发布时间】:2014-03-24 21:41:38
【问题描述】:
在我的本地机器上,如果我使用:
./manage.py runserver 0.0.0.0:8000
我可以向服务器发出 POST 请求,它们会出现在终端中并带有 POST 字样。
但是,如果我 ssh 进入我的远程服务器并输入:
./manage.py runserver 0.0.0.0:8000
然后,如果我向远程服务器发出 POST 请求,它会被接收,但由于某种原因终端说它是一个 GET 请求。 POST 数据从请求中删除。
我很难确定问题出在哪里。我认为它与 Django 无关,因为 runserver 在本地可以正常工作,而且我认为它不是 Apache,因为我在远程机器上使用 runserver。会不会是某种路由器设置?
非常感谢任何有关如何解决此问题的建议。
编辑:澄清一下,我正在使用一个名为 Postman 的谷歌 Chrome 扩展程序进行测试,该扩展程序允许您手动发送 POST 请求。当我在本地尝试这个时,我遇到了 CSRF 令牌问题,但后来我用 csrf_exempt 修饰了适用的视图,现在它在本地工作。但是,远程服务器仍在丢弃 POST 数据并将该方法报告为 GET。
【问题讨论】:
-
你是如何测试这个的?您是否可能在测试 POST 请求中缺少 CSRF 令牌?
-
我正在使用一个名为 Postman 的 Chrome 扩展程序来发送 POST 请求。我对 CSRF 令牌了解不多,但我从另一个选项卡中检索了一个 CSRF 令牌,在该选项卡中我刚刚发出了一个正常的 GET 请求,并获取了会话使用的 CSRF 令牌(然后将其作为 csrftoken 的值放入),我'我不确定这是否是可行的方法。有趣的是,Django 服务器正确处理了请求,它只是丢弃了 POST 数据(并且生成的日志将请求记录为 GET 请求)。
-
在我原来的问题中澄清了一些关于 CSRF 令牌的东西。