博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache模块开发/用C语言扩展apache
阅读量:5344 次
发布时间:2019-06-15

本文共 2156 字,大约阅读时间需要 7 分钟。

Apache模块开发/用C语言扩展apache(1:简述)
by linux_prog
   Apache是一个非常稳定而且非常open的web server,它的很多功能都可以通过plugin的方式去扩展。
比如:mod_proxy使得apache可以作代理, mod_rewrite使得apache可以实现非常强大的url mapping和rewritting
功能,你是否也想自己来开发一个apache module呢?网上这方面的文章非常的少,而且全是E文,
希望我的这篇文章能够给你一些实质性的帮助。
   开发apache module之前,我们有必要先分析一下其源代码。
   $ cd httpd-2.2.4/
   $ ls
   其中:server/目录是apache核心程序的代码
         include/目录存放主要的头文件
         srclib/目录存放apr和apr-util代码(这两个是什么,后面介绍)
         modules/目录下存放目前已经有的各种module(可以看看这些代码先)
  
   $ cd include/
   先分析一下apache的头文件
   $ vi httpd.h
   第766行,这个结构非常的重要,后面编写模块时都要用到这个结构,所以分析一下。
   每个http request都会对应这个结构的一个实例。
   由于apache的源代码都有很详细的英文注释,所以我也不翻译了。

struct request_rec {

    
    //内存管理池,后面讲apr时会讲到
    apr_pool_t *pool;
    
    conn_rec *connection;
    
    server_rec *server;
    
    request_rec *next;
    
    request_rec *prev;
    
    request_rec *main;
    
    
    char *the_request;
    
    int assbackwards;
    
    int proxyreq;
    
    int header_only;
    
    char *protocol;
    
    int proto_num;
    
    const char *hostname;
    
    apr_time_t request_time;
    
    const char *status_line;
    
    int status;
    
    
    const char *method;
    
    int method_number;
    
    apr_int64_t allowed;
    
    apr_array_header_t *allowed_xmethods;
    
    ap_method_list_t *allowed_methods;
    
    apr_off_t sent_bodyct;
    
    apr_off_t bytes_sent;
    
    apr_time_t mtime;
    
    
    int chunked;
    
    const char *range;
    
    apr_off_t clength;
    
    apr_off_t remaining;
    
    apr_off_t read_length;
    
    int read_body;
    
    int read_chunked;
    
    unsigned expecting_100;
    
    
    apr_table_t *headers_in;
    
    apr_table_t *headers_out;
    
    apr_table_t *err_headers_out;
    
    apr_table_t *subprocess_env;
    
    apr_table_t *notes;
    
    
    const char *content_type;
    
    const char *handler;
    
    const char *content_encoding;
    
    apr_array_header_t *content_languages;
    
    char *vlist_validator;
   
    
    char *user;
    
    char *ap_auth_type;
    
    int no_cache;
    
    int no_local_copy;
    
    
    char *unparsed_uri;
    
    char *uri;
    
    char *filename;
    
    
    char *canonical_filename;
    
    char *path_info;
    
    char *args;
    
    apr_finfo_t finfo;
    
    apr_uri_t parsed_uri;
    
    int used_path_info;
    
    
    struct ap_conf_vector_t *per_dir_config;
    
    struct ap_conf_vector_t *request_config;
    
    const struct htaccess_result *htaccess;
    
    struct ap_filter_t *output_filters;
    
    struct ap_filter_t *input_filters;
    
    struct ap_filter_t *proto_output_filters;
    
    struct ap_filter_t *proto_input_filters;
    
    int eos_sent;
};

可以看到源码中有很多apr_开头的结构,这个是什么呢?下节介绍一下。

转载于:https://www.cnblogs.com/taek/archive/2012/02/09/2343931.html

你可能感兴趣的文章
Python redis 简单介绍
查看>>
获取 SharpSvn 执行 svn 操作的实时日志
查看>>
UWP开发:自动生成迷宫&自动寻路算法(1)
查看>>
rabbitmq 安装
查看>>
NYOJ 题目12喷水装置(二)
查看>>
六首失传股诗教你如何抄底和逃顶
查看>>
一种基于Qt的可伸缩的全异步C/S架构server实现(二) 网络传输
查看>>
经典C面试题
查看>>
Oracle数据库 表
查看>>
PHP cURL使用小结
查看>>
Apache 配置多站点访问「为项目分配二级域名」
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
数和二叉树的基本概念和类型
查看>>
Oracle 基础学习(二) SQL基础查询
查看>>
弹出提示框,大面板
查看>>
poj2975(nim游戏取法)
查看>>
每天进步一点点010
查看>>
九度OJ 1535 重叠的最长子串
查看>>
【Swing 1】paint / paintComponent的区别和背景颜色设置的三种方法
查看>>