您现在的位置:首页 >> 网络通讯 >> 网络通讯 >> 内容

用Delphi编写ISAPI过滤器详解之汉字内码

时间:2011/9/3 15:13:14 点击:

  核心提示:这样做显然要增加站点的维护工作,更新主页时要同时更新两部分。而且如果主页内容是实时更新的,采用手工维护两套主页的方法显然不行了。本文介绍了用ISAPI过滤器来动态产生另外一套内码主页的方法,这样就可以...

这样做显然要增加站点的维护工作,更新主页时要同时更新两部分。而且如果主页内容是实时更新的,采用手工维护两套主页的方法显然不行了。本文介绍了用ISAPI过滤器来动态产生另外一套内码主页的方法,这样就可以只制作一套主页就同时支持GB码和 BIG5码。

  基本的思路,编写一个ISAPI过滤器,对于所有最终返回给用户的HTML文本,实行内码转换。这样用户看到的将是他期望的编码方式。ISAPI过滤器可以作为WEBServer横向功能扩展。当某个预先定义好

  的服务器端的事件发生时,IIS就调用用户定义好的过程,此时就可以通过修改IIS传来的数据来改变IIS的行为。IIS预定义的事件如下:

SF_NOTIFY_READ_RAW_DATA

  当IIS要从用户读入数据时发生。过滤器可以在IIS处理他们之前检查甚至修改用户输入的原始数据。

  SF_NOTIFY_PREPROC_HEADERS

  IIS预处理HTTP请求包头后发生。过滤器可以检查修改增加包头。

  SF_NOTIFY_AUTHENTICATION

  IIS试图验证用户身份时发生。过滤器可以实现自己的验证方案。

  SF_NOTIFY_URL_MAP

  IIS试图将URL解释为物理文件时。过滤器可以将请求重定向到其他的文件。

  SF_NOTIFY_ACCESS_DENIED
  当身份验证失败时发生。
  SF_NOTIFY_SEND_RAW_DATA

  当其他程序处理完,IIS准备将数据发回给用户时发生。我们的过滤器就通过此事件,转换内码。

  SF_NOTIFY_LOG

  当IIS写记录到LOG文件时。过滤器可以搜集更多的信息写入记录文件中。

  SF_NOTIFY_END_OF_REQUEST

  当一个HTTP请求结束时发生。过滤器可以实现基于请求的处理。由于这是在IIS3.0中新增的,Delphi中的ISAPI2.pass单元中没有相应的定义可以手工加入SF_NOTIFY_END_OF_REQUEST=$80

  SF_NOTIFY_END_OF_NET_SESSION

  连接结束时。注意如果浏览器支持"keep-alive",一次连接可能包含几个HTTP请求。过滤器可以用他来释放一些用户的资源。

  我们要实现动态的内码转换,只要过滤器处理SF_NOTIFY_SEND_RAW_DATA事件,将IIS处理好的数据转换成需要的内码就可以实现内码的动态转换。具体程序有两个问题需要注意:

1.过滤器只能处理返回是HTML格式的,其他图片等二进制请求无须也不允许转换。
2.对于返回的HTML,只处理实际数据,其他HTTP协议的包不应该处理。

上一页1234下一页

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2020 版权所有 All Rights Reserved.
  • 沪ICP备05001939号