Chrome 扩展 20 小时后没有“Access-Control-Allow-Origin”标头
Posted
技术标签:
【中文标题】Chrome 扩展 20 小时后没有“Access-Control-Allow-Origin”标头【英文标题】:Chrome extension No 'Access-Control-Allow-Origin' header after 20 hours 【发布时间】:2016-11-02 22:25:36 【问题描述】:我使用chrome.identity.getAuthToken
与一些内部API 对话。
前 20 小时一切都很完美,我可以调用 API 并得到我需要的东西。
大约 20 小时后,我的扩展程序停止工作,我得到:
请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://MY_API' 因此不允许访问。
我知道chrome.identity.getAuthToken
将更新过期的令牌,我可以看到在chrome://identity-internals/
,我的代码获得了一个新的访问令牌,但无法发送请求。
如果我再次卸载/安装扩展程序,它就会再次工作。
清单包含:
"permissions": [ "tabs", "activeTab", "cookies", "identity", "<all_urls>" ]
当我重新安装使错误消失的扩展程序时会发生什么?
background.js:
chrome.identity.getAuthToken(interactive: true, function(token)
gapi.auth.setToken('access_token': token);
// Load the storage API.
gapi.client.load(API_ROOT + DISCOVERY_PATH,
VERSION, function()
// Initialize GAPI's OAuth.
gapi.auth.init(function()
var request = "It's request to my API";
// Not working after 20 hours
request.execute(function(response)
// do something
);
);
);
)
还尝试调用“chrome.identity.removeCachedAuthToken”,但扩展在 20 小时后停止工作。
【问题讨论】:
这需要更重要的澄清。你在哪里看到这个错误?它在内容脚本中吗?因为很奇怪你的 API URL 是 origin。请包含触发此错误的代码(屏蔽 URL)。 我更新了我的第一个帖子 为什么.. 你为什么要使用所有事物的 GAPI 来访问你的 API? 这是此 API 使用的示例。抱歉,我对此很陌生,这是我第一次使用 auth 2 / gapi / chrome 扩展。我是否需要使用另一种方式来访问我的 API(我有 gapi load 的示例)' 【参考方案1】:在服务器“https://MY_API”上设置此设置:
Header always append X-Frame-Options SAMEORIGIN
Header add Access-Control-Allow-Origin "*"
在 .htaccess 或 httpd.conf 中(如果服务器是 httpd/apache)
【讨论】:
这是一个(大)假设,即 API 由扩展开发人员控制。这种情况很少见。 我无法进行此类更改。我不控制那个。谢谢!【参考方案2】:当您卸载/重新安装扩展程序时,其内部状态将被完全擦除;这会使您的代码获得一个全新的令牌,而不是刷新以前获得的令牌。
至于 Access-Control-Allow-Origin
标头 - 这是一个 服务器端 响应标头,我们只能猜测为什么某些随机的 3rd-party API(您甚至没有命名)会发生这种变化.一个合理的猜测是您达到了某些速率限制或配额,尽管为此使用 CORS 很奇怪。
requesting cross-origin permissions 可以永久忽略此特定错误,这会使 Chrome 忽略来自扩展程序(包括内容脚本)的请求的 CORS。但是,您应该仔细检查 API 的使用条款(如果有)。
【讨论】:
谢谢。我无法与您共享此 API 名称。这是我们公司拥有的东西。我有以下权限:“权限”:[“选项卡”、“活动标签”、“cookies”、“身份”、“”],如何在不重新安装的情况下获得全新的令牌?有什么办法吗? 如果是你自己的 API,你应该认为这是一个错误并进行调查。 好的,这非常有趣。如果您拥有"<all_urls>"
的权限,则您的扩展程序的任何请求都不会触发此操作。所以这意味着chrome.identity
API 本身不受跨域权限的约束。那很奇怪。可能是 Chrome 中的一个错误。
如何在没有实际重新安装的情况下在代码中模拟重新安装?我尝试从现金中删除令牌,但遇到了同样的问题。
你可以试试chrome.identity.removeCachedAuthToken
。如果您已经尝试过,您可以将其添加到问题中吗?我已经用你的清单更新了它。以上是关于Chrome 扩展 20 小时后没有“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章
移动 Chrome 上的 CORS Allow-Access-Control-Origin
chrome 扩展上的 Access-Control-Allow-Origin
chrome 扩展中的 Access-Control-Allow-Origin 错误