2009年5月24日 星期日

Request in Apache請求處理的流程

我們必須先知道一件事,使用者的瀏覽器(browser)向Apache伺服器請求資料時,必須先建立TPC連線,依照HTTP通訊協定的規範向Apache伺服器請求資料。也就是說,Aapche處理請求的流程可以分為:建立TPC連線之前、建立TPC連線之後(開始用HTTP),這兩個部分。

請求處理的流程
  1. 接收請求(Accept Request)
  2. 中繼資料處理(Metadata Processing),request會傳遞很多個掛勾(hook),呼叫所屬階段的程序(function)
  3. 產生回應內容(Content Generator)
  4. 記錄(Logging)
正常來說,大致上是依據這個流程,如果是錯誤(error)或是產生新請求,則有可能使得request導向其他程序,另外,每個程序也可以讓其他程序呼叫,簡言之,有點複雜!(應該要畫圖解釋...)

處理的流程當中,Apache提供掛勾(hook)這項功能,可讓我們開發應用模組(module)的時候,利用回呼(callback)的方式值型模組中的功能。掛勾的總類依照請求的先後順序為:
  1. ap_hook_post_read_request
  2. ap_hook_translate_name
  3. ap_hook_map_to_storage
  4. ap_hook_header_parser
  5. ap_hook_access_checker
  6. ap_hook_check_user_id
  7. ap_hook_auth_checker
  8. ap_hook_type_checker
  9. ap_hook_fixups
  10. ap_hook_handler
  11. ap_hook_log_transaction
最後,Apache預設處理請求的程式是掛在ap_hook_handler之中,其函數原形為static int default_handler(request_rec *r),位於server\core.c檔案當中。

沒有留言:

張貼留言