这里的 http proxy 是指,把云函数的触发方式设置为 http 触发,然后访问该云函数的 http 链接,事实上相当于访问其他链接,例如 google.com。客户端不直接访问目标链接,而是通过云函数访问目标链接,云函数再把响应返回给客户端。
之所以有这个需求,主要是 2 个原因:
市面上的云函数貌似有 3 种,如果 cloudflare 的 service worker 也视作一种云函数的话:
对于第一种,可以使用这些工具实现:
代码示例:
//运行在腾讯云 tcb 的函数示例,函数入参是 event、context
const { createProxyMiddleware } = require("http-proxy-middleware");
const serverless = require("serverless-http");
const express = require("express");
const app = express();
exports.main = async (eve, context) => {
const event = typeof eve === "string" ? JSON.parse(eve) : eve;
const url = event.queryStringParameters.url;
if (!url) {
return "请提供 url";
}
console.log("目的 url:", url);
const jsonPlaceholderProxy = createProxyMiddleware({
target: url,
changeOrigin: true,
});
app.use("/", jsonPlaceholderProxy);
const handler = serverless(app);
const result = await handler(event, context);
return result;
};
对于第二种,只需要 http-proxy-middleware,参考这篇文章。
对于第三种,似乎不需要借助任务工具,service worker 的例子。