使用 C++ 为 IIS 创建自定义 HTTP 模块
在 Web 服务器的管理和扩展中,创建自定义的 HTTP 模块是一项非常有用的技能。本文将详细介绍如何使用 C++ 为 IIS 创建一个自定义的 HTTP 模块,以防止网站内容被其他网站进行跨链接。
模块与 IIS 管道的交互
模块与 IIS 管道的交互方式对于理解整个流程至关重要。在 IIS 管道中,不同的模块会在不同的请求处理阶段被调用。例如,模块 A 在处理 OnBeginRequest 后返回 RQ_NOTIFICATION_FINISH_REQUEST,这将阻止模块 B 或其他任何模块(包括默认的开箱即用模块)处理其自身的实现。同样,当模块 B 返回 RQ_NOTIFICATION_FINISH_REQUEST 结果时,会绕过所有后续模块(除了 LogRequest 和 EndRequest 通知)。
示例原生模块需求
假设我们有一个需求,要防止网站的内容被其他网站进行跨链接。例如,我们的网站包含一些图形内容,而其他网站将这些内容包含在自己的网页中,每次有人查看其他网页时,都会对我们的 Web 服务器造成访问,浪费宝贵的带宽和系统资源。
原生模块设计
在设计原生模块时,我们将使用 CGI 变量来检查 Web 请求的某些属性。具体使用以下两个 CGI 变量:
- HTTP_REFERER :包含请求发起的网站的 URI。空值可能表示请求是从书签、手动输入或搜索引擎机器人等发起的。如果请求是通过点击网页上的链接发起的(无论是内部引用,如图像链接还是实际用户点击 href 链接),则会包含发起网页的完整 UR
超级会员免费看
订阅专栏 解锁全文
95

被折叠的 条评论
为什么被折叠?



