wifidog認證自帶http服務器Lighttpd1.4.20源碼分析之狀態機返回response

前一篇介紹完了請求的處理,先面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,轉載請注明出處

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,951評論 19 139
  • PHP常用函數大全 usleep() 函數延遲代碼執行若干微秒。 unpack() 函數從二進制字符串對數據進行解...
    上街買菜丶迷倒老太閱讀 1,382評論 0 20
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,381評論 25 708
  • 你好嗎我不好你別擔心,我騙你的,我好得很! 算算日子,我們已經快有九年沒有相見了,這九年來,我也大大小小給你寫過一...
    流浪的小紅豆閱讀 327評論 1 2
  • 一切都在改變 從對小說里的感情態度的評價,對生活中某個活動比如啪啪啪,到看視頻的口味,一切都在變化,甚至說不上是好...
    durian00閱讀 362評論 0 0