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()
备注:
- 备注1:支持的变量
示例
根据请求路径来判断是否跳过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 中国