ReplaceGoogleCDN扩展 V2版本和V3版本的区别
文档说明:只记录关键地方; 2023-02-11
环境: chromium 内核
备注: firefox 版本113 开始支持 declarativeNetRequest
区别:
- v2 版本允许通过 javascript 脚本动态修改 HTTP 请求头、请求体、响应头、响应体
- v3 版本为了安全,不允许 javascript 脚本动态修改 HTTP 请求头、请求体、响应性头、响应体
- v3 版本允许修改动作, 变更为声明式修改规则,不允许脚本动态修改
共同点:
- 浏览器URL地址重定向工具 (例子: developers.google.com 自动重定向到 developers.google.cn)
核心关键点函数区别
v2版本核心函数
编写js 脚本就能修改 http 请求、响应内容
/** * 响应头里CSP相关的选项 * @type {string[]} */ const remove_csp_item = [ "content-security-policy", "content-security-policy-report-only", "expect-ct", "report-to", "x-content-security-policy", "x-webkit-csp", "x-xss-protection", "x-permitted-cross-domain-policies", "x-content-type-options", "x-frame-options", "permissions-policy", "timing-allow-origin", "cross-origin-embedder-policy", "cross-origin-opener-policy", "cross-origin-opener-policy-report-only", "cross-origin-embedder-policy-report-only", ]; /** * 需要移除CSP的URL * @type {string[]} */ const remove_csp_urls = [ "*://ajax.googleapis.com/*", "*://fonts.googleapis.com/*", "*://themes.googleusercontent.com/*", "*://fonts.gstatic.com/*", "*://*.google.com/*", "*://secure.gravatar.com/*", "*://www.gravatar.com/*", "*://maxcdn.bootstrapcdn.com/*", "*://api.github.com/*", "*://www.gstatic.com/*", "*://stackoverflow.com/*", "*://translate.googleapis.com/*", "*://developers.redhat.com/*", "*://*.githubusercontent.com/*", "*://pub.dev/*", "*://stackoverflow.com/*", ]; /** * 移除 Content-Security-Policy */ chrome.webRequest.onHeadersReceived.addListener( (details) => { //移除响应头 Content-Security-Policy details.responseHeaders = details.responseHeaders.filter( (response_header) => !remove_csp_item.includes(response_header.name.toLowerCase()) ); return { responseHeaders: details.responseHeaders, }; }, { // urls: ["<all_urls>"], urls: [ ...remove_csp_urls, //需要移除 Content-Security-Policy 的URL地址 ], types: [ "main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "other", ], }, ["blocking", "responseHeaders"] ); /* 请求地址重定向 1. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRequest */ chrome.webRequest.onBeforeRequest.addListener( function (details) { let url = details.url.replace("http://", "https://"); url = url.replace("ajax.googleapis.com", "ajax.loli.net"); //url = url.replace("fonts.googleapis.com", "fonts.loli.net"); url = url.replace("fonts.googleapis.com", "fonts.googleapis.cn"); url = url.replace("themes.googleusercontent.com", "themes.loli.net"); //url = url.replace("fonts.gstatic.com", "gstatic.loli.net"); url = url.replace("fonts.gstatic.com", "fonts.gstatic.cn"); url = url.replace( "www.google.com/recaptcha/", "www.recaptcha.net/recaptcha/" ); url = url.replace("secure.gravatar.com", "gravatar.loli.net"); url = url.replace("www.gravatar.com", "gravatar.loli.net"); url = url.replace("en.gravatar.com", "gravatar.loli.net"); url = url.replace("cn.gravatar.com", "gravatar.loli.net"); url = url.replace("cdn.jsdelivr.net", "fastly.jsdelivr.net"); //"cdn.bootcdn.net/ajax/libs/twitter-bootstrap/" //"cdn.jsdelivr.net/npm/bootstrap@$1/dist/$2" url = url.replace( /maxcdn\.bootstrapcdn\.com\/bootstrap\/(\d{1,4}\.\d{1,4}\.\d{1,4})\/(.*?)/g, "lib.baomitu.com/twitter-bootstrap/$1/$2" ); url = url.replace( /code\.jquery\.com\/jquery-(\d{1,4}\.\d{1,4}\.\d{1,4})(.*?)/g, "lib.baomitu.com/jquery/$1/jquery$2" ); url = url.replace( /code\.jquery\.com\/ui\/(\d{1,4}\.\d{1,4}\.\d{1,4})\/(.*?)/g, "ajax.aspnetcdn.com/ajax/jquery.ui/$1/$2" ); url = url.replace("developers.google.com", "developers.google.cn"); url = url.replace("developer.android.com", "developer.android.google.cn"); url = url.replace("source.android.com", "source.android.google.cn"); url = url.replace("www.gstatic.com", "www.gstatic.cn"); return { redirectUrl: url }; }, { urls: [ "*://ajax.googleapis.com/*", "*://fonts.googleapis.com/*", "*://themes.googleusercontent.com/*", "*://fonts.gstatic.com/*", "*://www.google.com/recaptcha/*", "*://secure.gravatar.com/*", "*://en.gravatar.com/*", "*://cn.gravatar.com/*", "*://www.gravatar.com/*", "*://maxcdn.bootstrapcdn.com/bootstrap/*", "*://cdn.jsdelivr.net/*", "*://code.jquery.com/jquery-*", "*://code.jquery.com/ui/*", "*://developers.google.com/*", "*://developer.android.com/*", "*://source.android.com/*", "*://www.gstatic.com/*", ], }, ["blocking"] );
v3版本 核心函数
只能预先申明规则,不能使用js 动态修改,规则都是: 声明式的
例子: developers.google.com 重定向到 developers.google.cn
chrome.declarativeNetRequest.updateDynamicRules( { addRules: [ { id: 10, priority: 1, action: { type: "redirect", redirect: { transform: { scheme: "https", host: "developers.google.cn", }, }, }, condition: { urlFilter: "developers.google.com", requestDomains: ["developers.google.com"], resourceTypes: [ "main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "webtransport", "webbundle", "other", ], }, }, ], removeRuleIds: [123], }, (parameter) => { console.log(parameter); } );
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术