拡張頭蓋 | Extended Cranium

もしかすると誰かの役に立つかもしれないことを書き留めておく

ICAP 1.0 の RFC 3507 メモ

reqmod と respmod

  • reqmod モード: オリジンサーバーへの HTTP リクエストを送信する前段階で ICAP クライアントから ICAP サーバーに前処理を依頼する。
  • 具体的な用途例: URL ベースのコンテンツフィルタリング
  • respmod モード: オリジンサーバーからの HTTP 応答が得られた後の段階で ICAP クライアントからクライアントにコンテンツを返す前に ICAP サーバーに後処理を依頼する。
  • 具体的な用途例: ウイルススキャン、特定デバイス用にフォーマット整形、翻訳など


SSE の場合

    1. ICAP クライアント (スキャンクライアント) は、OPTIONS メソッドでどんなメソッドをサポートしているかを ICAP サーバーである SSE に問い合わせる。 URI は icap://sse.com/avscan
    2. ICAP サーバーである SSE は、サポートしている形式が RESPMOD と FILEMOD であること、プレビューサイズは 4 バイトですべてのファイルが対象であること、OPTIONS の有効期限 Option-TTL は 3600 秒 (1時間) で 204 No Content 応答をサポートしていること、定義ファイルのバージョンを通知。
    3. ICAP クライアントが RESPMOD コマンドで icap://<IP:port>/AVSCAN?action=<アクションの種類> を指定して、エンキャプスレートした HTTP の内容を送信。
    4. ICAP の規定で Transfer-Encoding は必ず chunked を使用

---------------------------------------
■  レスポンスヘッダ res-hdr
---------------------------------------
 GET <スキャン対象のファイルの場所> HTTP/1.1
 ---------------------------------------
■  レスポンスボディ res-body
 ---------------------------------------
HTTP/1.1 200 OK
Transfer-Encoding: chunked 
// 空行
<16進数のバイト数>
<16進数バイト数で示した実データ>
// 空行
0\r\n\r\n HTTPメッセージボディの終わりを示すターミネータ
 ---------------------------------------

    1. ICAP サーバーからスキャン結果が X- ヘッダ内に返される。