gojs.net.http.Request

请求对象,通常无需初始化,可以直接在请求相关的边缘脚本中调用。

方法和属性

// 请求ID
req.id

// 服务信息,包括id等属性
req.server

// 节点信息,包括id等属性
req.node

// 请求ID,同 req.id
req.requestId

// 请求完整URL
req.url

// 请求完整URL,同 req.url
req.requestURL

// 请求路径,不带参数
req.path

// 请求路径,不带参数,同 req.path
req.requestPath

// 请求URI,带参数,可以在发送请求之前修改
req.uri

// 请求URI,带参数,可以在发送请求之前修改,同  req.uri
req.requestURI

// 请求主机名,带端口 
req.host

// 请求客户端地址,可以通过X-Real-IP等HTTP Header获取
req.remoteAddr

// 请求客户端地址,直接连接节点的地址,有可能是别的代理服务
req.rawRemoteAddr

// 请求客户端端口号
req.remotePort

// 请求方法
req.method

// 请求发送的内容长度
req.contentLength

// 请求的内容编码
req.transferEncoding

// 请求的协议,比如HTTP/1.0
req.proto

// 请求的协议的主版本,比如1.0版本的主版本就是1
req.protoMajor

// 请求的协议的小版本,比如1.0版本的小版本为0
req.protoMinor

// 请求Cookie值
req.cookie(name)

// 请求的Header,结构为:{ name1: [value1, value2], name2: [value3], ... } 
req.header

// 设置请求Header
// 值可以是一个字符串,也可以是一组字符串
req.setHeader(name, value)
req.setHeader(name, values)

// 删除某个请求Header
req.deleteHeader(name)

// 设置请求相关属性
req.setAttr(name, value)

// 设置请求相关变量值
req.setVar(name, value)

// 格式化一组变量值,具体支持的变量,请参考备注1
// 比如 req.format("${requestId}: ${requestPath}")
req.format(varString)

// 设置当前请求脚本执行完毕,不再执行后续的其他脚本
req.done()

// 允许请求,标记当前请求不启用WAF检查
// 需要在请求初始化时调用
req.allow()

// 关闭当前请求所在连接
// 这种情况下,不仅不会执行当前请求,同连接的其他请求也会一并拒绝执行
req.close()

备注:

示例

根据请求路径来判断是否跳过WAF检查

// 其中 /news 换成你自己要检查的路径
if (req.path == "/news") {
	req.allow()	
}

根据请求路径来决定是否阻止访问

// 这里我们阻止以 /. 开头的路径,比如 /.svn 之类的都将被阻止
if (req.path.startsWith("/.")) {
	// 断开当前连接,是对恶意请求比较常见的处理方式
	req.close()
}

打印用户所在国家或地区

if (req.path == "/country") {
	resp.send(200, "You are from " + req.format("${geo.country.name}"))
	return
}
其中 ${geo.country.name} 是请求中可以使用的变量,更多支持的变量可以看这里

这样当用户访问 /country 时就可以打印出国家名,类似于:

You are from 中国