use*_*242 8 google-chrome-extension cross-origin-read-blocking
我编写了chrome网站扩展程序,以避免在开发自己的网络应用程序时出现CORS限制。该扩展程序是开发人员的工具,用于将请求从源URL代理到目标URL。
这样的扩展核心代码,因此开发人员可以在我的网站上开发其页面并向其服务器端请求,而不受CORS的限制:
chrome.webRequest.onBeforeRequest.addListener(details => {
let redirectUrl = '';
//...
redirectUrl = details.url.replace(TNT.validRules[i].source, TNT.validRules[i].dest);
return {redirectUrl}
}, {urls: ['<all_urls>']}, ['blocking']);
chrome.webRequest.onHeadersReceived.addListener(details => {
details.responseHeaders.map(item => {
if (item.name.toLowerCase() == 'Access-Control-Allow-Origin'.toLowerCase()) {
item.value = '*'
}
})
return {responseHeaders};
}, {urls: ['<all_urls>']}, ["blocking", "responseHeaders"]);Run Code Online (Sandbox Code Playgroud)
但是最新的Chrome 72无法代理该请求。控制台错误是:
跨域读取阻止(CORB) 使用MIME类型application / json 阻止了跨域响应 https://xxxxxxx.com/abc.json?siteId=69。有关更多详细信息,请参见 https://www.chromestatus.com/feature/5629709824032768。
Ole*_*i.B 11
我在谷歌文档中找到了答案:
避免内容脚本中的跨域提取
旧内容脚本,进行跨域提取:
var itemId = 12345;
var url = "https://another-site.com/price-query?itemId=" +
encodeURIComponent(request.itemId);
fetch(url)
.then(response => response.text())
.then(text => parsePrice(text))
.then(price => ...)
.catch(error => ...)
Run Code Online (Sandbox Code Playgroud)
新的内容脚本,要求其后台页面获取数据:
chrome.runtime.sendMessage(
{contentScriptQuery: "queryPrice", itemId: 12345},
price => ...);
Run Code Online (Sandbox Code Playgroud)
新的扩展后台页面,从已知 URL 获取并中继数据:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.contentScriptQuery == "queryPrice") {
var url = "https://another-site.com/price-query?itemId=" +
encodeURIComponent(request.itemId);
fetch(url)
.then(response => response.text())
.then(text => parsePrice(text))
.then(price => sendResponse(price))
.catch(error => ...)
return true; // Will respond asynchronously.
}
});
Run Code Online (Sandbox Code Playgroud)
https://www.chromium.org/Home/chromium-security/extension-content-script-fetches
请参阅Moesif联合创始人提出的问题。
https://bugs.chromium.org/p/chromium/issues https://bugs.chromium.org/p/chromium/issues/detail?id=933893
根据他与Chronium工程师的讨论,基本上,您应该extraHeaders
在添加侦听器时添加其他选项,这将使此触发器更接近网络并在CORB触发之前注入标头。
chrome.webRequest.onHeadersReceived.addListener(details => {
const responseHeaders = details.responseHeaders.map(item => {
if (item.name.toLowerCase() === 'access-control-allow-origin') {
item.value = '*'
}
})
return { responseHeaders };
}, {urls: ['<all_urls>']}, ['blocking', 'responseHeaders', 'extraHeaders'])
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这里有点自我提升。您为什么不只使用我们的CORS工具,
它已经是功能最齐全的完整CORS工具。
| 归档时间: |
|
| 查看次数: |
12087 次 |
| 最近记录: |