Cors 即使将服务器域URL添加到权限中,Chrome应用程序中的非GET请求中也会存在原始标头
我正在开发一个chrome应用程序,它将通过RESTfulAPI与服务器通信 如果不将服务器URL添加到manifest.json中的权限中,我可以看到Chrome发送所有带有原始标头(Chrome)的请求-extension://cpndc....)如果这些请求中有任何一个具有非标准头,它也会发送一个飞行前选项请求——这一切都是意料之中的 将域添加到权限后,将不再发送飞行前选项。GET调用中不存在原始标头,但它仍然存在于POST、PATCH、MERGE调用中 这会导致问题,因为我将使用的服务器上的CORS实现假定具有源文件头的请求是CORS请求,并以403错误响应,因为它不喜欢源文件-此具有chrome扩展名的源文件不在可接受的源文件列表中 根据CORS规范,我们的期望是,应该只在跨域请求中添加源标头,但由于服务器域被添加到权限中,所以我期望不仅GET而且其他请求都没有它 问题是:这是Chrome应用CORS实现中的一个bug吗 我在使用Chrome应用程序时的发现摘要: 如果未将端点URL添加到清单文件中的权限(CORS将启动): -Chrome应用程序在所有类型的请求中发送原始标头 -Chrome应用程序为所有具有非标准标题的请求发送选项飞行前 如果将端点URL添加到清单文件中的权限(对该域的请求的安全性已关闭) -Chrome应用程序不再发送飞行前选项(如预期) -Chrome应用程序仅在非GET请求中发送源文件头(根本不应发送源文件) 权限文件示例:Cors 即使将服务器域URL添加到权限中,Chrome应用程序中的非GET请求中也会存在原始标头,cors,google-chrome-app,Cors,Google Chrome App,我正在开发一个chrome应用程序,它将通过RESTfulAPI与服务器通信 如果不将服务器URL添加到manifest.json中的权限中,我可以看到Chrome发送所有带有原始标头(Chrome)的请求-extension://cpndc....)如果这些请求中有任何一个具有非标准头,它也会发送一个飞行前选项请求——这一切都是意料之中的 将域添加到权限后,将不再发送飞行前选项。GET调用中不存在原始标头,但它仍然存在于POST、PATCH、MERGE调用中 这会导致问题,因为我将使用的服务器
"permissions": [
"http://api.randomuser.me/*"
]
示例应用程序代码:
window.onload = function() {
function get(){
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.randomuser.me/?seed=bigFish", true);
xhr.setRequestHeader('Authn', 'abcdefghijklmnopqrstuvxyz');
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log(xhr.responseText);
} else {
console.error(xhr.statusText);
}
post();
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
xhr.send(null);
}
function post() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://api.randomuser.me/', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('Authn', 'abcdefghijklmnopqrstuvxyz');
xhr.onload = function () {
// do something to response
console.log(this.responseText);
};
xhr.send('user=person&pwd=password&organization=place&requiredkey=key');
}
document.getElementById('mybutton').addEventListener('click', function() {
get();
});
})
获取不带原始标头的请求:
使用原始标题发布请求:
我刚刚在StackOverflow上发现了一个类似的问题: 其中一个答案指向规范:rfc6454#第7.3节: 根据它,用户代理可以在任何HTTP请求中包括源报头字段 这意味着原始标题不必与CORS相关