**HTTP キャッシュ―リフレッシャー**

2025/12/24 4:41

**HTTP キャッシュ―リフレッシャー**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:


Summary

RFC 9111(2022)は、Cache‑Control ヘッダーをブラウザ、プロキシ、および CDN がキャッシュを制御するために使用するメカニズムとして定義しています。ヘッダーはコンマで区切られたディレクティブの集合です;一部はリクエストにのみ適用され、他はレスポンスにのみ適用されます。

新鮮度と検証

  • キャッシュは、レスポンスの age を freshness timeline
    max-age
    Expires
    /
    Date
    ヘッダー、または
    Last‑Modified
    のヒューリスティック)と比較して新鮮さを判断します。
  • 共有キャッシュの場合は
    s-maxage
    max-age
    を上書きします。
  • キャッシュエントリが古くなっている場合、キャッシュは条件付きリクエストで検証することがあります:
    If‑None‑Match
    (ETag)または
    If‑Modified‑Since
    。304 レスポンスはキャッシュされた本文を再利用し、200 はそれを書き換えます。

主要なレスポンスディレクティブ

ディレクティブ効果
max-age新鮮さを秒単位で設定します。
must-revalidate古いレスポンスは検証しなければならず、失敗すると 504/5xx を返す場合があります。
no-cache
max-age=0
と同等で、全てのキャッシュエントリに対して must‑revalidate が適用されます。
no-storeキャッシュはリクエストまたはレスポンスの任意の部分を永続化してはいけません(揮発性ストレージが推奨されます)。
private / public共有キャッシュにレスポンスが保存できるかどうかを制御します(
private
は共有をブロック、
public
は許可)。
s-maxage共有キャッシュ用に
max-age
を上書きします。
must-understandキャッシュはディレクティブを理解しなければならないか、リクエストを変更せずに転送しなければなりません。
stale-while-revalidate / stale-if-errorバックグラウンドで再検証が行われる間やエラー時にわずかに古いコンテンツを配信できます。

リクエスト側ディレクティブ

同じ名前(例:

max-age
,
no-cache
)はリクエストでも現れ、キャッシュの調整に影響します。
only-if-cached
ディレクティブは、キャッシュがすでに保存済みのレスポンスを持っている場合のみ返却するよう強制します。

ブラウザのリロード動作

ブラウザは2種類の更新をサポートしています:

  • Soft reload – メインリソースを再検証し、サブリソースは通常通り読み込みます。
  • Hard reload – すべてのリソースに対して
    Cache-Control:no-cache
    を送信します。Safari のハードリロード動作は Chrome/Firefox と若干異なります。

RFC 8246 – Immutable

immutable
ディレクティブは、レスポンスが新鮮期間中に変更されないことを示し、キャッシュはソフトリロード時に条件付きリクエストを発行する必要がありません。

認証済みレスポンス

共有キャッシュは、レスポンスに

public
,
s-maxage=<n>
, または
must-revalidate
が含まれる場合のみ認証済みレスポンスを保存できます。そうでなければ
private
がそのようなコンテンツの共有をブロックします。


Cache‑Control を適切に使用するとパフォーマンスが向上し帯域幅が節約されますが、設定ミスは機密データを漏らしたり古いコンテンツを配信したりする原因となります。

本文

RFC 9111 – HTTP キャッシュ(2022)
RFC では

Cache‑Control
ヘッダーを、ブラウザキャッシュ・プロキシ・CDN 等の中継キャッシュに対して「レスポンスをどのように保存し再利用するか」を指示する仕組みとして定義しています。


コア概念

項目内容
新鮮度(Freshness)リクエスト時、キャッシュは格納済みレスポンスがまだ「新鮮」であるか確認します。
新鮮 ならそのまま返却可能
古い (stale) 場合はオリジンサーバーへ条件付きリクエストで再検証する必要があります
Ageレスポンスが生成または最後にオリジンから再検証されてから経過した時間(秒)。中継キャッシュの
Age:
ヘッダーも加算します。
新鮮度タイムラインレスポンスが古くなるまでの期間を決定します。優先順位は以下通りです:
1.
Cache‑Control: max-age=<秒>
(共有キャッシュの場合は
s-maxage

2.
Expires:
Date:
ヘッダー間隔
3.
Last‑Modified:
に基づくヒューリスティック(明示的な有効期限が無い場合)
検証 (Validation)条件付きリクエストに含まれる前提条件:
If-None-Match: "<ETag>"
(優先)
If-Modified-Since: <日付>

両方指定されている場合は
If‑None‑Match
のみが評価されます。
200 OK → 新しいボディ、304 Not Modified → 保存済みレスポンスを再利用

Cache‑Control Response ディレクティブ

ディレクティブ意味
max-age=<数値>レスポンスの新鮮度寿命(秒)を設定します(RFC 9111 §5.2.2.1)。
must‑revalidate古いレスポンスは再検証が完了するまで利用できません。エラー時には古い内容ではなく失敗情報を返します。また、共有キャッシュで認証済みレスポンスの保存を許可します。
no‑cacheすべてのレスポンスを使用前に必ず検証させます。
max-age=0, must-revalidate
と同等です。
no-storeプライベート・共有キャッシュどちらもリクエストやレスポンスの任意の部分を保存してはなりません。プライバシー保証としては完全ではありません。
must-understandステータスコードが不明の場合、キャッシュはそのレスポンスを保存・再利用しないようにします。
no-store
と併用されることがあります。
private単一ユーザー向けであることを示します。共有キャッシュは格納しませんが、プライベートキャッシュ(ブラウザ等)は格納可能です。認証済みレスポンスの偶発的な共有を防ぎます。
public共有キャッシュに対して「通常なら制限される」レスポンスでも保存できるようにします(例:Authorization ヘッダー付き)。
s-maxage=<数値>
max-age
と同様ですが、共有キャッシュのみに適用されます。
proxy‑revalidate
の意味合いも含みます。
proxy-revalidate
must-revalidate
と同等ですが、対象は共有キャッシュのみです。
no-transform中継キャッシュがコンテンツを圧縮・最適化等で変更してはなりません。
stale-while-revalidate=<数値>バックグラウンドで再検証中でも、最大
<秒>
まで古いレスポンスを返すことができます。
stale-if-error=<数値>再検証時にエラーが発生した場合、最大
<秒>
まで古いレスポンスを返します。

Cache‑Control Request ディレクティブ

ディレクティブ意味
max-age=<数値>クライアントは「指定秒未満の新鮮度」を持つレスポンスを要求します。
max-stale=[<数値>]古いレスポンス(
stale
)を受け入れます。引数なしなら任意に古いものも可。
min-fresh=<数値>「残り新鮮度が少なくとも
<秒>
」のレスポンスを好みます。
no-cacheキャッシュ済みレスポンスは必ず検証してから使用します。
no-storeリクエスト・それに対するレスポンスのどちらもキャッシュしないよう指示します。
no-transform中継キャッシュがコンテンツを変換(圧縮等)してはなりません。
only-if-cachedキャッシュ内のレスポンスのみ使用し、無ければ 504 Gateway Timeout を返します。
stale-if-error=<数値>再検証が失敗した場合に限り、最大
<秒>
古いレスポンスを許容します。

ブラウザのリフレッシュ機構

タイプ触発方法動作
ソフトリロードCtrl + R / Cmd + R(または pull‑to‑refresh)メインリソースを再検証し、サブリソースは通常通りロード。
Firefox: 条件付きリクエスト。
Chrome: 条件付き +
Cache-Control:max-age=0

Safari: メインリソースの不条件リクエスト。
ハードリロードCtrl + Shift + R / Cmd + Shift + R(Safari は Cmd + Option + R)すべてのリソースを
Cache-Control:no-cache
として要求し、キャッシュを完全にバイパスします。

Immutable レスポンスディレクティブ

RFC 8246(2018)で導入。

immutable
は「レスポンスは新鮮度期間中変更されない」ことを示すため、ソフトリロード時にキャッシュが条件付きリクエストを行わずに済みます。

  • Firefox はメインリソースのみ再検証しました。
  • Chrome & Safari はサブリソースの再検証を自動でスキップするポリシーへ移行し、
    immutable
    のサポートは任意です。

認証付きリクエストと共有キャッシュ

RFC 9111 §3.5
共有キャッシュは

Authorization
ヘッダーを含むリクエストに対してレスポンスを保存できるのは、以下のディレクティブがある場合のみです。

  • public
  • s-maxage=<数値>
  • must-revalidate

private
ディレクティブが指定されていると、それ以外の共有キャッシュ許可指示を上書きします。


まとめ

ディレクティブ主な用途
max-age
,
s-maxage
公開・共有コンテンツの新鮮度制御
no-cache
,
must-revalidate
動的データで必ず検証させる
private
,
public
認証済みレスポンスを共有キャッシュに許可/拒否
immutable
長寿命静的資産の不要な再検証を回避
stale-while-revalidate
,
stale-if-error
ネットワーク障害時に見た目速度を向上

これらディレクティブを適切に組み合わせることで、ブラウザ・プロキシ・CDN などの中継キャッシュ全体で細やかなキャッシュ挙動を実現しつつ、プライバシーと認証制御も守ることができます。

同じ日のほかのニュース

一覧に戻る →

2025/12/24 2:33

ファブリス・ベルラドが MicroQuickJS をリリース

## Japanese Translation: GitHubの最新オファリングは、AI駆動のコード作成、統合開発ワークフロー、および組み込みセキュリティを一つの体験に融合した統一プラットフォームです。 - **AIツール**:CopilotとSparkは開発者がより高品質なコードを書き、プロンプトを管理し、外部サービスへ接続するのを支援します。 - **ワークフロー**:Actionsは任意のワークフローを自動化し、Codespacesは即時にクラウド開発環境を提供します。Issues、Plans、およびCode Reviewはチームが作業を追跡し変更点をレビューできるようにし、すべて単一パイプライン内でハンドオフを減らします。 - **セキュリティ**:Advanced Securityはビルド時に脆弱性をスキャンし、シークレット保護は認証情報の漏洩を事前に防止します。 - **対象ユーザー**:エンタープライズから中小チーム、スタートアップ、非営利団体まで、アプリモダナイゼーション、DevSecOps、DevOps、およびCI/CDなどのユースケースで利用可能です。 - **対応業界**:ヘルスケア、金融サービス、製造、政府機関その他多数。 - **追加リソース**:ドキュメント、ブログ、変更履歴、マーケットプレイス、イベント/ウェビナー、電子書籍/レポート、ビジネスインサイト、スキルトレーニング、サポート、コミュニティフォーラム、Trust Center、およびパートナープログラムがすべて利用可能で、チームの成功を支援します。 - **エンタープライズソリューション**:GitHub Enterprise PlatformにはAdvanced Security、Copilot for Business、プレミアムサポート、24/7 エンタープライズレベルサービスなどのAI駆動開発プラットフォームと追加機能が含まれ、それぞれ階層化された価格モデルで提供されます。 これらの機能を組み合わせることで、あらゆる規模の組織においてコード生成をより迅速かつ安全に行い、ワークフローを効率化します。

2025/12/24 6:54

**X‑ray:PDF 文書における不適切な赤字消去(レダクション)を検出するための Python ライブラリ**

## Japanese Translation: --- ## Summary x‑rayは、PDF文書内の不適切な赤字(黒い四角形が背後にあるテキストを完全に覆えていない)を自動で検出するPythonライブラリです。PyMuPDFでPDFをスキャンし、四角形の形状を特定してページコンテンツ上に重ね合わせ、各形状が実際に隠された情報を遮蔽しているかどうかをテストします。不適切な赤字はJSON(またはPython辞書)として報告され、ページ番号、境界ボックス、および隠されたテキストがリスト化されます。 ### Installation ```bash uv add x-ray # 既存のuvプロジェクトに追加 pip install xray # 標準的なpipインストール ``` インストールせずに実行することも可能です: ```bash uvx --from x-ray xray <PDF_URL> ``` ### Usage *コマンドライン:* ```bash xray path/to/file.pdf xray https://free.law/pdf/example.pdf # バッチURL cat urls.txt | xargs -n 1 xray ``` *Python import:* ```python import xray bad_redactions = xray.inspect("some/path/to/file.pdf") # `inspect` は str、pathlib.Path、URL(https://)、または PDF コンテンツの bytes を受け取ります。 ``` ### Output このツールは、ページ番号をキーとし、不適切な赤字オブジェクトのリストを値とするJSONを出力します。各オブジェクトには `bbox` タプルと隠された `text` が含まれます。モジュールとして使用した場合、同等のPython辞書が返されます。 ### Project context - Free Law Projectで数百万件のPDFを監査し、法的透明性を確保するために使用されています。 - GitHub上でオープンソース化されており、貢献にはCLAへの署名が必要で、issues経由で管理されます。 - リリースはGitHub Actionsで自動化されており、手動リリースでは `CHANGES.md`、`pyproject.toml` の更新、タグ付け、およびPoetryによる公開を行います。 - BSDライセンス(許諾型)で配布されています。 x‑rayの軽量なインストールと明確なレポート機能は、法務テック企業や規制当局、オープンデータイニシアチブが不備のある赤字を迅速に特定し、コンプライアンスと透明性を維持するのに役立ちます。

2025/12/24 4:35

テレンス・マリック『Disciples』

## Japanese Translation: テレンス・マリックの独特な美学―長いモンタージュ、自然光、詩的ナレーション、そして従来の物語構造への拒否――は、そのスタイルを直接模倣せずに採用する新しい映画作家たちの波を呼び起こしました。 代表例としてラメル・ロス監督の『ニッケル・ボーイズ』(2024年)が挙げられます。この作品はコールソン・ホワイトヘッド小説の改編で、ベストピクチャー賞ノミネートを獲得しました。ロスはマリックの『The Tree of Life』に触発され、その制作に関わったプロデューサーの一人が手助けしたといいます。彼は監督のアプローチを第一人称視点と断片的な詩性へと翻訳し、没入型の神話的物語を創造していますが、それでも独自性を保っています。 他の現代映画監督――クロエ・ザオ(『ノマドランド』)、クリント・ベンツリー(『Train Dreams』)、デイヴィッド・ゴードン・グリーン(『ジョージ・ワシントン』)、そしてローラ・ダン――はマリックの視覚言語を響かせますが、表面的な模倣を避けるために自らの感性と融合させる必要があります。A.J. エドワーズ(『The Better Angels』)やデイヴィッド・ロウリー(『Ain’t Them Bodies Saints』)による試みは、スタイルフレームワーク内で真の人間性を捉える難しさを示しています。 マリックのキャリアは、『Badlands』と『Days of Heaven』という初期叙事詩から始まり、20年間の休止期間を経て、『The Thin Red Line』『The New World』『The Tree of Life』などの後期作品へと進化しました。彼の作品は常に精神性・自然・人間存在を探求しつつ、批評家から高い評価を受ける一方で、ボックスオフィスでは稀にしかヒットしません。マリックの総合的な目標――失われた精神性とアメリカ映画を再接続すること――は、芸術的解放とハリウッドの従来の物語期待との間で緊張を生み出します。 この記事では、マリックの美学と制作手法が多くの人々にインスピレーションを与えている一方で、本当の影響力は表面的な技術を単純に模倣するのではなく、それらの要素を自分自身の物語ビジョンへと翻訳することにあると主張しています。

**HTTP キャッシュ―リフレッシャー** | そっか~ニュース