Hook中文稱之為勾點、掛鉤、攔截。httpd定義多個Hook提供開發者使用,而httpd執行時會呼叫ap_run開始的函式執行Hook指定的函式。
在windows的系統下執行的hook順序:
[server/main.c]main
[server/config.c]ap_run_rewrite_args
[server/config.c]ap_run_pre_config
[server/config.c]ap_run_test_config
[server/config.c]ap_run_open_logs
[server/config.c]ap_run_post_config
[server/config.c]ap_run_optional_fn_retrieve
[server/mpm/winnt/mpm_winnt.c]ap_mpm_run
[server/scoreboard.c]ap_run_pre_mpm
[server/mpm/winnt/mpm_winnt.c]master_main
[server/mpm/winnt/mpm_winnt.c]create_process,master_main產生第二個行程執行child_main。
[server/mpm/winnt/child.c]child_main
[server/config.c]ap_run_child_init
產生執行緒去執行worker_main
[server/mpm/winnt/child.c]worker_main
[server/connection.c]ap_run_create_connection
[server/connection.c]ap_process_connection
[server/connection.c]ap_run_pre_connection
[server/connection.c]ap_run_process_connection,由於http_core模組將ap_process_http_async_connection(或ap_process_http_connection)掛於process_connection勾點,httpd連線建立後將由ap_process_http_async_connection(或ap_process_http_connection)處理。
[modules/http/http_core.c]ap_process_http_async_connection(或ap_process_http_connection)
[server/protocol.c]ap_read_request
[request.c]ap_run_create_request
[request.c]ap_run_post_read_request
[modules/http/http_request.c]ap_process_request
[server/config.c]ap_run_quick_handler
[server/request.c]ap_process_request_internal
[server/request.c]ap_run_translate_name
[server/request.c]ap_run_map_to_storage
[server/config.c]ap_run_header_parser
[server/request.c]ap_run_access_checker
[server/request.c]ap_run_check_user_id
[server/request.c]ap_run_auth_checker
[server/request.c]ap_run_type_checker
[server/request.c]ap_run_fixups
[server/config.c]ap_invoke_handler
[server/request.c]ap_run_insert_filter
[server/config.c]ap_run_handler
[server/protocol.c]ap_run_log_transaction
結束,處理http request完成。
以下是其他勾點,在特定狀況下被呼叫執行。
讀取request有錯誤才執行:
[server/protocol.c]ap_read_request
[modules/http/http_protocol.c]ap_send_error_response
[modules/http/http_protocol.c]ap_run_insert_error_filter
處理http request完成後呼叫ap_die結束,若有錯誤才執行:
[modules/http/http_request.c]ap_die 與 [server/protocol.c]ap_read_request
[modules/http/http_protocol.c]ap_send_error_response
[modules/http/http_protocol.c]ap_run_insert_error_filter
記錄錯誤訊息
[server/log.c]ap_log_error
[server/log.c]log_error_core
[server/log.c]ap_run_error_log
其他
[httpd.h][宣告於http_protocol.h]
#define ap_default_port(r) ap_run_default_port(r)
#define ap_http_scheme(r) ap_run_http_scheme(r)
[mpm_common.c]
ap_run_monitor(此勾點編譯後不執行)
(此勾點有定義但未實現)
ap_run_get_mgmt_items