RGW如何處理一個HTTP請求

rgw入口程序?qū)?yīng)src/rgw/rgw_main.cc文件,此文件的main函數(shù)除了常規(guī)的信號、參數(shù)處理外,首先設(shè)置resource_manager,這些manager將HTTP請求根據(jù)url派發(fā)到不同的RGWHandler中去處理;然后根據(jù)rgw_frontends配置項,啟動一個frontend用來接收HTTP請求,默認情況下是使用RGWMongooseFrontend作為frontend,它會將src/rgw/rgw_processing.cc:process_request函數(shù)作為回掉傳給civetweb,所以一個請求的完整處理過程全部在process_request函數(shù)中完成。

process_request函數(shù)的工作流程主要分兩步:

  1. 生成一個RGWHandler,使用handler進行一系列處理。
  2. 生成一個RGWOp,使用op進行一系列處理。

整個處理流程如下

rgw_processing

注:op->verify_permission對于RESTOp(如usage、metadata等)則會進行caps檢查。

RGWREST::get_handler首先解析url,然后調(diào)用相應(yīng)的resource manager的get_handler方法, manager的get_handler方法會首先調(diào)用RGWHandler_REST_S3::init_from_header來初始化req_state中的bucket、info、object等信息。

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

推薦閱讀更多精彩內(nèi)容