ETagの弱/強を判定
ETagを貼り付けると、弱いか強いかがすぐ分かります。W/"abc123"は弱く、中身はabc123です。"v1-hash"は強いと判定します。引用符の欠けや小文字のw/は推測せずに知らせます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- ETag 値
- W/"abc123"
- 強さ
- weak
- 不透明タグ
- abc123
- 引用符付きタグ
- "abc123"
- プレフィックス
- W/
強バリデータはバイト単位の完全一致を主張し、引用付きopaque-tagの前に大文字小文字を区別するW/接頭辞が付いた弱バリデータは意味的な同等性のみを主張します。その接頭辞を誤って解釈したり、引用のないトークンを受け入れたりすると、If-MatchやIf-None-Matchの判断を誤り、古いキャッシュヒットや条件付き更新の失敗につながります。本機能は単一のETagヘッダー値(または完全なETag:行)を受け取り、RFC 9110に従いopaque-tagが二重引用符で正しく囲まれているかを確認し、バリデータを弱または強に分類して正規化したタグ部品を返します。
RFC 9110における弱ETagと強ETagの意味
entity-tagは、サーバーがリソースのある表現に関連付ける、引用符で囲まれた不透明な文字列です。サーバーが強バリデータを意図する場合は、例えば"v3-a1b2c3"のように引用付きタグだけを送出します。弱バリデータを意図する場合は、大文字小文字を区別するトークンW/をその引用付きタグの前に付け、全体はW/"v3-a1b2c3"のようになります。
強バリデータはキャッシュの再検証にも、完全一致を要する部分コンテンツやレンジの安全な判断にも使えます。弱バリデータはキャッシュ目的で表現が同等であることだけを保証し、すべてのバイトが同一である証拠としては扱ってはいけません。
クライアントやミドルウェアが誤ってW/接頭辞を取り除くと、弱タグが強として扱われ、レンジ要求や条件付き書き込みを誤って許可するおそれがあります。引用が落ちると、中継装置とパーサはトークンの終端について食い違います。
このチェッカーは、比較・文書化・厳格なRFC形式を期待する他システムへの入力の前に、保存またはログされたETag文字列を検証できるようにするためにあります。
貼り付けられる形と拒否される形
素のentity-tagでも、ETag: W/"abc"のような完全なヘッダー行でも貼り付けられます。前後の空白は除去され、任意のETag:名接頭辞は大文字小文字を区別せずに取り除かれます。残りの値は強バリデータなら"opaque"、弱ならW/"opaque"でなければなりません。
Wは大文字である必要があり、小文字のw/はRFC 9110が弱マーカーを大文字小文字区別と定義しているため拒否されます。opaque-tagは二重引用符で始まり終わり、内部にエスケープされていない二重引用符を含まず、etagc文字(引用符を除く印刷可能ASCIIおよびobs-text)のみを使えます。
例:"v1-hash"はstrong trueとstrength strongを返します。
活用例
CDN・ゲートウェイのヘッダー監査
本番のETagサンプルを貼り付け、キャッシュと再検証ルールを調整する前に、どの応答が弱バリデータと強バリデータを使うかを確認します。
よくある質問
ETagが弱か強かはどう見分けますか?
ETag値(例:W/"abc"または"abc")を送ってください。引用タグの前に大文字小文字を区別するW/接頭辞で始まるならstrengthはweak、そうでなければ正しく引用されたタグはstrongです。
ETagが引用されていない場合はどうなりますか?
RFC 9110はopaque-tagを二重引用符で囲むことを要求し、非引用トークンは推測せず拒否します。
W/接頭辞は大文字小文字を区別しますか?
はい。 弱マーカーは大文字のW/のみです。w/"tag"のような値は拒否され、非準拠の接頭辞を黙って強または弱と扱いません。
完全なETag:ヘッダー行を貼り付けられますか?
はい。 先頭のETag:名は大文字小文字を区別せず除去され、残りのentity-tagが分類されます。
ETagの弱い・強いはどんなときに重要ですか?
キャッシュやクライアントが、内容が変わったかをタグで比べるときです。強いETagはバイト単位の完全一致を示し、部分的なダウンロードや安全な書き込みに使えます。弱いETagは、キャッシュ上で同等であることしか示しません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/etag-weak-strong-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"etag":"W/\"abc123\""}'const res = await fetch("https://api.kit.forhosting.com/web/etag-weak-strong-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"etag": "W/\"abc123\""
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/etag-weak-strong-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"etag": "W/\"abc123\""
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/etag-weak-strong-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"etag":"W/\\"abc123\\""}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"etag":"W/\"abc123\""}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/etag-weak-strong-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"etag": "W/\"abc123\""
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.etag_weak_strong_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
timeout_sec | 30 |
max_crawl_pages | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
HTTPのエンティティタグ(ETag)は、リソースの二つの表現が同一かどうかをキャッシュとクライアントに伝えます。不正な引用、空値、RFC非準拠の弱接頭辞は、黙って誤分類するのではなくinvalid_inputで失敗します。同じ純粋な解析ロジックが、無料のブラウザツールと前払いAPI経路の両方を支えます。
RFC 9110における弱ETagと強ETagの意味
If-Match、If-None-Match、If-Rangeなどの条件付きリクエストヘッダーは、これらの規則に従ってクライアントが送ったタグと現在のサーバーテンを比較します。
入力契約、応答フィールド、拒否規則
必須の文字列フィールドetagを持つJSON本体をPOSTしてください(エイリアスvalue、header、tag、entity_tagも受け付けます)。成功時の応答には、etag(正規化されたW/付き引用形または引用のみ)、weakとstrongの真偽値、文字列weakまたはstrongのstrength、opaque_tag(引用なしの内部)、quoted_tag、prefix(空またはW/)、valid true、バリデータ種別を説明する短いnoteが含まれます。入力欠落、ヘッダー名除去後の空文字、abc123のような非引用タグ、不一致の引用、不正文字、誤った弱接頭辞はすべてinvalid_inputとなり課金されません。例:W/"abc123"はweak true、strength weak、opaque_tag abc123を返します。
ETag強度チェッカーが役立つ場面
検証失敗は残高を消費しません。製品ドキュメントではopaque-tagを不透明なままにしてください。APIゲートウェイやCDNの設定レビューでは、応答ヘッダーのサンプルを集め、キャッシュ方針を書く前に各ETagが弱か強かを素早く決定的に知る必要があります。RESTサービスの自動契約テストでは、版付きJSONが強タグを出し、描画HTMLが意図的に弱タグを使うことを断言し、引用やW/接頭辞がずれたらビルドを失敗させられます。etag 弱 強 バリデータといった検索に向けるコンテンツサイトは、同じ純粋モジュール上で無料クライアント経路が有料API経路と一致するライブツールを得ます。実装は純粋parseのティアAのため、成功した呼び出しはモデルトークンも外向きネットワークもなく、公開された基本価格$0.002だけです。このエンドポイントは本文のハッシュを代行せず、すでにお持ちのタグ形式を分類するだけです。
連携の活用例
API契約とCIチェック
サービスが正しく引用された強または弱ETagを出すこと、引用欠落や誤ったW/接頭辞でパイプラインが失敗することをテストで断言します。
サポートとHARトリアージ
無料ブラウザツールでHARファイルやチケット由来のETagを分類し、専用スクリプトなしで条件付きリクエストの不具合を診断します。
技術的な質問
ETagの弱/強チェックの料金は?
ブラウザツールは無料です。APIリクエストは成功した呼び出しごとに前払いKIT残高から$0.002です。無効入力は課金されません。