Django CSRF仅对Opera上的ajax post请求失败

Django CSRF仅对Opera上的ajax post请求失败,django,opera,django-csrf,Django,Opera,Django Csrf,AJAX POST请求在Mozilla和Chromium中运行良好,但在Opera中失败。我得到了标准的CSRF错误(403)。我尝试了不同版本的歌剧,但每次都失败了。顺便说一句,我正在使用jquery/django代码段,该代码段在头中设置了X-CSRFToken,这在下面的“bad Opera请求”中得到了验证 我在另一个项目中创建了一个非常简单的视图,ajax post请求在Opera中运行良好。我查看了请求的详细信息,发现了差异。好的请求没有设置任何奇怪的X-Opera-Info和其他O

AJAX POST请求在Mozilla和Chromium中运行良好,但在Opera中失败。我得到了标准的CSRF错误(403)。我尝试了不同版本的歌剧,但每次都失败了。顺便说一句,我正在使用jquery/django代码段,该代码段在头中设置了X-CSRFToken,这在下面的“bad Opera请求”中得到了验证

我在另一个项目中创建了一个非常简单的视图,ajax post请求在Opera中运行良好。我查看了请求的详细信息,发现了差异。好的请求没有设置任何奇怪的X-Opera-Info和其他Opera参数,甚至认为我使用的是同一个浏览器。如果这是一个问题,有没有办法删除这些额外的参数?或者有没有人对这个问题有其他的建议或想法?我知道这不是我的视图函数,因为我试图立即返回一个HttpResponse,甚至得到403'd。非常感谢你们

####################
OPERA GOOD REQUEST
##############
Request details
POST /test HTTP/1.1 
User-Agent: Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 Version/11.00
Host: 127.0.0.1:8000
Accept-Language: en-US,en;q=0.9
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://127.0.0.1:8000/test
Cookie: csrftoken=1c6441404c991f7ae3b6d7d49f91f280
Cookie2: $Version=1
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 6
Content-Type: application/x-www-form-urlencoded
Accept: */*
X-CSRFToken: 1c6441404c991f7ae3b6d7d49f91f280
X-Requested-With: XMLHttpRequest
Content-Transfer-Encoding: binary

###################
OPERA BAD REQUEST
####################
Request details
POST http://facebook.example.com/remove-person HTTP/1.1 
User-Agent: Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 Version/11.00
Host: facebook.example.com
Accept-Language: en-US,en;q=0.9
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://facebook.example.com/
Cookie: signed_request=5-f0_7pZLILrp6MLocsdMoNYAaZr-wCnU2cPbLC1bZg.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEzMDg4MTYwMDAsImlzc3VlZF9hdCI6MTMwODgxMTQyNywib2F1dGhfdG9rZW4iOiIyMjMyNDY5NDEwMjc3MTR8Mi5BUURVRGM2ZFFLSElnN1h3LjM2MDAuMTMwODgxNjAwMC4xLTU0MDIwMjZ8b2QtX1diNTh3aG1wTnNHYUh4cTNtOVBpWkswIiwidXNlciI6eyJjb3VudHJ5IjoidXMiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX0sInVzZXJfaWQiOiI1NDAyMDI2In0; csrftoken=d4cdc6a75ed264d295a410dd98982c42; fbs_223246941027714="access_token=223246941027714%7C2.AQBlhzavZjzd8c7J.3600.1308819600.1-5402026%7CdsD6VESpGJb3m0EdD1mhFZtDI24&base_domain=example.com&expires=1308819600&secret=QaTNS988wl0FU6A0LG9qDQ__&session_key=2.AQBlhzavZjzd8c7J.3600.1308819600.1-5402026&sig=61e7e13091501f35793d3cda8c20835b&uid=5402026"
Cookie2: $Version=1
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 14
X-Opera-Info: ID=448, p=4, f=15, sw=1440, sh=900
X-Opera-ID: e79c37b56a58510d26b56882453bddb6d2c2dae858129139113f6346ea23ca6b
X-Opera-Host: r18-02:12420
X-OA: 1322 b5834cb13259fbd50b87b576b5e8b9a8bcc1384478c2ea79cc65614dc1b67c27
X-OB: evenes
Content-Type: application/x-www-form-urlencoded
Accept: */*
X-CSRFToken: d4cdc6a75ed264d295a410dd98982c42
X-Requested-With: XMLHttpRequest
Content-Transfer-Encoding: binary

我最近遇到了类似的问题。我第一次尝试做一篇来自AJAX的帖子,内容是Django没有发送CSRF cookie的视图。出于我无法解释的原因,除了Opera,我尝试的所有浏览器都可以使用它

这种情况是,他们建议使用
sure\u csrf\u cookie
decorator

如果使用该装饰器包装所有潜在视图过于繁重,则可以做的另一件事是向基础模板中添加如下内容:

<script>
var csrf_token = "{{ csrf_token }}";
</script>

var csrf_token=“{{csrf_token}}”;
然后,无论何时发布AJAX帖子,都要将密钥对
csrfmiddlewaretoken:csrf_令牌
包含在帖子数据中


一旦我做了上述工作,我在Opera上的帖子就开始起作用了。

我最近遇到了类似的问题。我第一次尝试做一篇来自AJAX的帖子,内容是Django没有发送CSRF cookie的视图。出于我无法解释的原因,除了Opera,我尝试的所有浏览器都可以使用它

这种情况是,他们建议使用
sure\u csrf\u cookie
decorator

如果使用该装饰器包装所有潜在视图过于繁重,则可以做的另一件事是向基础模板中添加如下内容:

<script>
var csrf_token = "{{ csrf_token }}";
</script>

var csrf_token=“{{csrf_token}}”;
然后,无论何时发布AJAX帖子,都要将密钥对
csrfmiddlewaretoken:csrf_令牌
包含在帖子数据中


完成上述操作后,我与Opera的帖子开始工作。

如果禁用Opera Turbo,是否有效?这些额外的标题似乎与Turbo相关,也许这会带来一些不同。

如果禁用Opera Turbo是否有效?这些额外的标题似乎与Turbo相关,也许这会带来一些不同

X-CSRFToken: {{ csrf_token }}}
值应该在AJAX请求HTTP头中从客户端发送,以便Django识别

值应该在AJAX请求HTTP头中从客户端发送,以便Django识别