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

时间:2016-10-14 09:05:41

标签: javascript ajax http-status-code-403

在执行对API的AJAX调用时,我一直收到上述403错误。

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

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

我似乎无法通过Google搜索来找到任何内容,除了一些Twitter Oauth的内容和上面的引导回答 - 这两者都与我的应用程序无关。

正如我之前所说,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会被操作,但会在“错误”下返回。方法。我可以看到网址是正确的,在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/

5 个答案:

答案 0 :(得分:5)

对于遇到此问题的其他人:

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

我使用的API必须配置为不允许本地主机连接,这是我以前从未体验过的。

浪费2天并且失去理智的好方法!

无论如何,感谢上述建议。欣赏它。

答案 1 :(得分: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)) 
)

这对我有用。

答案 2 :(得分:0)

我遇到了同样的问题。

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

其他人对此一无所知,以上答案均无法帮助您:

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

支持2018年10月更新的Windows Edge(包括Edge 18和Promises)的升级,提取请求将起作用。

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