{{i18nTranslate('_layout.t11')}} {{i18nGetLang()==='zh' ? 'EN' : '中文'}}

# 请求过滤脚本

我们可以在边缘节点中使用Javascript脚本对请求等进行过滤、修改。

## 设置请求过滤脚本

可以在网站”设置”–“边缘脚本”中设置请求过滤脚本。

请求处理过程：

    |-----------------|
    | 接收到客户端请求   |
    |-----------------|
         |
        \|/
    |----------|
    | 配置请求  |
    |----------|
         |
        \|/
    |------------------|
    | 调用请求初始化脚本  |
    |------------------|
         |
        \|/
    |-------------------|
    | 配置Header、源站等   |
    |-------------------|
         |
        \|/
    |-------------------|
    | 调用准备发送请求脚本  |
    |-------------------|

## 类/函数

除了Javascript自定义的所有类、函数外，还有以下GoEdge自定义的类/函数可以调用：

- 请求对象：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过滤请求会不会严重性能？

GoEdge的Javascript引擎使用了Google V8引擎，性能得到了很好的保证，通常对性能的影响不会超过10%。

## 使用console.log()打印的日志在哪里可以找到？

在Javascript中使用`console.log()`打印的日志可以在”边缘节点”–“运行日志”中找到（有可能会延迟1分钟左右），可以使用”标签”和关键词对日志进行筛选。

{{i18nTranslate('_layout.t27')}}
{{i18nTranslate('_layout.t12')}}