googleapis / worker /worker.js
Transformer
feat: Worker 版本同步修改 - 移除强制认证,保留 authorization 头
5ad75a2
export default {
async fetch(request, env) {
const url = new URL(request.url);
// 只处理 /proxy 路径
if (url.pathname !== "/proxy") {
return new Response("Not Found", { status: 404 });
}
// 可选认证:如果传递了凭据则验证,但不强制要求也不阻止请求
const auth = request.headers.get("Authorization");
if (auth && auth.startsWith("Basic ")) {
const expected = btoa(`${env.PROXY_USER}:${env.PROXY_PASS}`);
if (auth.slice(6) !== expected) {
console.log(`[Auth] Invalid credentials provided`);
}
}
// 获取目标 URL
const target = url.searchParams.get("target_url");
if (!target) {
return new Response("Missing target_url parameter", { status: 400 });
}
try {
// 构建转发头,过滤 host(Worker网关的host,不是目标的)
const headers = new Headers();
for (const [key, value] of request.headers) {
const lower = key.toLowerCase();
if (lower !== "host") {
headers.set(key, value);
}
}
// 转发请求,不跟随重定向(与原版行为一致)
const body = ["GET", "HEAD"].includes(request.method) ? null : request.body;
const resp = await fetch(target, {
method: request.method,
headers: headers,
body: body,
redirect: "manual",
});
// 构建响应头,去掉 hop-by-hop 头
const respHeaders = new Headers();
for (const [key, value] of resp.headers) {
const lower = key.toLowerCase();
if (lower !== "transfer-encoding" && lower !== "connection") {
respHeaders.set(key, value);
}
}
// 流式返回响应体
return new Response(resp.body, {
status: resp.status,
headers: respHeaders,
});
} catch (e) {
return new Response(`Proxy Error: ${e.message}`, { status: 500 });
}
},
};