【问题标题】:Implementing an API rest client using Javascript returns 404 when adding the authorization header添加授权标头时,使用 Javascript 实现 API REST 客户端返回 404
【发布时间】:2017-02-12 17:21:18
【问题描述】:

我正在尝试实现一个简单的循环 API 客户端,以使用本地 HTML 页面循环创建帐户以进行测试。

我正在用 Javascript 对请求进行硬编码,并使用 XMLHttpRequest 进行发布操作。

var client = new XMLHttpRequest();
client.open("POST", "https://subdomain.recurly.com/v2/accounts", true);
client.setRequestHeader("Authorization", "Basic " + "API Key");
client.send([XML Request Here]);

代码返回 404。

但是如果我注释掉

client.setRequestHeader("Authorization", "Basic " + "API Key");

代码返回401(未授权),表示端点存在但设置Authorization标头有问题。

编辑:我检查了 404 请求的方法,它是 OPTIONS 而不是 POST,这是由于相同的来源策略吗?

感谢任何帮助。

谢谢。

【问题讨论】:

  • 嗯...如果您的请求看起来正确,您是否检查了开发人员工具?理论上,404 是对休息服务的有效响应,以防您的资源未映射。
  • 我使用 cURL 发送了一个类似的请求,它返回了一个成功的 XML。
  • 那么你应该得到相同的结果。很难将“相似”与其中包含单个授权标头的非常基本的 POST 请求进行比较。

标签: javascript rest http-headers xmlhttprequest recurly


【解决方案1】:

具有某些内容类型的 POST 请求不应生成飞行前请求。设置这个:

应用程序/x-www-form-urlencoded

client.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

Send POST data using XMLHttpRequest

【讨论】:

  • 感谢您的回答,不幸的是它仍然产生404错误。
  • 你能看看是否有其他的头被添加到请求中吗?浏览器开发者工具中的请求内容是什么。
  • 感谢您的跟进。我已经确认同源政策是这个原因。我使用了 IE 8(它不强制使用相同的来源策略)并且请求通过了。我目前正在尝试找到一种方法来绕过现代浏览器上的同源策略。
  • CORS 飞行前将被发送给除了非常有限的一组标题/类型之外的所有。 (stackoverflow.com/questions/22968406/…)
猜你喜欢
  • 2015-05-17
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2019-05-14
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
相关资源
最近更新 更多