HTTP403: FORBIDDEN——服务器理解请求,但拒绝执行请求
HTTP403: FORBIDDEN - The server understood the request, but is refusing to fulfill it
在执行对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&cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&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&cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&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- 在php中的$_POST请求后执行JavaScript代码
- 拒绝执行内联事件处理程序,因为它违反了CSP.(沙盒)
- 在 ajax 请求后执行 Google AdWords 转化跟踪代码
- 在循环完成 nodejs 请求之前执行回调
- http.get 请求未执行
- SCRIPT5022:集合尚未初始化.尚未请求或请求尚未执行
- 拒绝执行 JavaScript URL,因为它违反了以下内容安全策略指令:
- 在我的Node服务器上收到http发布请求时执行脚本
- 阻止.ajaxStart()在特定的Ajax请求上执行
- 在浏览器向服务器发送任何操作URI的请求之前执行一段代码
- Jsonp请求拒绝工作
- 获取拒绝执行'*'因为它的MIME类型('application/json')是不可执行的
- 管道化ajax http请求并仅在Latest请求上执行成功函数
- AngularJS http请求从不执行
- 拒绝执行'*'
- 如何在Golang请求中执行javascript异步代码
- Ajax请求:拒绝设置不安全的标头
- Javascript循环拒绝执行函数
- HTTP403: FORBIDDEN——服务器理解请求,但拒绝执行请求
- avoid alert拒绝执行JavaScript脚本.在请求中找到的脚本源代码