当前位置: 首页 > 知识库问答 >
问题:

DART HttpRequest不为CORS选项请求提供授权标头

丌官绍元
2023-03-14

我尝试使用HttpRequest(dart:html)执行POST请求,以调用一个使用基本身份验证保护的rest服务。

HttpRequest request = new HttpRequest(); // create a new XHR
var url = "http://localhost:8082/xyz";
request.open("POST", url, async: false); // POST the data to the server

String username = "foo";
String password = "bar";
final auth = CryptoUtils.bytesToBase64(UTF8.encode("$username:$password"));

request.setRequestHeader('authorization',"Basic $auth");
request.setRequestHeader('content-type',"application/json");
request.setRequestHeader("accept", "application/json");
String jsonData = '{"language":"dart"}'; // etc...

request.send(jsonData);  //exception 401 Unauthorized


在执行POST调用之前,执行选项调用(由dart:html发出),而不使用authorization标头。这导致401未经授权的响应。

请求标头:

Accept:*/*
Accept-Encoding:gzip、deflate、SDCH
Accept-Control-Request-Headers:authorization,content-type,Accept
Accept-Control-Request-Method:POST
Cache-Control:Max-Age=0
连接:Keep-Alive
Host:LocalHost:8082
来源:http://localHost:63342
引用9_5)AppleWebKit/537.36(KHTML,like Gecko)Chrome/38.0.215.0(Dart)Safari/537.36

Reponse标头:

内容-长度:0
日期:Mon,02 2月2日2015年23:33:58 GMT
服务器:Jetty(9.2.7.v20150116)
www-authenticate:basic realm=“XyzRealm”


是否有一种方法可以向选项调用提供授权头?

任何建议都很好。谢谢

共有1个答案

冉丰茂
2023-03-14

options请求是由浏览器自动发出的,您不能修改该请求。服务器需要允许options飞行前请求而不进行身份验证。

请参见http://www.w3.org/tr/cors/#cross-origin-request-with-preflight-0用户凭据被排除在外。

 类似资料:
  • 我尝试使用angular2通过Oauth2身份验证访问我的Spring Boot应用程序。当我用基本身份验证(包括用户名和密码)向“oauth/token”发送post请求以获取token(在postman中可以正常工作)时,我得到了一个401未经授权。我知道我的浏览器用OPTIONS方法发送飞行前请求,我已经实现了我的安全配置,因此它应该忽略并允许OPTIONS请求,但它不起作用。 以下是我的安

  • 我正在尝试从这个 API 调用中创建“UUID”,我正在使用 axios 和 vue.js。这是我的源代码。 但不幸的是,我得到了 在'访问XMLHttpRequesthttps://www.uuidtools.com/api/generate/v1'从原点'http://localhost:8080'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access c

  • 如果我从本地前端(也是浏览器)访问本地后端,它会工作:上面的错误不会显示在浏览器控制台中,我会获得数据)。 如果我做了这些选项或接到邮递员的电话到Google Cloud后端,它就有效了。 我注意到,对于Postman,我需要在OPTIONS请求中包含标头,以便将承载令牌发送到Google以使其工作。浏览器不会在选项调用中发送任何标头,即使我将添加到Axios配置中,如下所示: 发送标头中的令牌不

  • 问题内容: 我有一个react / redux应用程序,可从api服务器获取令牌。用户验证后,我想使所有axios请求都将该令牌作为Authorization标头,而不必手动将其附加到操作中的每个请求。我对React / Redux相当陌生,并且不确定采用最佳方法,也没有在Google上找到任何高质量的点击。 这是我的redux设置: 我的令牌存储在的redux存储中。 我对如何进行有点迷茫。我试

  • 客户端通过按附录B使用“application/x-www-form-urlencoded”格式向授权端点URI的查询部分添加下列参数构造请求URI: response_type 必需的。值必须设置为“token”。 client_id 必需的。如2.2节所述的客户端标识。 redirect_uri 可选的。如3.1.2节所述。 scope 可选的。如3.3节所述的访问请求的范围。 state 推

  • 客户端通过按附录B使用“application/x-www-form-urlencoded”格式向授权端点URI的查询部分添加下列参数构造请求URI: response_type 必需的。值必须被设置为“code”。 client_id 必需的。如2.2节所述的客户端标识。 redirect_uri 可选的。如3.1.2节所述。 scope 可选的。如3.3节所述的访问请求的范围。 state 推