菜鳥學習nginx之接收HTTP Header

2021-09-04 05:54:06 字數 4440 閱讀 9458

* 處理http header

* @param rev 讀事件

這部分**是處理定時器超時事件,與解析http請求行是相同的,不在多說。

//接收 http header

}這部分**說明:

1、 判斷記憶體是否足夠,若不足則申請最大記憶體(預設8k)。由於http報文是不定長報文,所以無法一次性申請足夠記憶體。

2、呼叫ngx_http_read_request_header方法接收報文

/*** http協議解析

* 返回值 : ngx_ok: 解析完header中的一行時返回

* ngx_http_parse_header_done: 解析完整個header時返回;

* ngx_http_parse_invalid_header: 解析出錯時返回;

* ngx_again: 表示需要讀取新的請求頭內容

ngx_http_parse_header_line是純粹解析http報文的,將解析出的報文儲存到header_in中。ngx_http_parse_header_line,返回值如下表:

返回值含義

ngx_ok

當前header line解析成功(乙個http請求中可以有多個header line)

表示所有http header都已經成功解析完畢

ngx_again

表是當前header line沒有接收完畢,需要再次接收

解析失敗,結束htt request

根據上表,我們來看一下具體處理內容:

/* 處理http請求 */

}這段**比較重要,該**段主要處理request header請求以及處理http request。

}這段**針對ngx_again和ngx_http_parse_invalid_header處理流程,比較簡單。

該函式處理相對簡單,主要針對header中引數合法性校驗以及request物件相關成員進行再次賦值,例如:content_length_n、keep_alive等

* 獲取request header

* @param r http請求

r->header_in->last += n; /* 獲取到資料 */

return n;

}

Nginx系列5之讓Nginx支援HTTP1 1

nginx在反向 http協議的時候,預設使用的是http1.0去向後端伺服器獲取響應的內容後在返回給客戶端。http1.0和http1.1的乙個不同之處就是,http1.0不支援http keep alive。nginx在後端伺服器請求時使用了http1.0同時使用http header的conn...

菜鳥學習nginx之總結雜耍

本篇是對nginx學習最後一篇,若日後工作中對nginx有了更深入了解,會再次寫相關部落格。一 關於nginx幾個典型問題 1.1 為什麼nginx是高效能http?是如何做到高效能?1.優異框架,採用全非同步方式 2.優秀資料結構,例如記憶體池,字串只用指標指向,從不重新建立內容 3.用少量代價換...

「菜鳥」基礎學習之 002

迴圈語句 for 1.語法 for 迴圈變數 in 可迭代物件 語句塊else 語句塊 當迴圈條件不滿足時,執行 2.range 作用 建立可迭代物件,返回的物件型別為 range 傳參 有三種情況 一.傳遞1個引數時 range int 建立 從0到int的可迭代物件,但取不到int 如 rang...