BeforeHttpRequest事件
BeforeHttpRequest事件和HttpRequest事件都可以响应Http访问请求,向客户端发送网页和文件。
重要提示:
1、BeforeHttpRequest执行的时候,还没有接收客户端上传的表单数据和文件,所以在此事件中,PostValues、Files和SaveFiles三个成员无效。
2、BeforeHttpRequest事件代码执行完毕之后,默认会继续执行HttpRequest事件,除非在BeforeHttpRequest中将Cancel属性设置为True,或者使用了WriteString或WriteFile等方法向客户端发送了数据。
3、BeforeHttpRequest和HttpRequest使用的是同一个e参数,所以在BeforeHttpRequest进行的任何设置,都等同在HttpRequest事件中进行了同样的设置。
两个事件的本质区别在于:BeforeHttpRequest在接收数据和文件之前触发,HttpRequest在接收数据和文件之后触发,BeforeHttpRequest非常适合提前做
前置验证工作。
例如有人上传恶意文件(或大文件炸弹),BeforeHttpRequest可直接拒绝,而HttpRequest则将恶意文件接收并存储在一个临时目录后再触发,消耗了服务期资源接收,占用了硬盘空间存储,而且恶意文件(
或大文件炸弹)已经在服务器上,有可能会攻击得逞。
示例
假定做了一个名为upload.htm的上传页面,一切都按照原来设计,但是在BeforeHttpRequest事件中加上了代码:
Dim
Token As
String = e.Headers("token")
If
Token <>
"定期随机生成的token字符串" Then
e.Cancel
= True
'e.WriteString("可以根据需要返回信息,直接cancel对方会显示404错误")
End
If
现在只有通过token验证的访问请求,才会触发HttpRequest事件,也就是才能上传文件,避免非法访问占用服务器资源。
BeforeHttpRequest的e参数属性有:
HttpRequest的e参数方法有: