程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> nginx gzip filter模塊分析,nginxgzip

nginx gzip filter模塊分析,nginxgzip

編輯:關於C語言

nginx gzip filter模塊分析,nginxgzip


API:http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/zlib-deflateinit2.html

ngx_http_gzip_header_filter 

1.首先配置信息的驗證,是否需要進行gzip壓縮

2.給每個請求設置ctx 

3.ctx同時反向關聯request

4.ngx_http_gzip_filter_memory 設置wbits,memlevel參數 gzip庫調用需要,設置需要分配的內存大小 allocated

5.增加gzip頭

6.刪除了content_length_n 因為不知道後續的壓縮大小為多少.

 

ngx_http_gzip_body_filter 

1.獲取header設置的ctx ngx_http_gzip_filter_buffer 復制到新的緩沖 ctx的.

2.調用 ngx_http_gzip_filter_deflate_start,給preallocated 分配空間大小ctx->allocated=header計算的值.

         ctx->free_mem = preallocated ;zstream 設置屬性值; 估計是給gzip 設置空間,zstream設置內存對象,內存分配和回收函數

3.調用ngx_chain_add_copy;in的buf導入ctx->in

4.ngx_http_gzip_filter_add_data;ctx->in_buf = ctx->in;ctx->in=ctx->in->next;設置zstream.next_in,zstream_avail_in 通過ctx->in_buf;判斷是否為最後一個buf,如果是 ctx->flush;

5.ngx_http_gzip_filter_get_buf;創建臨時buf size=conf->bufs.size 設置ctx->zstream.nextout的大小.開始位置到結束位置

6.ngx_http_gzip_filter_deflate ;deflate();

7.ngx_http_gzip_filter_add_data;

8. ngx_http_next_body_filter(r, ctx->out);重新定向了輸出流.沒有用filter中傳入的in

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved