ajax请求拥有域的403

Posted

技术标签:

【中文标题】ajax请求拥有域的403【英文标题】:403 on ajax request to own domain 【发布时间】:2011-11-11 15:47:32 【问题描述】:

我正在尝试使用 ajax 请求在不同的视图中调用函数,但出现 403 错误。

摘自我的模板:

    FB.ui( method: 'apprequests', title: 'Invite your friends to answer questions!', message:'Invite your friends!',
    function(response) 
        jQuery.ajax(
            url: "/canvas/request/",
            type: "post",
            data: qid:  qid  , request_ids: response.request_ids
        )
    );

摘自我的观点:

def save_request(request):
    print("in save request")
    for id in request.request_ids:
        share = ShareRequest
        share.question = request.qid
        share.share_id = id
        share.save()

摘自我的网址:

urlpatterns = patterns(...
    (r'^request/', save_request),

返回 [06/Sep/2011 13:35:56] "POST /canvas/request/HTTP/1.1" 403 2332

我真的很困惑。

【问题讨论】:

【参考方案1】:

也许您需要将 CSRF 令牌添加到您的请求中?一些细节在https://docs.djangoproject.com/en/dev/ref/contrib/csrf/。

【讨论】:

我想到了,但不是跨站请求。不过我想我还是会试试的 @Colleen 您似乎完全错误地理解了 CSRF 保护的全部内容。请阅读 Dylan 的链接。 我确实误解...被 CSRF 保护捕获。”,但是我的页面没有加载...【参考方案2】:

让自己不处于隐身模式的糟糕但快速的解决方案:

from django.views.decorators.csrf import csrf_exempt

在您的视图中使用这个 @csrf_exempt 装饰器来忽略 csrf 问题。

但这是一个坏习惯。因此,请确保您的网站 csrf 受到保护。并遵循 django 文档。

【讨论】:

谢谢,我现在这样做了。需要调查一下为什么Django的js代码会破坏我的页面...

以上是关于ajax请求拥有域的403的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 中的 Ajax 请求给出 403

AJAX 请求:/wp-admin/admin-ajax.php 403

错误 403 禁止通过 ajax 请求服务器

Django - 使用 ExtJS 发布 ajax 请求禁止 403

JSonP跨域请求

Jsonp实现Ajax跨域Demo