在nginx的worker程序啟動後,便阻塞在epoll_wait函式(ngx_epoll_process_events),等待http請求的到來,那麼當乙個http請求到來之時,nginx是如何作出相應的呢?下面介紹該過程。
首先,在ngx_event_process_init函式中,可看到rev->handler被初始化為函式ngx_event_accept,因此,在函式
ngx_epoll_process_events中,對rev->handler的呼叫會調到ngx_event_accept函式。該函式會呼叫ls->handler(c),這個handler又是在**初始化的呢?該函式是在ngx_http_add_listening中進行初始化的,具體語句為:ls->handler= ngx_http_init_connection,因此最終會在ngx_http_init_connection中,一步一步呼叫至ngx_http_core_run_phases,該函式中,會遍歷所有的11個階段,若該階段有掛載函式,則會呼叫該函式。
具體而言,以ngx_http_static_module為例,該模組掛載在
ngx_http_content_phase中,因此當
ngx_http_content_phase到來時,會呼叫ngx_http_static_handler函式,該函式中會呼叫ngx_http_send_header,以及
ngx_http_output_filter函式,這兩個函式最終會呼叫ngx_http_write_filter函式,在該函式中會呼叫ngx_linux_sendfile_chain函式傳送資料。
HTTP完整請求過程
http請求報文 http響應報文 通俗來講,他就是計算機通過網路進行通訊的規則,是乙個基於請求與響應,無狀態的,應用層的協議,常基於tcp ip協議傳輸資料。目前任何終端 手機,膝上型電腦。之間進行任何一種通訊都必須按照http協議進行,否則無法連線。有時需要對使用者之前的http通訊狀態進行儲存...
Nginx處理HTTP請求的路由過程
nginx的worker程序首先獲取http請求的目的ip位址和埠號,然後掃瞄所有server配置,根據ip位址和埠號找到對應的server列表。接著nginx根據請求的host頭字段和server的server name 可以包括ip位址,比如192.168.0.6 匹配情況決定選擇哪個serve...
處理HTTP請求
處理http請求 當客戶端瀏覽器通過url訪問web應用時,首先要做的就是獲取使用者提交的資訊,也就是從http請求資料中獲得的資訊。http請求資料分為http請求頭和body http請求頭包含了一些http請求欄位和http get欄位 body中可以包含任何型別的資料,包含http get欄...