2016-10-14 83 views
2

对API执行AJAX调用时,我总是收到上述403错误。HTTP403:FORBIDDEN - 服务器理解请求,但拒绝履行请求

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

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

我似乎无法找到任何搜索结果,除了一些Twitter Oauth的东西和上面的引导回答 - 这两个都与我的应用程序无关。

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

这就是我想要实现:

的index.html包含4个iFrame的房屋广告。我的Javascript代码然后挑选iFrame标签,并覆盖一个大拇指向上/向下图标,用户可以在该图标上为所述广告提供反馈。 AJAX调用传递了广告URL(iFrame src)和用户标识(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/

+0

在调试诸如此类的东西时很费力......但也许尝试向您的ajax调用添加标头? 'header:{'Content-Type':'application/json; charset = utf-8'}' –

+0

是检查标题。如果帖子和标题是相同的,那么服务器将没有理由在禁止的情况下回答一次,而其他时间的结果正确。如果您的请求确实在其他浏览器中运行,则您的请求不可能完全相同 - 而不仅仅是无声地失败。 – user5542121

+0

你能发布完整的ajax请求,包括头文件吗?否则,您还可以尝试比较由其他浏览器和Edge发送到服务器的标头。 –

回答

3

其他任何人有这个问题:

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

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

伟大的方式浪费2天,但失去你的理智,但!

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

0

我刚刚有同样的问题。

事实证明,它与数据库中的某些记录有关。这些操作在大部分记录中都能够顺利运行,但在某些情况下,我得到了403,而且如果我坚持,我会得到500。

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

+0

很好的答案!你可能会把你的代码作为代码块吗?要做到这一点,编辑你的答案,选择你的代码,然后按ctrl/cmd + k或用4个空格缩进。另外,我注意到''的HTML代码中有一个小错误,您可能想要解决这个问题。 :) – jbehrens94

+1

哈哈哈.....真棒....我有快速的手指....瘫痪大部分我输入的......问题就在这里;不在原产地 –

相关问题