Files
cpp-httplib/docs-src/pages/ja/cookbook/c04-follow-location.md
T
yhirose 9bfd2ddf1c Fix README and docs pages that no longer match the code
Bring the READMEs and the docs pages (en and ja) in line with the
current header:

- Fix the client sample that does not compile, the Transfer-Encoding
  statement for default headers, the verifier callback comment, the
  thread pool spawn rule, the sanitize_filename description, and the
  inverted Accept-Encoding sentence.
- Describe recent behaviour: TLS errors behind Read/Write failures,
  Host validation, Connection: close for a body without length,
  content_reader rules, refused CONNECT, WebSocketClient proxies,
  CPPHTTPLIB_INTERIM_RESPONSE_MAX_COUNT, the SSE event size limit, and
  the payload limit of the Stream API.
- Complete the API references of WebSocket, WebSocketClient and the
  stream:: helpers, and the SSE reconnect rules.
- Fix cookbook pages: keychain loading on every backend, received Close
  status, a multipart sample that trusted the client's file name, an
  echo sample that sent binary as text, SNI, pre-request handler scope,
  stop() with WebSocket handlers, and the thread pool notes.
- Restore the mutex in the LLM app's Chapter 5 code.
2026-10-18 10:13:57 -04:00

2.2 KiB

title, order, status
title order status
C04. リダイレクトを追従する 4 draft

cpp-httplibはデフォルトではリダイレクト(HTTP 3xx)を追従しません。サーバーから302 Foundが返ってきても、そのままステータスコード302のレスポンスとして受け取ります。

自動で追従してほしいときは、set_follow_location(true)を呼びましょう。

リダイレクトを追従する

httplib::Client cli("http://example.com");
cli.set_follow_location(true);

auto res = cli.Get("/old-path");
if (res && res->status == 200) {
  std::cout << res->body << std::endl;
}

set_follow_location(true)を設定すると、Locationヘッダーを見て新しいURLに自動でリクエストを投げ直します。最終的なレスポンスがresに入ります。

HTTPからHTTPSへのリダイレクト

httplib::Client cli("http://example.com");
cli.set_follow_location(true);

auto res = cli.Get("/");

多くのサイトはHTTPアクセスをHTTPSへリダイレクトします。set_follow_location(true)を有効にしておけば、こうしたケースも透過的に扱えます。スキームやホストが変わっても自動で追従します。

リダイレクト先が別のオリジン(スキーム、ホスト、ポートのどれかが違う)の場合、Authorization、Cookie、Proxy-Authorizationヘッダーは外され、set_basic_auth()などで設定した認証情報も送られません。クライアント証明書も提示しません。それ以外のヘッダーはデフォルトヘッダーも含めてそのまま送られ、タイムアウト、ペイロードの上限、TLSの検証設定も引き継がれます。

Warning: HTTPSへのリダイレクトを追従するには、cpp-httplibをOpenSSL(または他のTLSバックエンド)付きでビルドしておく必要があります。TLSサポートがないと、HTTPSへのリダイレクトは失敗します。

Note: リダイレクトを追従すると、リクエストの実行時間は伸びます。タイムアウトの設定はC12. タイムアウトを設定するを参照してください。