a-blog cms PHP API Reference

HeaderBuilder
in package

レスポンスヘッダーの値を組み立てる純粋関数群。

header() の副作用は持たず、送出は Emitter が担う。

Table of Contents

Methods

buildCacheableHeaders()  : array<string|int, string>
クライアント・中間キャッシュ向けの Cache-Control 系ヘッダーを組み立てる純粋関数。
canRespondNotModified()  : bool
ページキャッシュから返すときに 304 Not Modified で応答してよいか判定する。
isPostSizeExceeded()  : bool
POST リクエストのボディサイズが PHP の post_max_size を超過しているか判定する。
resolveClientCacheHeaders()  : array<string|int, string>
clientCacheHeader() が送出する Cache-Control 等のヘッダー文字列を組み立てる。
resolvePageCacheHitHeaders()  : array<string|int, string>
ページキャッシュから返すときの Cache-Control 等のヘッダー文字列を組み立てる。
buildNoStoreHeaders()  : array<string|int, string>
ブラウザ・共有キャッシュのどちらにも保存させないヘッダーを組み立てる。

Methods

buildCacheableHeaders()

クライアント・中間キャッシュ向けの Cache-Control 系ヘッダーを組み立てる純粋関数。

public buildCacheableHeaders(int $cacheExpireClient[, int|null $lastModifiedTime = null ]) : array<string|int, string>

キャッシュを許可してよいか(ACMS_SID の有無、subscriber_cache 等)の判定は呼び出し側の 責務とし、ここでは行わない。resolveClientCacheHeaders()(動的レンダリング時)と main.php のページキャッシュ配信時の双方から呼ばれる共通実装(CMS-7765 で no-cache を max-age=0 に修正した際、この構築ロジックが2箇所に重複していたため片方が追従できて いなかった。再発防止のためヘッダー構築部分を一本化する)。

Parameters
$cacheExpireClient : int
$lastModifiedTime : int|null = null

Last-Modified に使う時刻。null の場合 REQUEST_TIME を使う

Return values
array<string|int, string>

canRespondNotModified()

ページキャッシュから返すときに 304 Not Modified で応答してよいか判定する。

public canRespondNotModified(string $ifModifiedSince, int $cacheCreatedAt, bool $hasSession) : bool

resolvePageCacheHitHeaders() がキャッシュ可能なヘッダーを返す場合(未ログインかつ cache_expire_client が 1 以上)に限り、If-Modified-Since がキャッシュの作成日時以降なら 304 にする。

Parameters
$ifModifiedSince : string

If-Modified-Since ヘッダーの値(無いときは空文字)

$cacheCreatedAt : int

ページキャッシュの作成日時

$hasSession : bool

ログイン中のセッションがある

Return values
bool

isPostSizeExceeded()

POST リクエストのボディサイズが PHP の post_max_size を超過しているか判定する。

public isPostSizeExceeded(string $requestMethod, int|null $contentLength, int $postMaxBytes) : bool

post_max_size を超える POST では PHP が $_POST を空にし ACMS_POST も復元できないため、 通常の POST ディスパッチに乗らない。リクエスト段階でこの判定を行い 413 応答へ振り分ける。 ini_get / $_SERVER への依存を持たない純粋な比較として切り出し、単体テスト可能にしている。

Parameters
$requestMethod : string

リクエストメソッド($_SERVER['REQUEST_METHOD'])

$contentLength : int|null

Content-Length(ヘッダ不在時は null)

$postMaxBytes : int

post_max_size をバイトに換算した値(0 以下は無制限)

Return values
bool —

超過していれば true

resolveClientCacheHeaders()

clientCacheHeader() が送出する Cache-Control 等のヘッダー文字列を組み立てる。

public resolveClientCacheHeaders([bool $noCache = false ]) : array<string|int, string>

header() 呼び出しから分離した純粋関数(テスト可能性のため)。

Parameters
$noCache : bool = false
Return values
array<string|int, string>

resolvePageCacheHitHeaders()

ページキャッシュから返すときの Cache-Control 等のヘッダー文字列を組み立てる。

public resolvePageCacheHitHeaders(int $cacheCreatedAt, bool $hasSession) : array<string|int, string>

ページキャッシュはログイン中の読者(subscriber_cache)にも返るが、読者向けに描画したページを 共有キャッシュ(CDN 等)に載せると未ログインへ配られるため、動的描画時(resolveClientCacheHeaders())と 同じくログイン中は no-store にする。

Parameters
$cacheCreatedAt : int

ページキャッシュの作成日時(Last-Modified に使う)

$hasSession : bool

ログイン中のセッションがある

Return values
array<string|int, string> —

cache_expire_client が 0 以下のときは空配列(ヘッダーを付けない)

buildNoStoreHeaders()

ブラウザ・共有キャッシュのどちらにも保存させないヘッダーを組み立てる。

private buildNoStoreHeaders() : array<string|int, string>
Return values
array<string|int, string>

        
On this page

Search results