HTTP403: FORBIDDEN——服务器理解请求,但拒绝执行请求

HTTP403: FORBIDDEN - The server understood the request, but is refusing to fulfill it

本文关键字:请求 拒绝执行 FORBIDDEN 服务器 HTTP403      更新时间:2023-09-26

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

在Microsoft Edge中出现错误,但在IE、Chrome、Firefox或Safari中没有。

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

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

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

这就是我想要达到的目标:

index.html包含4个容纳广告的iframe。然后,我的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'方法下返回。我可以看到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/

对于其他有此问题的人:

我把我的代码放在服务器上,并从那里运行它来测试它是否是本地主机连接-它是。

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

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

无论如何,感谢以上的建议。很感激。

请在选项中包含凭据。

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)) 
)

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

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

还有谁被这个问题困住了,上面的答案都帮不了你:

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

使用支持Edge 18和Promises的2018年10月更新升级Windows,获取请求将正常工作。

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