Nginx从入门到精通阅读笔记2
来源:互联网 发布:网络直销怎么做 2017 编辑:程序博客网 时间:2024/05/24 05:23
Request部分
Nginx中的http请求对应的数据结构是ngx_http_request_t,这是对一个http请求的封装。Nginx通过它来保存解析请求与输出响应相关的数据。
一个请求从ngx_http_init_request开始,设置读事件 ngx_http_process_request_line。然后通过ngx_http_read_request_header来读取请求的数据,调用ngx_http_parse_request_line函数来解析请求行。为了提高效率,1)用状态机来解析请求行,2)将四个字符装换成一个整形来比较。
解析完请求行,nginx会设置读事件handler为ngx_http_process_request_headers。Headers_in是ngx_http_request_t的域,是一个链表结构,保存所有的请求头。HTTP中有些请求是需要特别处理的,这些请求头与请求处理函数存放在一个映射表里面,即ngx_http_headers_in,在初始化时,会生成一个hash表,当每解析到一个请求时,就会先在这个hash表中查找,如果找到,就调用相应的处理函数来处理这个请求头。
当nginx解析到两个回车换行符时,就表示请求头的结束,此时就会调用ngx_http_process_request来处理请求。ngx_http_process_request会设置当前连接的读写事件处理函数为ngx_http_request_handler,这个函数中会根据当前事件是读还是写分别调用read_event_handler或者write_event_handler。Nginx的做法是先不读取请求body,所以设置read_event_handler为ngx_http_block_reading,即不读取数据了。然后在ngxz_http_handler里面会设置write_event_handler为ngx_http_core_run_phases,并执行。Nginx将一个http请求的处理分为多个阶段,这个函数就执行这些阶段来产生数据。产生的相应头会放在ngx_http_request_t中的headers_out中。
Nginx的各种阶段会对请求进行处理,最后会调用filter来过滤数据,对数据进行加工。filter是一个链表结构,分别有header filter 和body filter,其中header filter的最后一个filter,即ngx_http_header_filter,这个filter将会遍历所有的相应头,最后输出需要的响应头在一个连续的内存,然后调用ngx_http_write_filter进行输出。Body的情况类似。
其它相关概念:
Keep-Alive
Pipe
Lingering_close
- Nginx从入门到精通阅读笔记2
- Nginx从入门到精通阅读笔记1
- nginx从入门到精通
- Nginx从入门到精通
- Nginx从入门到精通
- Java从入门到精通阅读笔记(第4版)2
- Nginx开发从入门到精通
- Nginx开发从入门到精通¶
- Nginx开发从入门到精通
- Nginx从入门到精通读书笔记3
- Nginx开发从入门到精通
- Nginx开发从入门到精通
- Nginx开发从入门到精通
- Nginx 开发从入门到精通
- Nginx开发从入门到精通
- 他山之石-Nginx开发从入门到精通
- Nginx开发从入门到精通一
- Nginx开发从入门到精通二
- HDU 4944
- Struts2中过滤器和拦截器的区别
- 获取当前显示设备数量
- 墨菲定律、二八法则、马太效应、手表定理、“不值得”定律、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原理、钱的问题、奥卡姆剃刀等13条是左右人生的金科玉律 .
- C# --习题笔记02
- Nginx从入门到精通阅读笔记2
- CNN: Single-label to Multi-label
- word2010中如何去掉标题前面的小黑点
- Android实现下载图片并保存到SD卡中
- 一些常用的宏定义
- 提升网站排名的外链,你知道怎么做吗?
- HDU 1551 Cable master 二分
- Sizer布局组件2
- cocos2dx批处理文件