Serverless 云函数实现请求代理

实现思路

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')
    }
};


版权声明:本文为think_A_lot原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。