Apache源代码分析
tingya
这个作者很懒,什么都没留下…
展开
-
Apache内容生成器 (1)
在HTTP请求处理的关键步骤中 Apache对不同类型的文件的处理是不一样的。比如对于所有.html文件,通常的处理方法就是直接将该文件返回给客户端,而对于各种脚本文件比如.pl、.asp或者CGI则需要经过预处理生成html之后才能返回给客户端。不同类型的脚本的处理又由不同的应用程序处理。 为了能够对各种类型的文件方便的进行处理,Apache中引入了处理器的概念。 13.1 内容处理器概述 Ap原创 2009-09-06 14:04:00 · 7880 阅读 · 3 评论 -
Apache中的进程剖析(3)
//转载请注明来源:http://blog.csdn.net/tingya//版权声明://本书是《Apache源代码全景分析》的草稿部分,//读者可以自由浏览和打印//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!6.2 进程创建6.2.1 Unix系统中进程创建APR中通过apr_proc_create函数实现进程的创建,不过对于APR而言,创建进原创 2006-05-18 16:10:00 · 4215 阅读 · 0 评论 -
Apache中的进程剖析(2)
//转载请注明来源:http://blog.csdn.net/tingya//版权声明://本书是《Apache源代码全景分析》的草稿部分,//读者可以自由浏览和打印//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!6.1.2.2Window平台相比于Unix下的apr_procattr_t结构,Window下的该结构定义要简单一些,它定义在Unix下的进程属原创 2006-05-18 16:00:00 · 3831 阅读 · 0 评论 -
Apache中的配置指令概述
//本文是《Apache源代码全景分析》第二卷《体系结构和核心模块》中的第八章《配置文件管理》的草稿部分中,主要描述Apache中的指令概念,在后续的章节中我们将继续深入Apache中的配置文件的处理细节,包括Apache如何读取命令行参数,如何读取配置文件,如何执行配置文件中的指令以及如何存储指令等等。//本文可以任意转载和阅读,但是不允许出现在任何盈利性质的出版物和印刷品中,任何部分抄袭原创 2006-09-25 23:03:00 · 16338 阅读 · 1 评论 -
Apache中的进程剖析(1)
//转载请注明来源:http://blog.csdn.net/tingya//版权声明://本书是《Apache源代码全景分析》的草稿部分,//读者可以自由浏览和打印//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!6.1 Apache进程概述对于大负载的服务器而言,系统内部的并发处理以及进程之间的通信处理非常的重要。良好的设计可以使服务器的效率和稳定性加倍提升。原创 2006-05-18 15:52:00 · 7856 阅读 · 0 评论 -
Apache源代码分析——模块的加载
转载请著名来源:http://blog.csdn.net/tingya本文分析了Apache中关于模块的加载过程阅读本文之前,请先阅读Apache源代码分析——关于模块结构的几个重要概念一文 /////////////////////////////////////////////////////////////////////////////////////// 在了解了上面的四个重原创 2006-04-24 10:58:00 · 8571 阅读 · 4 评论 -
Apache源代码分析——命令表解析
转载著名来源: http://blog.csdn.net/tingya该文章主要对Apache中的命令表进行了介绍和分析 命令行参数处理 如果用户是通过命令行进行Apache启动,那么启动语法如下: Httpd [-d directory][-D parameter] [-f file] [-C directive] [-c directive] [-L] [-l] [-S] [-V] [-X原创 2006-04-24 11:00:00 · 5926 阅读 · 0 评论 -
Apache源代码分析——配置命令执行过程
转载请注名来源:http://blog.csdn.net/tingya该文章分析了Apache中的配置命令执行过程该部分是与前面的命令表的部分紧密关联的,因此阅读这部分请先阅读前面的命令表分析。 //////////////////////////////////////////////////////////////////////////// static const char *invo原创 2006-04-24 10:59:00 · 4404 阅读 · 0 评论 -
Apache源代码分析——关于模块结构的几个重要概念
转载请注明来源:http://blog.csdn.net/tingya本文分析了Apache中关于模块的几个重要的概念/////////////////////////////////////////////////////////////////////////////////////// 关于模块的几个重要的全局变量 理解Apache模块的概念之前我们首先必须弄清楚apache原创 2006-04-24 10:57:00 · 8177 阅读 · 4 评论 -
Apache中预创建Preforking MPM 机制剖析(3)
6.3.3.5工作子进程管理子进程通常被视为工作者,其组成了HTTP服务器的核心。它们负责处理对客户端的请求的处理。尽管多任务体系结构并不负责对请求的处理,不过他仍然负责创建子进程、对其进行初始化并且将客户端请求转交给它们进行处理。子进程的所有的行为都被封状在函数child_main()中。6.3.3.5.1子进程的创建在深入到子进程工作的内部细节之前,我们有必要了解一下主服务进程是如原创 2006-08-28 20:28:00 · 5809 阅读 · 5 评论 -
Apache中的进程剖析(4)
//转载请注明来源:http://blog.csdn.net/tingya//版权声明://本书是《Apache源代码全景分析》的草稿部分,//读者可以自由浏览和打印//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!6.2.2 Window系统中进程创建6.2.2.1进程创建概述Window系统中创建进程毫无疑问,肯定是使用CreateProcess函数,原创 2006-05-18 16:18:00 · 4037 阅读 · 0 评论 -
Apache apr中内存分配子的current_free_index成员作用
转载自monnand的blog http://blog.csdn.net/monnand/archive/2006/10/03/1320000.aspx1. 背景这个问题最初起源于tingya的blog中apache代码分析系列文章 ( http://blog.csdn.net/tingya )。当对内存池部分进行分析时,涉及到了内存分配子(allocator)的内容。内存分配子结构体中转载 2006-10-04 08:55:00 · 4880 阅读 · 2 评论 -
谁分析过Apache中的网络read和write??
在分析的时候遇到一个选项APR_INCOMPLETE_READ和APR_INCOMPLETE_WRITE,不明白什么意思?不知道有人清楚这两个选项的含义否?原创 2006-05-30 16:31:00 · 4157 阅读 · 5 评论 -
apache内容生成器 (3)
13.10 创建自己的处理器在了解了处理器的细节之后我们就可以创建自己的处理器了。本章中我们将创建一个简单的处理器example_handler,该处理器的作用很简单,只是返回固定的报文信息。13.10.1 定义处理器在创建自己的过滤器之前,你必须首先要考虑清楚你的处理器的名称以及它在什么条件下会被调用。对于我们的示例处理器而言,处理器的名称为”example_handler”,它原创 2009-09-06 14:18:00 · 6244 阅读 · 3 评论 -
apache内容生成器 (2)
13.8 目录处理器13.8.1目录处理器概述除了普通的磁盘文件之外,还有另外一种情况就是请求被映射到目录。那么这时候服务器就必须确定如何进行响应,通常情况下有三种情况可供选择:1. 返回默认的索引页面。大部分情况下这是默认的选择。通常默认页面会取名为default.html,index.html等名称。为了实现默认的索引页面,Apache中提供了mod_dir模块,它内原创 2009-09-06 14:17:00 · 4387 阅读 · 0 评论 -
Apache源代码全景分析 第1卷 体系结构和核心模块 封面
封面已经出来了,不过还需要进一步修改,先放上来,供大家反馈意见!原创 2009-02-12 16:13:00 · 11305 阅读 · 13 评论 -
Apache中预创建Preforking MPM 机制剖析(2)
6.3.3.4空闲子进程维护6.3.3.4.1概述主服务进程一方面除了必须维护平稳启动之外,另外一个最重要的职责就是对空闲子进程的数目进行管理,整个空闲管理功能在perform_idle_server_maintenance()中描述。空闲进程的整个内部是示意图可以用下面的图进行描述。6.3.3.4.2代码分析static void perform_idle_server_原创 2006-08-28 20:24:00 · 5446 阅读 · 4 评论 -
Apache中预创建Preforking MPM 机制剖析(1)
6.3.1 Leader/Follow模式在了解Preforking MPM之前有必要首先了解Leader/Follow模型。Preforking模型本质上也属于Leader/Follow模型。通常情况下,L/F可以用下图进行描述:通常情况下,对于服务器中的进程采用的都是即时创建的策略,即一旦有一个新的客户端请求立即创建一个新的进程或者线程,而当进程或者线程执行完毕后,进程和线程也原创 2006-08-09 10:10:00 · 9789 阅读 · 1 评论 -
Apache中多任务并发处理机制研究(1)
//转载请注明来源:http://blog.csdn.net/tingya//版权声明://本书是《Apache源代码全景分析》的草稿部分,//读者可以自由浏览和打印//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!6.1 多进程并发处理概述6.1.1 概述第五章中我们讨论Apache主程序的时候,当主程序调用了函数ap_mpm_run之后,整个主程序原创 2006-07-02 22:01:00 · 12372 阅读 · 10 评论 -
Apache中的网络地址处理
//转载请注明来源:http://blog.csdn.net/tingya//版权声明://本书是《Apache源代码全景分析》的草稿部分,//读者可以自由浏览和打印//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!9.1 套接字地址9.1.1套接字地址在了解APR中对IP地址的封装之前,我们首先看一下通常情况下对IP地址的使用情况。下面的代码掩饰了简单的服务原创 2006-06-10 09:57:00 · 5757 阅读 · 2 评论 -
Apache APR可移植运行库简介(4)
转载请注明来源:http://blog.csdn.net/tingya1.5.3错误处理大型的系统程序的错误处理是十分重要的,APR作为一个通用库接口集合详细的说明了使用APR时如何进行错误处理。1.5.3.1 错误码定义错误处理的第一步就是定义返回码,包括“错误码和状态码分类”。APR的函数大部分都返回int类型作为返回码的,不过为了更明确易懂,APR在apr_errno.h原创 2006-04-15 09:52:00 · 6506 阅读 · 5 评论 -
Apache APR可移植运行库简介(3)
转载请注明来源:http://blog.csdn.net/tingya1.4 应用APR我们首先make install一下,比如我们在Makefile中指定prefix=$(APR)/dist,则make install后,在$(APR)/dist下会发现4个子目录,分别为bin、lib、include和build,其中我们感兴趣的只有include和lib。下面是一个APR app的例子p原创 2006-04-15 09:50:00 · 5978 阅读 · 2 评论 -
Apache中的环形链表
5.1环型链表概述 Apache中很多地方都使用到了环形链表的数据结构,比如存储段组中就是使用环形链表保存所有的存储段数据。为了能够简化对该环形链表的操作,Apache中定义了一系列的宏来方便对链表的操作。因此在继续分析存储段之间的关系之前,我们首先来看一下Apache中环形结构的实现。Apache中环形结构的实现采用了大量的宏,其实现原创 2006-01-18 09:52:00 · 6558 阅读 · 7 评论 -
Apache数组分析
3.1数组3.1.1数组概述 数组是Apache中最经常也是最普通的数据结构,尽管C语言中已经提供了一定的数组功能,但是C语言数组运用到Apache中还存在下面的一些问题: (1)、C语言中的数组在定义的时候就必须确定维数目,一旦确定,其长度就不可更改。但是Apache中很多情况并不知道数组中能够保存的最原创 2006-01-19 10:30:00 · 4245 阅读 · 3 评论 -
最近准备分析APR中线性表
APR中的线性表,包括表格,环形链表,哈西表,队列四种,这四种都是建立在数组的基础之上。估计年前是不能发上来了,因为要过年回家了。不过年后应该很快就搞定。论文忙的紧,没有太多时间啊!!原创 2006-01-24 20:03:00 · 2986 阅读 · 2 评论 -
Apache内存池内幕(6)
2.4.4内存池的内存分配 从内存池中分配内存通过两个函数实现:apr_pcalloc和apr_palloc,这两个函数唯一的区别就是apr_pcalloc分配后的内存全部自动清零,而apr_palloc则省去了这一步的工作。apr_palloc的函数原型如下所示:APR_DECLARE (void *) apr_palloc (apr_pool_t *pool, apr_siz原创 2006-01-14 17:32:00 · 6324 阅读 · 5 评论 -
Apache内存池内幕(5)
2.4.3内存池的创建勿庸置疑,内存池的创建是内存池的核心操作之一。内存池创建函数的原型如下所示:APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool, apr_pool_t *parent,原创 2006-01-14 17:25:00 · 6184 阅读 · 0 评论 -
Apache内存池内幕(7)
2.4.5内存池的销毁由于Apache中所有的内存都来自内存池,因此当内存池被销毁的时候,所有从内存池中分配的空间都将受到直接的影响——被释放。但是不同的数据类型可能导致不同的释放结果,目前Apache中支持三种不同的数据类型的释放:1)、普通的字符串数据类型这类数据类型是最简单的数据类型,对其释放可以直接调用free而不需要进行任何的多余的操作2)、带有析构功能的数据类型这类原创 2006-01-14 17:37:00 · 5959 阅读 · 9 评论 -
Apache内存池内幕(2)
2.3 内存池分配子allocator2.3.1分配子概述尽管我们可以通过malloc函数直接分配apr_memnode_t类型的结点,不过Apache中并不推荐这种做法。事实上Apache中的大部分的内存的分配都是由内存分配子allocator完成的。它隐藏了内部的实际的分配细节,对外提供了几个简单的接口供内存池函数调用。内存分配子属于内部数据结构,外部程序不能直接调用。内存分配子(以后原创 2005-12-19 17:45:00 · 9808 阅读 · 10 评论 -
Apache内存池内幕(4)
2.4 内存池2.4.1内存池概述在了解了内存分配子的概念之后,我们其实已经了解了Apache中内存分配的细节了。不过Apache中内存的层次结构关系则是由内存池负责组织,其数据结构apr_pool_t定义在apr_pools.c中,定义如下:struct apr_pool_t { apr_pool_t *parent; apr_pool_t原创 2005-12-23 09:32:00 · 7199 阅读 · 5 评论 -
Apache内存池内幕(3)
2.3.3分配子内存分配使用分配子分配内存是最终的目的。Apache对外提供的使用分配子分配内存的函数是apr_allocator_alloc,然而实际在内部,该接口函数调用的则是allocator_alloc。allocator_alloc函数原型声明如下:apr_memnode_t *allocator_alloc(apr_allocator_t *allocator, apr_s原创 2005-12-23 09:24:00 · 8483 阅读 · 18 评论 -
Apache中的哈希表剖析(3)
转载请注明来源:http://blog.csdn.net/tingya3.4.5哈希表合并在Apache中经常需要将两个哈希表合并为一个新的哈希表,为此APR中提供了专门的哈希合并函数apr_hash_merge,该函数定义如下:APR_DECLARE(apr_hash_t *) apr_hash_merge(apr_pool_t *p,原创 2006-03-16 14:04:00 · 4013 阅读 · 2 评论 -
Apache中的表格实现剖析(1)
转载请注明来源:http://blog.csdn.net/tingya3.2表格(TABLE)3.2.1表格概述 尽管apr_array_header_t数组已经可以完成大部分的任务,但是对于Apache而言,apr_array_header_t更倾向于内部数据结构,它通常作为其余的线性数据结构的实现基础,比如表格、队列以及哈希表。表格是Apache中用的最频繁的数据结构,比如H原创 2006-02-17 14:18:00 · 3856 阅读 · 2 评论 -
Apache中的文件与目录(1)
4.1 文件概述文件I/O在Unix下占据着非常重要的地位,曾有一句经典语句绝对可以说明file在Unix下的重要性, "In UNIX, everything is a file",APR就是本着这个思想对Unix文件I/O进行了再一次的抽象封装,以提供更为强大和友善的文件I/O接口。APR File I/O源代码的位置在$(APR_HOME)/file_io目录下针对不同类型的操作系统原创 2006-02-12 13:23:00 · 7111 阅读 · 0 评论 -
Apache APR可移植运行库简介(2)
转载请注明来源:http://blog.csdn.net/tingya1.3 APR构建 1.3.1获取APR编译APR的第一个步骤就是获取APR开发包。通常情况下,你可以到APR的官方网站http://apr.apache.org/download.cgi去下载。一般情况下,APR开发包很容易理解为仅仅是一个开发包,不过事实上并不是。目前,完整的APR实际上包含了三个开发包:apr、原创 2006-04-15 09:47:00 · 9385 阅读 · 5 评论 -
Apache APR可移植运行库简介(1)
转载请注明来源:http://blog.csdn.net/tingya1.1 何为APR?APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理原创 2006-04-15 09:41:00 · 11948 阅读 · 9 评论 -
Apache中的哈希表剖析(2)
转载请注明来源:http://blog.csdn.net/tingya3.4.3数据插入和获取 对于哈希表而言,一个重要的任务就是插入key/value数据以及根据键值获取相应的值。APR中定义了函数apr_hash_set和apr_hash_get分别实现上面的功能。首先我们来看apr_hash_get函数,该函数需要三个参数,分别用以描述操作的哈希表,键值以及键的长度。原创 2006-03-05 10:46:00 · 4507 阅读 · 0 评论 -
Apache中的哈希表剖析(1)
转载请注明来源:http://blog.csdn.net/tingya3.4 哈希表3.4.1哈希表概述 作为线性数据结构,与前面所说的表格和队列等相比,哈希表无疑是查找速度比较快的一种。APR中较好的支持哈希表。APR中哈希表在文件apr_hash.h和apr_hash.c中实现。其数据结构定义如下: struct apr_hash_t { apr原创 2006-03-05 10:35:00 · 7932 阅读 · 2 评论 -
Apache中的表格实现剖析(2)
转载请注明来源:http://blog.csdn.net/tingya3.2.3表格元素查找 表格元素查找是表格的一个非常重要的功能。目前存在很多的线性表查找算法,最基本的无非三种:顺序查找,二分查找以及哈希查找。相对而言,顺序查找是最简单也是最容易实现,但是其通常在插入数据时候较为快捷,而查找的时候则就相对较慢。二分查找是一个较快的查找方法,但是其前提必须数据进行排序,因此排序使得原创 2006-02-17 14:21:00 · 3205 阅读 · 0 评论 -
Apache中的挂钩剖析(1)
5.5 挂钩(HOOK)5.5.1 为什么引入挂钩在Apache1.3版本中,对HTTP请求的处理包括若干个固定阶段,比如地址转换阶段、身份确认阶段、身份认证阶段、权限确认阶段、MIME类型识别阶段等等,这也意味着Apache1.3中的挂钩数目是有限的,固定的。这个反映在模块结构中就是针对每个HOOK都对应一个函数指针。比如如果需要检查用户的身份是否合法则只需要调用ap_check_use原创 2006-02-14 09:48:00 · 5340 阅读 · 1 评论