在Angular中使用解析客户端密钥会导致CORS错误
Using Parse Client Key in Angular gives CORS error
我正试图使用客户端密钥从Parse中检索一个类(使用GET)。我能够使用谷歌Chrome的高级休息客户端发送一个成功的请求;我使用了X-Parse-Application-Id
和X-Parse-Client-Key
标头。
[edit][edit2]响应标头(从Chrome Developer Tools OPTIONS获得):
HTTP://1.1 200 OK
访问控制-允许-标头:X-Parse-REST-API-Key、X-Parse-Javascript-Key、X-Parse-Application-Id、X-Parse-Client-Version、X-Parses-Session-Token、X-Requested-Wise、X-Parser-Revocale-Session、Content-Type
访问控制允许方法:OPTIONS、POST、GET、PUT、DELETE
访问控制允许来源:*
访问控制最大年龄:86400
内容类型:application/json;charset=utf-8
日期:2015年11月29日星期日04:23:08 GMT
服务器:nginx/1.6.0
X-Parse-Platform:G1
X-Runtime:0.000118
内容长度:0
连接:保持有效
然而,在Angular应用程序中尝试做同样的操作会导致以下错误:
XMLHttpRequest无法加载https://api.parse.com/1/classes/GenResources.飞行前响应中的访问控制允许标头不允许请求标头字段X-Parse-Client-Key
Parse表示,它支持使用跨源资源共享,并且我能够更早地使用不同的客户端发出请求,所以我很确定服务器不是问题所在。无论如何,我都无法修改响应标头的内容。
这是我用来形成GET请求的代码。
var ng_portal = angular.module("ngPortal", []);
ng_portal.controller("GenResourcesCtrl", ["$http", function($http) {
$http({
method: "GET",
url: PARSE_URL + "/1/classes/GenResources",
headers: {
"Content-Type": "application/json",
"X-Parse-Application-Id": PARSE_APP_ID,
"X-Parse-Client-Key": PARSE_CLIENT_KEY
}
}).then(
function success(res) {
console.log(res);
},
function error(res) {
console.log(res);
}
);
}]);
您正在请求中设置自定义标头,这将触发飞行前(OPTIONS)请求。该请求的响应必须包括一个名为"访问控制允许标头"的标头,该值是您试图设置的标头列表。
请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
特别是关于飞行前请求的部分。
我建议使用浏览器开发工具查看请求和响应的标头,看看它们是否符合CORS规范。从您提供的错误消息来看,托管您正在进行的跨域调用的服务器似乎不支持自定义标头。如果你有其他看法,请用标题更新你的问题,我可以提供更多帮助。
实际上这似乎是Parse.com的一个问题。整整沮丧了一个小时后,我看到了这个谷歌群组发布的
相关报价
根据我的测试,这个(客户端或javascript键)从未通过浏览器的javascript rest交互工作过。
我实际上创建了一个关于这个的分析错误:
https://developers.facebook.com/bugs/488204124680438
因为我认为这两个键都应该通过浏览器工作(不需要使用SDK)。
我建议阅读我的bug。我仍然认为正确的实现是使这些密钥能够正确地处理浏览器请求,因为如果你在浏览器之外执行,它就会起作用。
但遗憾的是,他们似乎没有意识到这个问题,或者不明白为什么只在浏览器中禁用它没有意义,因为你可以在任何其他平台上使用它而没有问题。只是…没有……有意义。
相反,我使用了我的JavaScript密钥X-Parse-Javascript-Key
(根据今天的文档,它只适用于他们的JavaScript SDK),它可以很好地替代X-Parse-Client-Key
- API密钥使用和检查示例
- react.js中的密钥绑定
- JS对象密钥序列
- 似乎无法使用javascript从AWS 3S中删除密钥
- 加载两个具有相同父密钥名称的json文件
- 如何获取$data.Entity的密钥
- Angular ngRepeat:重复错误(尽管没有重复的密钥)
- 密钥斗篷未知提供程序错误
- 更新失败,无法加载触发器.错误为“未捕获” 您必须使用 Parse.initialize 指定密钥
- 违反PRIMARY KEY约束无法插入重复的密钥错误
- 获取错误“;数据对于密钥大小来说太大”;使用Crypto Node.js
- ReplaceReducer导致意外的密钥错误
- 在Angular中使用解析客户端密钥会导致CORS错误
- 无法为Phonegap生成密钥获取keytool错误
- 用javascript测试错误的reCAPTCHA站点密钥
- 加密函数,即使使用错误的密钥,也总是解密为纯文本
- 允许dynamodb只读用户的秘密密钥公开是错误的吗?
- 为什么会出现错误:'不应使用重复的密钥推送路由'使用React Native中的NavigationSt
- Robotjs错误:指定的密钥代码无效
- Mongo放弃具有唯一字段的密钥错误:false