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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZTao-z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值