前一篇介紹完了請求的處理,先面lighttpd將會把處理的結果返回給客戶端。狀態機進入CON_STATE_RESPONST_START。在這個狀態中,服務器主要的工作在函數connection_handle_write_prepare。這個函數不算復雜,主要是根據客戶端請求的method來設置response的headers,其實就是設置“Content-Length”的值。下面是函數代碼,做了一些刪減。
首先,該函數判斷連接的模式(mode)是否是DIRECT,如果是,說明連接沒有經過插件處理,是由服務器自身處理的。這里判斷連接的請求method,如果是OPTION,則設置Allow的值。同時清空write_queue,因為沒有數據需要返回。 接著,在下面這個switch語句中,比較http_status的值,如果為204,205,304,說明服務器不需要給客戶端返回文件,僅僅返回 response中headers及其之前的部分。這里和前面處理OPTION方法都設置con->file_finished為1。 file_finished用來標記客戶端請求的靜態文件是否已經發送完了(這個file_finished的含義比較模糊,目前還沒搞清楚是表示文件發 送完畢,還是要發送的文件設置完畢可以發送。。。也有可能是個bug。。。如果各位讀者有什么高見,還望不吝賜教!)。這兩處都不需要給客戶端發送文件, 因此將其設置為1,發送程序將直接跳過文件的發送。switch的default分支處理4xx錯誤,返回相應的錯誤提示文件。
出了switch語句之后,接著是一個if判斷file_finished的值。
......本站只呈現部分內容,查看完整文章請到WiFiDog官網社區 http://www.wifidog.pro/2015/04/10/wifidog%E8%AE%A4%E8%AF%81lighttpd-1.html,轉載請注明出處