ICAP 1.0 の RFC 3507 メモ
reqmod と respmod
- reqmod モード: オリジンサーバーへの HTTP リクエストを送信する前段階で ICAP クライアントから ICAP サーバーに前処理を依頼する。
- 具体的な用途例: URL ベースのコンテンツフィルタリング
- respmod モード: オリジンサーバーからの HTTP 応答が得られた後の段階で ICAP クライアントからクライアントにコンテンツを返す前に ICAP サーバーに後処理を依頼する。
- 具体的な用途例: ウイルススキャン、特定デバイス用にフォーマット整形、翻訳など
SSE の場合
- ICAP クライアント (スキャンクライアント) は、OPTIONS メソッドでどんなメソッドをサポートしているかを ICAP サーバーである SSE に問い合わせる。 URI は icap://sse.com/avscan
- ICAP サーバーである SSE は、サポートしている形式が RESPMOD と FILEMOD であること、プレビューサイズは 4 バイトですべてのファイルが対象であること、OPTIONS の有効期限 Option-TTL は 3600 秒 (1時間) で 204 No Content 応答をサポートしていること、定義ファイルのバージョンを通知。
- ICAP クライアントが RESPMOD コマンドで icap://<IP:port>/AVSCAN?action=<アクションの種類> を指定して、エンキャプスレートした HTTP の内容を送信。
- 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メッセージボディの終わりを示すターミネータ
---------------------------------------
- ICAP サーバーからスキャン結果が X- ヘッダ内に返される。