#第3章 DNTに対応する
DNTとはブラウザに実装されているCookieトラッキング防止の技術のひとつで、サイトを訪れるユーザー(オーディエンス)の追跡を停止する機能です。 ユーザー(オーディエンス)が広告系のサイトからトラッキングを拒否したい時にブラウザに設定します。
DNTはHTTP ヘッダの一種です。
DNT の設定が有効になっている場合、ブラウザは(Web ページ、画像、ウィジェット、その他各種パーツの読み込みなど)すべてのトランザクションにおいて**「DNT: 1」**という文字列をHTTP ヘッダに含めて送信します
DNTはクライアントのブラウザからDNT:1というHTTPリクエストヘッダーのが送信されるため、サーバー側でHTTPリクエストヘッダーを読み込みDNTヘッダーがあって値が1の場合はトラッキング処理をSKIPする、それ以外の場合はトラッキング処理を続行するという実装になります。
RFCのドラフト ではHTTPレスポンスにDNTヘッダーを返却することが推奨されています。
###IE
アドオンの管理から行う
###Firefox
###Chrome
参考:「Google Chrome 23」の安定版リリース 「Do Not Track」をサポート
設定→ プライバシー → トラッキング拒否 で設定可能
設定→Safari→プライバシーとセキュリティ
便利なDNTですが、現状DNTに対応しているサイトはほとんどありません。
現状、トラッキングを行っている業者はオプトアウトの機能をそれぞれのサービスに用意し、ユーザーのトラッキング防止の希望に対応しています。
自サイトがDNTに対応しているのなら「このサイトはDNTに対応しています」と表明したほうがオーディエンス(ユーザー)にとってもわかりやすいですし、そのサイトがちゃんとプライバシーに配慮しているとアピールできるのですがそのような表明をしているサイトも皆無です。
DNTを強制する法律がまだないため、現状はDoNotTrackはクライアント(ブラウザ)だけ対応が進み、サーバー側が対応が進んでいません。
つまり、現状はブラウザのDNTをONにしてもOFFにしてもトラッキングの挙動はほとんどのサイトで変わらないのが実情です。
DNTが意味のある機能になるためには法で強制するか、 インターネット広告推進協議会のような団体でポリシーを決めて業界全体で一斉にやる必要がありそうです。
DMPがDNTに対応するにはブラウザのリクエストからDNTヘッダーで1を受け取った場合は、トラッキングの処理をせず処理を終了するのが正しいやり方です。 しかしながら、DNTに対応してしまうとトラッキングできるオーディエンスの量は減ってしまいます。 現状、DNTに対応していないサービスがほとんどですのでDNTの対応処理だけは入れておいてアプリケーションの設定ファイルでDNT対応機能でOFFにしておくのがベストなやり方だと思われます。
広告業界の全体的な動きとしてDNTに対応しよう。となった時に設定ファイルでONにしましょう。 設定ファイルを使ったDNTの対応コードは以下になります。
conf/application.conf
# DNT
ad.dnt.enable=true
上記の記述を追加
app/controllers/MicroDmpCore.java
/**
* DNT判定処理
*
* @return ブラウザのDNTとDMPのDNT設定が有効の場合true、それ以外の場合false
*/
public static boolean isDNT() {
Http.Request req = play.mvc.Http.Context.current().request();
String rawRequestDntFlag = req.getHeader("DNT");
boolean requestDntFlag = false;
Logger.debug("rawRequestDntFlag=" + rawRequestDntFlag);
if (rawRequestDntFlag != null){
requestDntFlag = Integer.valueOf(rawRequestDntFlag) == 1 ? true : false;
}
if(requestDntFlag == false) {
return false;
}
Boolean applicationDntFlag = Play.application().configuration().getBoolean("ad.dnt.enable");
Logger.debug("applicationDntFlag=" + applicationDntFlag);
if (applicationDntFlag) {
Logger.debug("--- DNT ON ---");
return true;
}
return false;
}
上記のメソッドを追加
pixcelTrackingメソッドを修正
public Result pixcelTracking() {
// ブラウザのDNTとDMPのDNT設定が有効の場合トラッキング処理はしない
if (isDNT()) {
return ok();
}
processingCookieId();
response().setContentType("image/gif");
return ok(onePixcelGifBytes);
}
実際にブラウザとapplication.confの設定を変更してテストしてみましょう。
playはapplication.confの設定を変えると自動的にリロードされます(ver2.4で確認)。
[debug] - application - rawRequestDntFlag=1
[debug] - application - applicationDntFlag=true
[debug] - application - --- DNT ON ---
[debug] - application - rawRequestDntFlag=null
[debug] - application - Cookie Exist!
[debug] - application - 158f957dd3434f776ad0727e092d85c087302c95de1ce92dad47f6f6ac23eab8
[debug] - application - rawRequestDntFlag=1
[debug] - application - applicationDntFlag=false
[debug] - application - 1436114058269 1436114058269096000 ce49563823e3b8e856092ab6
[debug] - application - 40445eb213ba908acd3a3eefffe95501f877c315029f2965fcb3b0ae31e1d545
[debug] - application - rawRequestDntFlag=null
[debug] - application - Cookie Exist!
[debug] - application - 158f957dd3434f776ad0727e092d85c087302c95de1ce92dad47f6f6ac23eab8
外部資料 DoNotTrackの概念、実装についてはFirefoxの「DoNotTrack実装ガイド」(PDF)の資料が詳細にまとめています(日本語訳もされています)。
特にアドテクエンジニアの方はP11~P12の広告会社のケースが参考になると思います。