GET与Postman一起工作,但不是与Ajax合作?
我正在尝试从托管某些帐户数据的服务器执行简单的GET请求。 该请求需要Authorization标头才能正常运行。 我已经执行了GET请求并在Postman中成功检索了数据,但是尝试通过Ajax在Javascript中执行此操作会导致“无效的HTTP状态代码405”错误。
下面是一个小提琴的链接和邮差设置的屏幕截图。 谢谢。!
$.ajax({ beforeSend: function(xhrObj){ xhrObj.setRequestHeader("Authorization","Bearer tj7LTLycpQC6DRup5BkHUO7uVbYaAZI40"); }, type: "GET", url: "https://api05.iq.questrade.com/v1/accounts", success: function(e){ console.log(e) } });
http://jsfiddle.net/Ldjbp2j8/1/
邮递员设定
来自Chrome的JS控制台:
无法加载资源:服务器响应状态为405(方法不允许)
因为您要添加Authorization标头,所以您使请求变得复杂 。 这要求浏览器发出预检OPTIONS请求以请求发送复杂请求的权限。
您发出请求的服务器正在响应,说OPTIONS请求不允许该URL。
您需要修改服务器,以便它适当地响应预检CORS请求。
Postman不需要发出预检请求,因为您的浏览器信任Postman的代码。 它不知道它是否可以信任它从JSFiddle(AKA 潜在邪恶的黑客网站 )收到的代码与数据api05.iq.questrade.com(AKA 潜在的网上银行或公司内联网网站 )愿意与它共享。
查看控制台错误:
XMLHttpRequest cannot load https://api05.iq.questrade.com/v1/accounts. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access. The response had HTTP status code 405.
这是CORS问题。 如果域与正在运行的代码的域不匹配,浏览器会向服务器发送OPTIONS aka pre-flight request。 而且您还必须将所需的标头添加到响应中。
您必须修改服务器才能处理它。
您也可以使用JSONP作为替代方案。