HTTP403:FORBIDDEN - 服务器理解请求,但拒绝履行请求

问题描述 投票:5回答:5

在对API执行AJAX调用时,我不断收到上述403错误。

该错误发生在Microsoft Edge中,但不会发生在IE,Chrome,Firefox或Safari中。

该页面不使用bootstrap,因为我已经读过它可能是由于页面无法找到所需的.LESS文件引起的。我甚至试图包括bootstrap,看看是否解决了这个问题 - 事实并非如此。

我似乎无法通过谷歌搜索找到任何东西,除了一些Twitter Oauth的东西和上面的bootstrap答案 - 两者都与我的应用程序无关。

正如我之前所说,AJAX调用在任何浏览器中都可以正常工作,除了边缘。代码在各种浏览器中完全相同,并且响应/请求标头彼此匹配 - 因此不是POST请求发送不正确数据的情况(在不同浏览器默认值的情况下)。

这就是我想要实现的目标:

index.html包含4个iFrames住房广告。然后,我的Javascript代码会选择iFrame标记并覆盖竖起/竖起的图标,用户可以在该图标上为所述广告提供反馈。 AJAX调用通过广告URL(iFrame src)和用户id(consumer_id)传递。然后,在写入数据库以记录竖起/竖起操作后,它会返回一个展示ID。

示例代码:

index.html的:

<body>
    <iframe src="https://ad.doubleclick.net/ddm/adi/N4406.154378.CRITEO/B9862737.133255611;sz=728x90;click=http://cat.fr.eu.criteo.com/delivery/ck.php?cppv=1&amp;cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&amp;maxdest=;dcopt=anid;ord=f4840e2d31;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=?" width="728" height="90" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" bordercolor="#000000"></iframe>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript" src="client.js"></script>
</body>

AJAX电话:

    // This isn't usually a var, but added for clarity. Usually uses a selector 
    // to grab the entire iframe DOM element, and then store in array.    
        var iframe = "http://ad.doubleclick.net/ddm/adi/N4406.154378.CRITEO/B9862737.133255611;sz=728x90;click=http://cat.fr.eu.criteo.com/delivery/ck.php?cppv=1&amp;cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&amp;maxdest=;dcopt=anid;ord=f4840e2d31;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=?";

        $.ajax({
            method: 'POST',
            url: 'http://my.api/url/',
            async: false,
            datatype: 'json',
            data: {
                ad_url: iframe, // fetch ad_url from iframe src
                wittel_consumer: "57fcea30f910092a06806344"
            },
            success: function(data, respText, xhr) {
                console.log('Data',data);
                console.log('XHR',xhr);
            },
            error: function(error) {
                console.log('URL',this.url);
                console.log('Error',error);
            }
        });

在此代码中,AJAX被执行,但在“错误”方法下返回。我可以看到URL是正确的,并且在error回调中,我只得到一个包含readyState: 4, status: 403, statusText: "Forbidden"之类的对象。如上所述,API确实有效,因为它在任何其他浏览器中成功完成,因此必须与Edge处理请求的方式有关。或者它可能是服务器配置的东西?老实说,我不知道。

完全错误:HTTP403: FORBIDDEN - The server understood the request, but is refusing to fulfill it. (XHR)POST - http://my.api/url/

javascript ajax http-status-code-403
5个回答
5
投票

对于有这个问题的其他人:

我把我的代码放在服务器上并从那里运行它来测试它是否是localhost连接 - 它是什么。

我正在使用的API必须配置为不允许localhost连接,这是我以前从未体验过的。

浪费2天的好方法虽然失去了理智!

不管怎样,谢谢你的上述建议。欣赏它。


1
投票

请在选项中包含凭据。

var url = 'https://dummy_url/_api/lists'
var options = {
    headers: {"Accept": "application/json; odata=verbose"},
    credentials: 'include'
}

fetch(url, options).then( 
    res => res.json().then(json => console.dir(json)) 
)

这适合我。


0
投票

我刚遇到同样的问题。

事实证明它与数据库中的一些记录有关。在大多数记录中,操作顺利运行,但在某些情况下,我得到403,如果我坚持,我得到500。

我自己的经验说它与localhost无关。它工作正常。它与您的一些记录有关....在非关键字段中查找双重性,但在查询中引用。


0
投票

尝试将这些设置添加到您的请求中:

"headers": {
    "Content-Type": "application/json",
    "cache-control": "no-cache",
},
"processData": false,

0
投票

任何其他人都会遇到这种情况并且没有上述答案可以帮助您:

检查你的Edge版本,17不支持Promises。

使用包含Edge 18和Promises的2018年10月更新升级Windows,获取请求将起作用。

https://www.microsoft.com/ja-jp/software-download/windows10

© www.soinside.com 2019 - 2024. All rights reserved.