Skip to content

Commit 517136d

Browse files
committed
feat: Node.js 环境规范化 profile-web-page-url 的值, 设置响应头失败时仅输出日志
1 parent cd023cd commit 517136d

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sub-store",
3-
"version": "2.21.33",
3+
"version": "2.21.34",
44
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and Shadowrocket.",
55
"main": "src/main.js",
66
"scripts": {

backend/src/vendor/express.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,42 @@ export default function express({ substore: $, port, host }) {
3131
bodyParser.urlencoded({ verify: rawBodySaver, extended: true }),
3232
);
3333
app.use(bodyParser.raw({ verify: rawBodySaver, type: '*/*' }));
34+
app.use((req, res, next) => {
35+
const originalSetHeader = res.setHeader.bind(res);
36+
37+
res.setHeader = function (name, value) {
38+
function normalize(v) {
39+
if (typeof v !== 'string') return v;
40+
41+
if (['profile-web-page-url'].includes(name.toLowerCase())) {
42+
try {
43+
const url = new URL(v);
44+
45+
return url.href; // 自动 punycode + 标准化
46+
} catch {
47+
return v;
48+
}
49+
}
50+
51+
return v;
52+
}
53+
54+
try {
55+
if (Array.isArray(value)) {
56+
value = value.map(normalize);
57+
} else {
58+
value = normalize(value);
59+
}
60+
61+
return originalSetHeader(name, value);
62+
} catch (err) {
63+
console.log(`Invalid header ignored\n${name}: ${value}`);
64+
return this;
65+
}
66+
};
67+
68+
next();
69+
});
3470
app.use((_, res, next) => {
3571
res.set(DEFAULT_HEADERS);
3672
next();

0 commit comments

Comments
 (0)