我现在奋斗了几个小时。我想向另一个域发出简单的Ajax请求,但始终出现http 401错误:
jQuery(document).ready(function($){
var challengeid = $('#codepressHook').data('challengeid');
var clicked = false;
$('#codepressHook').click(function(){
if(!clicked){
$.ajax({
url: "https://dev.radbonus.com/admin/affiliate-connections/retrieveSingle/"+challengeid+".json",
method: "GET",
dataType: "json",
jsonp: false,
contentType: "application/json",
xhrFields: {
withCredentials: true
},
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic "+ btoa(username+":"+password));
},
success: function(data){
$('#codepressHock').html(data.data.code);
},
error: function(error){
alert(error);
}
});
}
});
});
我在服务器端设置了所有相关的CORS标头。这是网络流量:
Request URL:https://dev.radbonus.com/admin/affiliate-connections/retrieveSingle/45.json
Request Method:OPTIONS
Status Code:401 Unauthorized
Remote Address:185.102.94.230:443
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, X-Requested-With, Authorization, Origin
Access-Control-Allow-Methods:POST, GET, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:http://radbonus.com
Access-Control-Max-Age:31536000
Content-Length:463
Content-Type:text/html; charset=iso-8859-1
Date:Sat, 24 Jun 2017 11:25:33 GMT
Server:Apache/2.4.18 (Ubuntu)
WWW-Authenticate:Basic realm="Admin"
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:authorization,content-type
Access-Control-Request-Method:GET
Connection:keep-alive
Host:dev.radbonus.com
Origin:http://radbonus.com
Referer:http://radbonus.com/plugintest/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
我知道有很多关于此主题的文章,但似乎我缺少一些简单的东西。有人可以帮我吗?
更新
看起来我不对。Authorization
标头从不发送OPTIONS
请求。
-你需要确保你的服务器不响应401
到OPTIONS
请求。
我不知道您的服务器用什么语言编写,但是您以错误的方式实现了授权-应该从auth中排除OPTIONS方法。
以下是过时的答案:
您的服务器端要求对此请求进行HTTP基本身份验证。而且您不提供凭据。401错误与CORS无关;这仅表示服务器选择不授权您的请求,因为您未提供身份验证凭据。
如果您尝试直接在浏览器中打开此URL(例如https://dev.radbonus.com/admin/affiliate-
connections/retrieveSingle/1.json
),则会要求您输入login&password,这是浏览器处理401的方式WWW- Authenticate
标头错误。
请注意,Authorization
标题实际上不包含在您的请求中。因此beforeSend
,除了使用钩子,您可能应该直接在调用中包含标头:
headers: {
'Authorization': 'Basic ' + btoa(username+':'+password),
},
并确保Authorization
标题出现在您的请求中。
> 我们创建了CORS筛选器,如下所示: 我们创建了一个REST资源 如果cors报头存在,则通过返回来处理飞行前请求。 请在这方面指导我。提前道谢。
从浏览器到我的自助主机OWIN WebAPI的所有预飞行请求都不会被中间件处理。如果我从邮递员提出选项请求,它们将被处理。为什么是这样的行为? 请求URL:http://localhost:9000/api/v1/conversations/create?connectionId=13509f44-eacb-4950-8cc8-71bd37098975 请求方法:选项 状态代码:401未经授权的远
我正在尝试删除应用程序中不必要的飞行前请求。为此,我简化了请求的一些部分,删除了自定义头等,但遇到了一个问题-GET请求现在可以在没有预飞行的情况下正常工作,但POST请求仍然存在。 我遵循了以下要求: 请求未设置自定义HTTP头 内容类型为“文本/纯文本;字符集=utf-8” 请求方法必须是GET、HEAD或POST之一。如果是POST,内容类型应为application/x-www-form-
问题内容: 我开发了一个PhoneGap应用程序,现在将其转换为移动网站。除了一处小故障,一切都可以顺利进行。我通过POST请求使用了某个第三方API,该API在该应用中可以正常运行,但在移动网站版本中却无法运行。 仔细查看后,似乎AngularJS(我想实际上是浏览器)正在首先发送OPTIONS请求。今天,我对CORS有了很多了解,但似乎无法弄清楚如何完全禁用它。我没有访问该API的权限(因此无
我使用AJAX请求通过POST将数据发送到另一个域。因为我的内容类型不是标准的(它是JSON格式),所以需要一个飞行前请求。(使用请求方法:选项) 如维基百科跨域XHR调用图表中所述 我想知道这是否很费时,因为浏览器将必须到达服务器两次或不?也许这取决于每个浏览器的行为? 通过使用内容类型“纯文本”来避免飞行前请求,我是否获得了一些时间?
我有一个Spring Boot/Spring Data REST服务,允许访问许多资源。其中一些资源(例如)可以自由访问,其他资源(例如)需要基本的HTTP身份验证。通过使用CURL测试REST服务,所有工作都按预期进行。当我试图从Angular2 web应用程序访问服务时,问题就会出现。