我的应用程序:当您从浏览器向我的 Node 服务器发送请求时,我的 Node 服务器将请求原始网站,下载其所有静态文件(包括代码)并将它们返回给用户。下次您访问我的 Node 服务器时,它将服务器从 Node 返回的所有内容,而不是请求源。
当我从 Node 请求 Font Awesome 文件时
http://example.com/modules/megamenu/fonts/fontawesome-webfont.woff?v=4.2.0
该文件的内容与我使用 cUrl 请求相同 URL 时的内容不同。
当我将文件从 Node 返回到浏览器时,这会导致浏览器中出现此错误:
Failed to decode downloaded font: http://nodeDomain.test/modules/megamenu/fonts/fontawesome-webfont.woff?v=4.2.0
如果我将通过curl请求的文件中的内容复制并粘贴到存储在我的 Node 服务器上的文件中,错误就会消失并且所有很棒的字体都可以工作。
以下是我随请求一起从 Node 发送到源服务器的 header 。
{
connection: 'keep-alive',
pragma: 'no-cache',
'cache-control': 'no-cache',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36',
accept: '*/*',
referer: 'http://example.com/modules/megamenu/css/font-awesome.min.css',
'accept-language': 'en-US,en;q=0.8',
cookie: 'PrestaShop-a30a9934ef476d11b.....'
}
我尝试查看从命令行执行curl 请求时发送的 header ,但我不知道如何执行此操作。
______用于获取文件的 Node 代码_______
Url: in options is the one stated above
headers: are the browsers request headers
var options = {
url: originRequestPath,
headers: requestHeaders
}
var originPage = rquest(options);
var responseBody = '';
var resHeads = '';
originPage.on('response', function(res)
{
//store response headers locally
}
originPage.on('data', function(chunk)
{
responseBody += chunk;
});
originPage.on('end', function()
{
storeData.storePageData(storeFilePath, responseBody);
});
__________Store Function below________________
exp.storePageData = function(storePath, pageContent)
{
fs.outputFile(storePath, pageContent, function(err) {
if(err){ console.log(err)}
});
}
最佳答案
我相信您的代码的问题是您正在将缓冲区输出转换为 utf8 字符串。由于您要添加带有空字符串 responseBody += chunk;
的缓冲区,该缓冲区将转换为 utf-8 字符串。因此,您将丢失一些二进制文件的数据。试试这个方法:
var originPage = rquest(options);
var chunks = []
originPage.on('response', function(res)
{
//store response headers locally
}
originPage.on('data', function(chunk)
{
chunks.push(chunk)
});
originPage.on('end', function()
{
var data = Buffer.concat(chunks)
//send data to browser and store content locally
});
关于javascript - 从 nodeJs 请求 font Awesome 文件发送回错误的数据/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318701/