请求过滤脚本
我们可以在边缘节点中使用Javascript脚本对请求等进行过滤、修改。
设置请求过滤脚本
可以在网站”设置”–“边缘脚本”中设置请求过滤脚本。
请求处理过程:
|-----------------|
| 接收到客户端请求 |
|-----------------|
|
\|/
|----------|
| 配置请求 |
|----------|
|
\|/
|------------------|
| 调用请求初始化脚本 |
|------------------|
|
\|/
|-------------------|
| 配置Header、源站等 |
|-------------------|
|
\|/
|-------------------|
| 调用准备发送请求脚本 |
|-------------------|
类/函数
除了Javascript自定义的所有类、函数外,还有以下CDN自定义的类/函数可以调用:
- 请求对象:gojs.net.http.Request
- 响应对象:gojs.net.http.Response
- URL:gojs.net.URL
- HTTP客户端:gojs.net.http.client.Client
- HTTP客户端请求对象:gojs.net.http.client.Request
- HTTP客户端响应对象:gojs.net.http.client.Response
预定义变量
在边缘脚本中可以直接使用以下预定义变量:
- 请求变量(
req
),类型为gojs.net.http.Request
- 和响应变量(
resp
),类型为gojs.net.http.Response
简单示例
在日志中打印请求ID
如果想在日志中打印请求ID,可以在”请求初始化”脚本中写入以下脚本:
console.log(req.requestId)
执行后,可以在”边缘节点”–“运行日志”中查看脚本中打印的日志。
根据条件修改响应Header
可以使用resp.setHeader()
方法来修改响应Header:
// 查找匹配 webhook 的请求路径
if (req.path.match(/webhook/)) {
// 设置响应Header
resp.setHeader("Hello", "World")
}
关于resp
更多可以使用的属性、方法,可以在这里查看。
根据条件输出自定义内容
可以使用resp.send()
方法来发送响应内容:
// 查找匹配 hello 的请求路径
if (req.path == "/hello") {
// 发送内容,发送后,请求不会继续执行
resp.send(200, "Hello, World")
}
关于resp
更多可以使用的属性、方法,可以在这里查看。
常见问题
使用Javascript过滤请求会不会严重性能?
CDN的Javascript引擎使用了Google V8引擎,性能得到了很好的保证,通常对性能的影响不会超过10%。
使用console.log()打印的日志在哪里可以找到?
在Javascript中使用console.log()
打印的日志可以在”边缘节点”–“运行日志”中找到(有可能会延迟1分钟左右),可以使用”标签”和关键词对日志进行筛选。