如何在获取网络字体时删除自定义 header 字段?
How to remove a custom header field while fetching webfonts?
我在尝试从 Google 获取字体时偶然发现了 CORS 错误。
我目前有一个 express.js 服务器为人偶操纵机器人提供 html 文件。我需要使用自定义 header 字段验证向该服务器发送请求的用户。但是,当 html 文件从 Google 获取字体时,它使用自定义 header 并且请求失败并出现以下错误:
Access to font at 'http://fonts.gstatic.com/s/allura/v18/9oRPNYsQpS4zjuA_iwgW.woff2' from origin 'http://localhost:5000' has been blocked by CORS policy: Request header field test-token is not allowed by Access-Control-Allow-Headers in preflight response.
我在下面的一个更小的脚本中复制了这个问题:
const puppeteer = require('puppeteer');
const express = require('express');
const app = express();
//middleware
app.use((req,res,next)=>{
//verify token
if(req.header("test-token") === "foobarbaz") return next();
})
app.use(express.static("public"));
app.listen(5000);
(async()=>{
const browser = await puppeteer.launch({
ignoreHTTPSErrors:true,
headless:true,
});
const page = await browser.newPage();
//for debug purposes
page.on("console",console.log);
page.setExtraHTTPHeaders({
"test-token":"foobarbaz"
})
await page.goto("http://localhost:5000/index.html");
const content = await page.content();
console.log(content);
})()
我的样本 HTML 加载了网络字体的文件:
<html>
<head>
<link rel="preconnect" href="//fonts.googleapis.com">
<link rel="preconnect" href="//fonts.gstatic.com" crossorigin>
<link href="//fonts.googleapis.com/css2?family=Allura&family=Bebas+Neue&family=Bree+Serif&family=Twinkle+Star&display=swap" rel="stylesheet">
<style>
body{
font-family: 'Allura', cursive;
}
</style>
</head>
<body>
Hello world
</body>
</html>
我尝试以某种方式根据 express.js 请求删除自定义 header,但没有成功,就像这样:
app.use((req,res,next)=>{
//verify token
if(req.header("test-token") === "foobarbaz"){
res.removeHeader("text-token");
next();
}
})
如何在此自定义 header 上对用户进行身份验证,然后将其从 html 可能执行的进一步请求中删除(在这种情况下,加载外部网络字体)?
而不是 page.setExtraHTTPHeaders
,考虑使用 page.setRequestInterception
以便设置额外的 header 仅用于对 您的 服务器的请求,而不是Google 个服务器。
我在尝试从 Google 获取字体时偶然发现了 CORS 错误。
我目前有一个 express.js 服务器为人偶操纵机器人提供 html 文件。我需要使用自定义 header 字段验证向该服务器发送请求的用户。但是,当 html 文件从 Google 获取字体时,它使用自定义 header 并且请求失败并出现以下错误:
Access to font at 'http://fonts.gstatic.com/s/allura/v18/9oRPNYsQpS4zjuA_iwgW.woff2' from origin 'http://localhost:5000' has been blocked by CORS policy: Request header field test-token is not allowed by Access-Control-Allow-Headers in preflight response.
我在下面的一个更小的脚本中复制了这个问题:
const puppeteer = require('puppeteer');
const express = require('express');
const app = express();
//middleware
app.use((req,res,next)=>{
//verify token
if(req.header("test-token") === "foobarbaz") return next();
})
app.use(express.static("public"));
app.listen(5000);
(async()=>{
const browser = await puppeteer.launch({
ignoreHTTPSErrors:true,
headless:true,
});
const page = await browser.newPage();
//for debug purposes
page.on("console",console.log);
page.setExtraHTTPHeaders({
"test-token":"foobarbaz"
})
await page.goto("http://localhost:5000/index.html");
const content = await page.content();
console.log(content);
})()
我的样本 HTML 加载了网络字体的文件:
<html>
<head>
<link rel="preconnect" href="//fonts.googleapis.com">
<link rel="preconnect" href="//fonts.gstatic.com" crossorigin>
<link href="//fonts.googleapis.com/css2?family=Allura&family=Bebas+Neue&family=Bree+Serif&family=Twinkle+Star&display=swap" rel="stylesheet">
<style>
body{
font-family: 'Allura', cursive;
}
</style>
</head>
<body>
Hello world
</body>
</html>
我尝试以某种方式根据 express.js 请求删除自定义 header,但没有成功,就像这样:
app.use((req,res,next)=>{
//verify token
if(req.header("test-token") === "foobarbaz"){
res.removeHeader("text-token");
next();
}
})
如何在此自定义 header 上对用户进行身份验证,然后将其从 html 可能执行的进一步请求中删除(在这种情况下,加载外部网络字体)?
而不是 page.setExtraHTTPHeaders
,考虑使用 page.setRequestInterception
以便设置额外的 header 仅用于对 您的 服务器的请求,而不是Google 个服务器。