【发布时间】:2013-11-25 18:23:43
【问题描述】:
我正在尝试通过 AJAX 从abc.com 向xyz.com(这是一个 Django 应用程序)的 URL 发出 POST 请求。
我通过向xyz.com 上的URL 发出GET 请求来获取CSRF 令牌,但是当在预检请求中向xyz.com 发出OPTIONS 请求时,令牌会发生变化。
有没有办法在预检请求中得到OPTIONS请求的响应?
注意:
我正在遵循以下来源的说明:
【问题讨论】:
-
CSRF 中间件旨在阻止您想要做的事情。您需要保存 cookie 并随您提出的每个请求一起发送。或者基本上你可以禁用中间件。顺便说一句,现代浏览器不会接受跨域请求,除非你有 crossdomain.xml 允许其他方发出请求。
-
@scriptmonster 我不想禁用 CSRF,我想要一种方法来获取明确验证的来源的 CSRF 令牌。
-
@scriptmonster 你对跨源通信很困惑。 Crossdomain.xml 仅适用于 flash 和 java applet。我建议你在developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS阅读CORS。
-
@vedarthk 您无权访问服务器对预检的响应。
-
我之前的评论有误。我再次查看了spec 并且cookie 没有通过OPTIONS 预检传递,即使withCredentials="true" 也是如此。考虑在 Django 站点上使用 github.com/ottoyiu/django-cors-headers 中间件。