RGW如何处理一个HTTP请求

rgw入口程序对应src/rgw/rgw_main.cc文件,此文件的main函数除了常规的信号、参数处理外,首先设置resource_manager,这些manager将HTTP请求根据url派发到不同的RGWHandler中去处理;然后根据rgw_frontends配置项,启动一个frontend用来接收HTTP请求,默认情况下是使用RGWMongooseFrontend作为frontend,它会将src/rgw/rgw_processing.cc:process_request函数作为回掉传给civetweb,所以一个请求的完整处理过程全部在process_request函数中完成。

process_request函数的工作流程主要分两步:

  1. 生成一个RGWHandler,使用handler进行一系列处理。
  2. 生成一个RGWOp,使用op进行一系列处理。

整个处理流程如下

RGW如何处理一个HTTP请求_第1张图片
rgw_processing

注:op->verify_permission对于RESTOp(如usage、metadata等)则会进行caps检查。

RGWREST::get_handler首先解析url,然后调用相应的resource manager的get_handler方法, manager的get_handler方法会首先调用RGWHandler_REST_S3::init_from_header来初始化req_state中的bucket、info、object等信息。

你可能感兴趣的:(RGW如何处理一个HTTP请求)