HTTPサーバー

PathHttpServer

PathHttpServer は、authorize 関数を実装した HttpServer の具象クラスである。

authorize 関数では、リクエストパスに基づいてハンドラを返すようになっている。 リクエストパスとハンドラとを対応付けて登録する形をとる。

ハンドラの登録

ハンドラ登録には、setHandler 関数を使う:
class PathHttpServer: public HttpServer
{
   public:
      void setHandler(const char* path, HttpHandler*);
      void setHandler(const char* path, WebSocketHandler*);
  ...
登録関数は HttpHandler 用と WebSocketHandler 用の二種類が用意されている。
登録は次のようにリクエストパスとセットで行う:
  PathHttpServer server;
  MyHttpHandler  handler;

  server.setHandler("/foo/", &handler);
この場合、/foo/ で始まるリクエストパスに対する HTTP 要求は handler へ渡されるようになる。 なお、PathHttpServer は登録されたハンドラオブジェクトのメモリ管理は行わないので、ヒープに確保した場合はアプリケーション側で解放する責任がある。

登録パス

登録するパスは、ディレクトリ指定と通常指定の二種類がある。 ディレクトリ指定は "/" で終わる文字列で、通常指定はそれ以外の文字列である。

ディレクトリ指定では、指定された文字列で始まるリクエストパスが対象となる。 例えば "/foo/" は、"/foo/" はもちろん、"/foo/bar" や "/foo/bar/" にも一致する。

通常指定では、指定された文字列と完全一致するリクエストが対象となる。 例えば "/foo" は "/foo" のみに一致し、"/foo/", "/foo/bar", "/foobar" などには一致しない。

リクエストパスの一致判定は、リクエストのクエリーストリングやハッシュ部分は省いて行われる。 例えば、"/foo?name=dai" といったリクエストは、"/foo" と同じものとみなされる。