<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://hmoegirl.com/index.php?action=history&amp;feed=atom&amp;title=User%3ACg49</id>
	<title>User:Cg49 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://hmoegirl.com/index.php?action=history&amp;feed=atom&amp;title=User%3ACg49"/>
	<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=User:Cg49&amp;action=history"/>
	<updated>2026-04-27T21:07:00Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://hmoegirl.com/index.php?title=User:Cg49&amp;diff=78437&amp;oldid=prev</id>
		<title>CaoPig：​已保护“User:Cg49”：​旧H萌用户，欲认领请联系管理员（[编辑=仅允许管理员]（无限期）[移动=仅允许管理员]（无限期））</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=User:Cg49&amp;diff=78437&amp;oldid=prev"/>
		<updated>2025-06-26T16:27:14Z</updated>

		<summary type="html">&lt;p&gt;已保护“&lt;a href=&quot;/User:Cg49&quot; title=&quot;User:Cg49&quot;&gt;User:Cg49&lt;/a&gt;”：​旧H萌用户，欲认领请联系管理员（[编辑=仅允许管理员]（无限期）[移动=仅允许管理员]（无限期））&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年6月27日 (五) 00:27的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;zh&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>CaoPig</name></author>
	</entry>
	<entry>
		<id>https://hmoegirl.com/index.php?title=User:Cg49&amp;diff=78430&amp;oldid=prev</id>
		<title>2025年6月26日 (四) 16:26 CaoPig</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=User:Cg49&amp;diff=78430&amp;oldid=prev"/>
		<updated>2025-06-26T16:26:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年6月27日 (五) 00:26的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{旧H萌用户}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Cquote|&amp;lt;big&amp;gt;学术和二次元是无国界的。&amp;lt;/big&amp;gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Cquote|&amp;lt;big&amp;gt;学术和二次元是无国界的。&amp;lt;/big&amp;gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>CaoPig</name></author>
	</entry>
	<entry>
		<id>https://hmoegirl.com/index.php?title=User:Cg49&amp;diff=23817&amp;oldid=prev</id>
		<title>imported&gt;Cg49：​创建页面，内容为“{{Cquote|&lt;big&gt;学术和二次元是无国界的。&lt;/big&gt;}}  == 使用互联网档案馆 == &#039;&#039;&#039;提示：&#039;&#039;&#039;需要跨越G鸿F沟W {{Hide|存档页面| === 使用互联…”</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=User:Cg49&amp;diff=23817&amp;oldid=prev"/>
		<updated>2020-08-21T03:15:42Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{Cquote|&amp;lt;big&amp;gt;学术和二次元是无国界的。&amp;lt;/big&amp;gt;}}  == 使用互联网档案馆 == &amp;#039;&amp;#039;&amp;#039;提示：&amp;#039;&amp;#039;&amp;#039;需要跨越G鸿F沟W {{Hide|存档页面| === 使用互联…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Cquote|&amp;lt;big&amp;gt;学术和二次元是无国界的。&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== 使用互联网档案馆 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;提示：&amp;#039;&amp;#039;&amp;#039;需要跨越G鸿F沟W&lt;br /&gt;
{{Hide|存档页面|&lt;br /&gt;
=== 使用互联网档案馆存档页面 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;适用下列情况：&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*遇到将要被删除的页面&lt;br /&gt;
*遇到含有不能在天朝发布的内容的页面&lt;br /&gt;
*要存档的页面可以匿名查看&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;操作步骤&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#前往互联网档案馆网站：[https://web.archive.org web.archive.org]&lt;br /&gt;
#于页面右下角&amp;#039;&amp;#039;&amp;#039;Save Page Now&amp;#039;&amp;#039;&amp;#039;下的输入框中输入要存档的页面，回车后按提示操作&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;简便方案&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
直接在网址栏输入：&amp;lt;nowiki&amp;gt;web.archive.org/save/你要存档的页面的网址（包括https://前缀）&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
（部分浏览器不支持直接输入非ASCII字符）&lt;br /&gt;
&lt;br /&gt;
==== 使用互联网档案馆存档页面Wiki源代码 ====&lt;br /&gt;
于上述步骤输入的网址后加上&amp;lt;nowiki&amp;gt;?action=edit&amp;lt;/nowiki&amp;gt;即可。&lt;br /&gt;
&lt;br /&gt;
（如果输入的网址是&amp;lt;nowiki&amp;gt;https://zh.moegirl.org/index.php?title=条目&amp;lt;/nowiki&amp;gt;形式，请加上&amp;lt;nowiki&amp;gt;&amp;amp;action=edit&amp;lt;/nowiki&amp;gt;）&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;（此方法疑似可以绕过匿名保护）&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 被GFW限制海外流量 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;当你被GFW限制海外流量&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== 使用的是拨号上网或动态IP ===&lt;br /&gt;
重新拨号或连接即可，有必要的话使用新的MAC硬件地址。&lt;br /&gt;
&lt;br /&gt;
=== 使用的是固定IP ===&lt;br /&gt;
使用VPN或者反向代理（见下文：搭建JS Proxy）。&lt;br /&gt;
&lt;br /&gt;
=== 搭建JS Proxy ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;该方案会无法代理Google验证码，而且根据你使用的JS Proxy不同，可能无法正常显示网页上的JS和图片&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#首先注册Cloudflare的账户（你可以使用一次性邮箱或匿名邮箱注册，具体见下文：匿名邮箱），记得激活账户。&lt;br /&gt;
#打开[https://dash.cloudflare.com 控制台]，点击Worker。（右上角可以选择语言了，有简体中文）&lt;br /&gt;
#填写你的三级域名（现在是填完后可以改了）。&lt;br /&gt;
#选择左侧的Free免费计划。&lt;br /&gt;
#创建一个Worker，去上网查找JS Proxy（或Worker Proxy）代码并粘贴进去。&lt;br /&gt;
#左上角修改Worker的名字。&lt;br /&gt;
#打开 &amp;lt;nowiki&amp;gt;https://worker名字.用户三级域名.workers.dev/&amp;lt;/nowiki&amp;gt; 测试一下&lt;br /&gt;
&lt;br /&gt;
==== JS Proxy列表 ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;提供互联网档案馆的存档，并且在这里部分也有副本&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* https://github.com/EtherDream/jsproxy/tree/master/cf-worker [https://web.archive.org/web/20200821024440/https://github.com/EtherDream/jsproxy/tree/master/cf-worker 互联网档案馆存档于2020/08/21 02:44:40]&lt;br /&gt;
:&lt;br /&gt;
:[https://github.com/EtherDream/jsproxy/raw/master/cf-worker/index.js JS本体] [https://web.archive.org/web/20200821024734/https://raw.githubusercontent.com/EtherDream/jsproxy/master/cf-worker/index.js 互联网档案馆存档于于2020/08/21 02:47:34]&lt;br /&gt;
:&lt;br /&gt;
:{{Hide|副本|&lt;br /&gt;
&amp;lt;poem&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;#039;use strict&amp;#039;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * static files (404.html, sw.js, conf.js)&lt;br /&gt;
 */&lt;br /&gt;
const ASSET_URL = &amp;#039;https://etherdream.github.io/jsproxy&amp;#039;&lt;br /&gt;
&lt;br /&gt;
const JS_VER = 10&lt;br /&gt;
const MAX_RETRY = 1&lt;br /&gt;
&lt;br /&gt;
/** @type {RequestInit} */&lt;br /&gt;
const PREFLIGHT_INIT = {&lt;br /&gt;
  status: 204,&lt;br /&gt;
  headers: new Headers({&lt;br /&gt;
    &amp;#039;access-control-allow-origin&amp;#039;: &amp;#039;*&amp;#039;,&lt;br /&gt;
    &amp;#039;access-control-allow-methods&amp;#039;: &amp;#039;GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS&amp;#039;,&lt;br /&gt;
    &amp;#039;access-control-max-age&amp;#039;: &amp;#039;1728000&amp;#039;,&lt;br /&gt;
  }),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {any} body&lt;br /&gt;
 * @param {number} status&lt;br /&gt;
 * @param {Object&amp;lt;string, string&amp;gt;} headers&lt;br /&gt;
 */&lt;br /&gt;
function makeRes(body, status = 200, headers = {}) {&lt;br /&gt;
  headers[&amp;#039;--ver&amp;#039;] = JS_VER&lt;br /&gt;
  headers[&amp;#039;access-control-allow-origin&amp;#039;] = &amp;#039;*&amp;#039;&lt;br /&gt;
  return new Response(body, {status, headers})&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {string} urlStr &lt;br /&gt;
 */&lt;br /&gt;
function newUrl(urlStr) {&lt;br /&gt;
  try {&lt;br /&gt;
    return new URL(urlStr)&lt;br /&gt;
  } catch (err) {&lt;br /&gt;
    return null&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
addEventListener(&amp;#039;fetch&amp;#039;, e =&amp;gt; {&lt;br /&gt;
  const ret = fetchHandler(e)&lt;br /&gt;
    .catch(err =&amp;gt; makeRes(&amp;#039;cfworker error:\n&amp;#039; + err.stack, 502))&lt;br /&gt;
  e.respondWith(ret)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {FetchEvent} e &lt;br /&gt;
 */&lt;br /&gt;
async function fetchHandler(e) {&lt;br /&gt;
  const req = e.request&lt;br /&gt;
  const urlStr = req.url&lt;br /&gt;
  const urlObj = new URL(urlStr)&lt;br /&gt;
  const path = urlObj.href.substr(urlObj.origin.length)&lt;br /&gt;
&lt;br /&gt;
  if (urlObj.protocol === &amp;#039;http:&amp;#039;) {&lt;br /&gt;
    urlObj.protocol = &amp;#039;https:&amp;#039;&lt;br /&gt;
    return makeRes(&amp;#039;&amp;#039;, 301, {&lt;br /&gt;
      &amp;#039;strict-transport-security&amp;#039;: &amp;#039;max-age=99999999; includeSubDomains; preload&amp;#039;,&lt;br /&gt;
      &amp;#039;location&amp;#039;: urlObj.href,&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (path.startsWith(&amp;#039;/http/&amp;#039;)) {&lt;br /&gt;
    return httpHandler(req, path.substr(6))&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  switch (path) {&lt;br /&gt;
  case &amp;#039;/http&amp;#039;:&lt;br /&gt;
    return makeRes(&amp;#039;请更新 cfworker 到最新版本!&amp;#039;)&lt;br /&gt;
  case &amp;#039;/ws&amp;#039;:&lt;br /&gt;
    return makeRes(&amp;#039;not support&amp;#039;, 400)&lt;br /&gt;
  case &amp;#039;/works&amp;#039;:&lt;br /&gt;
    return makeRes(&amp;#039;it works&amp;#039;)&lt;br /&gt;
  default:&lt;br /&gt;
    // static files&lt;br /&gt;
    return fetch(ASSET_URL + path)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Request} req&lt;br /&gt;
 * @param {string} pathname&lt;br /&gt;
 */&lt;br /&gt;
function httpHandler(req, pathname) {&lt;br /&gt;
  const reqHdrRaw = req.headers&lt;br /&gt;
  if (reqHdrRaw.has(&amp;#039;x-jsproxy&amp;#039;)) {&lt;br /&gt;
    return Response.error()&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // preflight&lt;br /&gt;
  if (req.method === &amp;#039;OPTIONS&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
      reqHdrRaw.has(&amp;#039;access-control-request-headers&amp;#039;)&lt;br /&gt;
  ) {&lt;br /&gt;
    return new Response(null, PREFLIGHT_INIT)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  let acehOld = false&lt;br /&gt;
  let rawSvr = &amp;#039;&amp;#039;&lt;br /&gt;
  let rawLen = &amp;#039;&amp;#039;&lt;br /&gt;
  let rawEtag = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  const reqHdrNew = new Headers(reqHdrRaw)&lt;br /&gt;
  reqHdrNew.set(&amp;#039;x-jsproxy&amp;#039;, &amp;#039;1&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
  // 此处逻辑和 http-dec-req-hdr.lua 大致相同&lt;br /&gt;
  // https://github.com/EtherDream/jsproxy/blob/master/lua/http-dec-req-hdr.lua&lt;br /&gt;
  const refer = reqHdrNew.get(&amp;#039;referer&amp;#039;)&lt;br /&gt;
  const query = refer.substr(refer.indexOf(&amp;#039;?&amp;#039;) + 1)&lt;br /&gt;
  if (!query) {&lt;br /&gt;
    return makeRes(&amp;#039;missing params&amp;#039;, 403)&lt;br /&gt;
  }&lt;br /&gt;
  const param = new URLSearchParams(query)&lt;br /&gt;
&lt;br /&gt;
  for (const [k, v] of Object.entries(param)) {&lt;br /&gt;
    if (k.substr(0, 2) === &amp;#039;--&amp;#039;) {&lt;br /&gt;
      // 系统信息&lt;br /&gt;
      switch (k.substr(2)) {&lt;br /&gt;
      case &amp;#039;aceh&amp;#039;:&lt;br /&gt;
        acehOld = true&lt;br /&gt;
        break&lt;br /&gt;
      case &amp;#039;raw-info&amp;#039;:&lt;br /&gt;
        [rawSvr, rawLen, rawEtag] = v.split(&amp;#039;|&amp;#039;)&lt;br /&gt;
        break&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      // 还原 HTTP 请求头&lt;br /&gt;
      if (v) {&lt;br /&gt;
        reqHdrNew.set(k, v)&lt;br /&gt;
      } else {&lt;br /&gt;
        reqHdrNew.delete(k)&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  if (!param.has(&amp;#039;referer&amp;#039;)) {&lt;br /&gt;
    reqHdrNew.delete(&amp;#039;referer&amp;#039;)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // cfworker 会把路径中的 `//` 合并成 `/`&lt;br /&gt;
  const urlStr = pathname.replace(/^(https?):\/+/, &amp;#039;$1://&amp;#039;)&lt;br /&gt;
  const urlObj = newUrl(urlStr)&lt;br /&gt;
  if (!urlObj) {&lt;br /&gt;
    return makeRes(&amp;#039;invalid proxy url: &amp;#039; + urlStr, 403)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /** @type {RequestInit} */&lt;br /&gt;
  const reqInit = {&lt;br /&gt;
    method: req.method,&lt;br /&gt;
    headers: reqHdrNew,&lt;br /&gt;
    redirect: &amp;#039;manual&amp;#039;,&lt;br /&gt;
  }&lt;br /&gt;
  if (req.method === &amp;#039;POST&amp;#039;) {&lt;br /&gt;
    reqInit.body = req.body&lt;br /&gt;
  }&lt;br /&gt;
  return proxy(urlObj, reqInit, acehOld, rawLen, 0)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @param {URL} urlObj &lt;br /&gt;
 * @param {RequestInit} reqInit &lt;br /&gt;
 * @param {number} retryTimes &lt;br /&gt;
 */&lt;br /&gt;
async function proxy(urlObj, reqInit, acehOld, rawLen, retryTimes) {&lt;br /&gt;
  const res = await fetch(urlObj.href, reqInit)&lt;br /&gt;
  const resHdrOld = res.headers&lt;br /&gt;
  const resHdrNew = new Headers(resHdrOld)&lt;br /&gt;
&lt;br /&gt;
  let expose = &amp;#039;*&amp;#039;&lt;br /&gt;
  &lt;br /&gt;
  for (const [k, v] of resHdrOld.entries()) {&lt;br /&gt;
    if (k === &amp;#039;access-control-allow-origin&amp;#039; ||&lt;br /&gt;
        k === &amp;#039;access-control-expose-headers&amp;#039; ||&lt;br /&gt;
        k === &amp;#039;location&amp;#039; ||&lt;br /&gt;
        k === &amp;#039;set-cookie&amp;#039;&lt;br /&gt;
    ) {&lt;br /&gt;
      const x = &amp;#039;--&amp;#039; + k&lt;br /&gt;
      resHdrNew.set(x, v)&lt;br /&gt;
      if (acehOld) {&lt;br /&gt;
        expose = expose + &amp;#039;,&amp;#039; + x&lt;br /&gt;
      }&lt;br /&gt;
      resHdrNew.delete(k)&lt;br /&gt;
    }&lt;br /&gt;
    else if (acehOld &amp;amp;&amp;amp;&lt;br /&gt;
      k !== &amp;#039;cache-control&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
      k !== &amp;#039;content-language&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
      k !== &amp;#039;content-type&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
      k !== &amp;#039;expires&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
      k !== &amp;#039;last-modified&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
      k !== &amp;#039;pragma&amp;#039;&lt;br /&gt;
    ) {&lt;br /&gt;
      expose = expose + &amp;#039;,&amp;#039; + k&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (acehOld) {&lt;br /&gt;
    expose = expose + &amp;#039;,--s&amp;#039;&lt;br /&gt;
    resHdrNew.set(&amp;#039;--t&amp;#039;, &amp;#039;1&amp;#039;)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // verify&lt;br /&gt;
  if (rawLen) {&lt;br /&gt;
    const newLen = resHdrOld.get(&amp;#039;content-length&amp;#039;) || &amp;#039;&amp;#039;&lt;br /&gt;
    const badLen = (rawLen !== newLen)&lt;br /&gt;
&lt;br /&gt;
    if (badLen) {&lt;br /&gt;
      if (retryTimes &amp;lt; MAX_RETRY) {&lt;br /&gt;
        urlObj = await parseYtVideoRedir(urlObj, newLen, res)&lt;br /&gt;
        if (urlObj) {&lt;br /&gt;
          return proxy(urlObj, reqInit, acehOld, rawLen, retryTimes + 1)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      return makeRes(res.body, 400, {&lt;br /&gt;
        &amp;#039;--error&amp;#039;: `bad len: ${newLen}, except: ${rawLen}`,&lt;br /&gt;
        &amp;#039;access-control-expose-headers&amp;#039;: &amp;#039;--error&amp;#039;,&lt;br /&gt;
      })&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (retryTimes &amp;gt; 1) {&lt;br /&gt;
      resHdrNew.set(&amp;#039;--retry&amp;#039;, retryTimes)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  let status = res.status&lt;br /&gt;
&lt;br /&gt;
  resHdrNew.set(&amp;#039;access-control-expose-headers&amp;#039;, expose)&lt;br /&gt;
  resHdrNew.set(&amp;#039;access-control-allow-origin&amp;#039;, &amp;#039;*&amp;#039;)&lt;br /&gt;
  resHdrNew.set(&amp;#039;--s&amp;#039;, status)&lt;br /&gt;
  resHdrNew.set(&amp;#039;--ver&amp;#039;, JS_VER)&lt;br /&gt;
&lt;br /&gt;
  resHdrNew.delete(&amp;#039;content-security-policy&amp;#039;)&lt;br /&gt;
  resHdrNew.delete(&amp;#039;content-security-policy-report-only&amp;#039;)&lt;br /&gt;
  resHdrNew.delete(&amp;#039;clear-site-data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
  if (status === 301 ||&lt;br /&gt;
      status === 302 ||&lt;br /&gt;
      status === 303 ||&lt;br /&gt;
      status === 307 ||&lt;br /&gt;
      status === 308&lt;br /&gt;
  ) {&lt;br /&gt;
    status = status + 10&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return new Response(res.body, {&lt;br /&gt;
    status,&lt;br /&gt;
    headers: resHdrNew,&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {URL} urlObj &lt;br /&gt;
 */&lt;br /&gt;
function isYtUrl(urlObj) {&lt;br /&gt;
  return (&lt;br /&gt;
    urlObj.host.endsWith(&amp;#039;.googlevideo.com&amp;#039;) &amp;amp;&amp;amp;&lt;br /&gt;
    urlObj.pathname.startsWith(&amp;#039;/videoplayback&amp;#039;)&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {URL} urlObj &lt;br /&gt;
 * @param {number} newLen &lt;br /&gt;
 * @param {Response} res &lt;br /&gt;
 */&lt;br /&gt;
async function parseYtVideoRedir(urlObj, newLen, res) {&lt;br /&gt;
  if (newLen &amp;gt; 2000) {&lt;br /&gt;
    return null&lt;br /&gt;
  }&lt;br /&gt;
  if (!isYtUrl(urlObj)) {&lt;br /&gt;
    return null&lt;br /&gt;
  }&lt;br /&gt;
  try {&lt;br /&gt;
    const data = await res.text()&lt;br /&gt;
    urlObj = new URL(data)&lt;br /&gt;
  } catch (err) {&lt;br /&gt;
    return null&lt;br /&gt;
  }&lt;br /&gt;
  if (!isYtUrl(urlObj)) {&lt;br /&gt;
    return null&lt;br /&gt;
  }&lt;br /&gt;
  return urlObj&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/poem&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
*https://github.com/xiaoyang-liu-cs/workers-proxy [https://web.archive.org/web/20200821025437/https://github.com/xiaoyang-liu-cs/workers-proxy 互联网档案馆存档于2020/08/21 02:54:37]&lt;br /&gt;
:&lt;br /&gt;
:[https://github.com/xiaoyang-liu-cs/workers-proxy/blob/master/README_zh.md 中文Readme文件] [https://web.archive.org/web/20200821025639/https://github.com/xiaoyang-liu-cs/workers-proxy/blob/master/README_zh.md 互联网档案馆存档于2020/08/21 02:56:39]&lt;br /&gt;
:&lt;br /&gt;
:[https://github.com/xiaoyang-liu-cs/workers-proxy/raw/master/src/index.js JS本体] [https://web.archive.org/web/20200821030036/https://raw.githubusercontent.com/xiaoyang-liu-cs/workers-proxy/master/src/index.js 互联网档案馆存档于2020/08/21 03:00:36]&lt;br /&gt;
{{Clear}}&lt;/div&gt;</summary>
		<author><name>imported&gt;Cg49</name></author>
	</entry>
</feed>