您可以使用边缘函数实现对绑定域名的反向代理。本文介绍了升级 HTTP 请求和修改请求/响应头两种示例场景。
以下示例展示了如何使用边缘函数拦截和处理网络请求,静默地将所有的 HTTP 请求升级为 HTTPS 请求,并发送到新的 HTTPS 地址。该操作可以用来防止劫持,增强网站的安全性。
addEventListener("fetch", (event) => {
event.respondWith(upgradeToSSL(event));
});
//定义一个异步函数,将HTTP请求升级为HTTPS
async function upgradeToSSL(event) {
// 获取传入请求对象
const incomingRequest = event.request;
// 解析请求的URL
const url = new URL(incomingRequest.url);
// 检查请求所使用的协议是否为HTTP
if (url.protocol == 'http:') {
// 如果是HTTP协议,则将协议更改为HTTPS
url.protocol = 'https';
// 发送一个新的请求到HTTPS地址,原始请求中协议以外的其他部分正常透传
return fetch(url.toString(), {
method: incomingRequest.method,
headers: incomingRequest.headers,
body: incomingRequest.body
});
} else {
// 如果是HTTPS协议,则直接发送原始请求。
return fetch(incomingRequest);
}
}
以下示例如何使用边缘函数实现对请求的反向代理,对请求和响应添加自定义的请求头信息。
addEventListener("fetch", (event) => {
event.respondWith(handle(event));
});
// 定义一个异步函数,处理fetch请求并添加自定义请求头信息
async function handle(event) {
// 获取客户端传入的请求
const request = event.request;
// 在请求头中添加一个自定义请求头"x-via-sparrow-start",值为当前时间戳
request.headers.append("x-via-sparrow-start", `${Date.now()}`);
// fetch 反向代理,发送请求并等待响应。
const response = await fetch(request);
// 在响应头中添加一个自定义响应头"x-via-sparrow-done",值为当前时间戳
response.headers.append("x-via-sparrow-done", `${Date.now()}`);
// 将处理后的响应对象返回给客户端
return response;
}