实现思路
1、本地发送请求时利用将源站地址附在HTTP报文头部的 x-forwarded-host
字段中
2、将请求转发至云函数
3、在云函数中,读取报文头部的 x-forwarded-host
字段值,重新拼接请求地址
4、云函数根据新地址重新发送请求。注意,这里需要将请求的返回格式设置成 arraybuffer
,然后转成 Base64
格式返回。其原因在于云函数请求图片类型的资源时,发现在转发的过程中云函数对源数据进行了处理(?),导致客户端收到的内容与原文件的内容不相符,解析失败
云函数实现代码
// 本实例基于腾讯云提供的云函数服务,采用node作为云函数环境
const axios = require("axios");
exports.main = async (event, context) => {
const headers = event.headers;
const originHost = headers['x-forwarded-host'];
const url = 'https://' + originHost + event.path;
delete headers['x-forwarded-host'];
headers['host'] = originHost || '';
const res = await axios.request({
method: event.httpMethod,
url,
headers,
responseType: 'arraybuffer',
data: event.body,
params: event.queryStringParameters
});
return {
"isBase64Encoded": true,
"statusCode": 200,
"body": Buffer.from(res.data, 'binary').toString('base64')
}
};