学习《apache源代码全景分析》之常用过滤器摘录
1.目前核心输入过滤器和核心输出过滤器包括以下几种:
a.CHUNK编码过滤器;
b.CORE_IN过滤器;
c.CORE_OUT过滤器;
d.Byterange过滤器;
2.输入过滤器
(1) CORE_IN
(2) LOG_INPUT_OUTPUT
(3) SSL/TLS Filter
(4) HTTP_IN
(5) DEFLATE
(6) XLATEIN_FILTER_NAME
3.HTTP连接上的过滤器(注意:请求点在A点)
4.CORE_IN过滤器的上下文是在挂钩pre_connection中实现的。
5.HTTP_INde上下文结构用http_ctx_t描述:
typedef struct http_filter_ctx
{apr_off_t remaining;apr_off_t limit;apr_off_t limit_used;enum {BODY_NONE,//请求中不包括任何的请求体BODY_LENGTH, //请求中包含报文体BODY_CHUNK, //请求中包含请求体,并且报文采用Chunk编码BODY_CHUNK_PART} state;int eos_sent;char chunk_in[32];char *pos;apr_off_t linesize;apr_bucket_brigade *bb; //过滤器每次读取的数据都保存在存储段组bb中
} http_ctx_t;
6.
7.BODY_LENGTH
不管对于BODY_LENGTH还是BODY_CHUNK,任何时候只要发现eos_sent被设置,则意味着已经达到了报文体的最后,此时将在存储段组中插入一个EOS存储段标记结束。
ctx->remaining中记录了剩余的要读取的报文字节数目,如果ctx->remaining为0,则意味着读取数据已经完毕,此时插入一个EOS存储段。如果ctx->remaining>0,则意味着还有数据要读取,那么读取流程将继续。
readbytes是要读取的报文体数据,如果实际剩余的数据已经不足readbytes,那么调整readbytes,并且调用ap_get_brigade从网络中读取。实际读取的数据长度保存在变量totalread中,同时剩余的可读取数据ctx->remaining递减totalread.
8.Apache中提供的输出过滤器层次
学习《apache源代码全景分析》之常用过滤器摘录相关推荐
- 学习《apache源代码全景分析》之过滤器部分摘录
1.过滤器分为输入过滤器和输出过滤器,输入过滤器用于修改从网络读取的数据;而输出过滤器则用于修改生成并写入网络的数据. 2.对比 3.输入过滤器主要是对接收到的请求进行处理,它与我们正常思维一致的地方 ...
- 学习《apache源代码全景分析》之摘录
一.大纲 1.Web服务器概述 2.Apache体系结构 3.配置文件管理 4.Apache模块化体系结构 5.多任务并发处理 6.网络连接 7.过滤器 8.存储段和存储段组 9.常用过滤器 二.摘录 ...
- 学习《apache源代码全景分析》之模块化体系结构摘录
1.Apache1.3系列的模块结构如下: Apache 2.0模块构成部分如下: 2.Apache核心和模块的交互示意图: 核心模块必须与非核心模块进行交互,目前有两种交互方式. (1) 核心模块通 ...
- 学习《apache源代码全景分析》之存储段和存储段组摘录
1.当数据在过滤器中流动传递的时候,数据是以存储段组的形式组织的.每一个存储段组包含多个存储段,每一个存储段是一种数据类型的抽象. 2.存储段组包含多个存储段 struct apr_bucket {A ...
- 学习《apache源代码全景分析》之网络连接部分摘录
1.MPM框架负责多进程或多线程的并发处理,它侦听指定的套接字,一旦客户端请求到来,它将立即接受该请求,并创建相应的连接.而一旦连接建立完毕,核心将从该连接上读取请求的数据. 整个HTTP连接处理的过 ...
- 学习《apache源代码全景分析》之多任务并发处理摘录
1.如果要写服务器程序,按照正常的思路,通常主程序在进行了必要的准备工作后会调用诸如fork之类的函数产生一个新的进程或线程,然后由子进程进行并发处理.每个进程侦听某个端口,然后接受网络连接,并处理这 ...
- 学习《apache源代码全景分析》之DSO概念
DSO的产生当然离不开操作系统的支持.目前不管是UNIX还是Linux,大多都提供了对动态共享对象或动态链接库进行加载和卸载的机制.加载的方法通常有两种:其一是在可执行文件启动时由系统程序ld.so自 ...
- Apache源代码全景分析第二卷——HTTP请求处理
版权声明: 本文可以任意进行转摘,但是必须保留以下内容: 1).本文原始出处为Aapche中国, http://www.cn-apache.com 2).HESEE悦色尚品,100%正版原装进口美妆商 ...
- 【Rhapsody学习笔记(一)】OrionHealth-Rhapsody的组成及常用过滤器
一.Rhapsody组成 1.Rhapsody引擎 Rhapsody引擎集成了不同的卫生系统,提供安全连接,可靠的消息传递和高性能.Rhapsody引擎是整个集成平台的核心,提供快速服务的关键.它保证 ...
最新文章
- 手动配置lnmp环境
- Android提升篇系列:Android项目代码优化实践
- 视频防抖 Opencv
- java的知识点32——多线程 并发同步的 性能分析、快乐影院 订票操作
- ib课程计算机科学内容,新的IB计算机课程主要学习什么内容?有什么新的特点呢?...
- wxpython 下拉框只能选择不能输入_用wxPython创建GUI应用程序展示NASA图片(第三部分)...
- 计算机基础及ms应用在线,全国一级计算机基础及MS Office应用课件 (2).pdf
- 深入谷歌开源项目【1】 - Camer2 - 环境搭建和源码编译
- oracle索引的监控
- java struts2 demo,struts2入门例子 登陆demo!非常详细的图解
- 你画我猜 计算机题目,你比我猜游戏爆笑词语(你画我猜题目大全500道)
- OpenCV概述及安装配置教程
- java命名规则及规范
- MacOS上禁用自动启动Adobe Creative Cloud
- 随机前沿方法和数据包络分析
- Spring工作原理
- 大数据分析及工具应用总结
- 智能优化算法:海鸥算法原理及Matlab代码
- Reason: Cannot pass null or empty values to constructor in spring security
- k8s常见故障排查一点通
热门文章
- 程序图形化界面刷新以及如何从tkinter窗口中正确读出数据
- Spring Cloud的架构
- Effective Java之接口优先于反射机制(五十三)
- Vue_template是什么
- 所有计算机的字数都是8位,计算机(全部笔记).doc
- 邮宝打印面单尺寸调整_摆脱束缚,自由轻松!无线打印奥利给(上)
- python asyncio回调函数_python回调函数用法实例分析
- 9型转x型 cobol_多重排斥、价值嬗变与农村跨省婚姻研究——以东莞宗族型X村为例...
- 常见服务器解析漏洞(IIS,Nginx,Apache)
- Source Insight学习教程