Skip to content

Instantly share code, notes, and snippets.

@AKB428
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AKB428/ea29257709e7ffeb21cd to your computer and use it in GitHub Desktop.
Save AKB428/ea29257709e7ffeb21cd to your computer and use it in GitHub Desktop.
[Mastering DMP] 03

#第3章 DNTに対応する

DNT(Do Not Track)とは

DNTとはブラウザに実装されているCookieトラッキング防止の技術のひとつで、サイトを訪れるユーザー(オーディエンス)の追跡を停止する機能です。 ユーザー(オーディエンス)が広告系のサイトからトラッキングを拒否したい時にブラウザに設定します。

DNTの技術的な仕組み

DNTはHTTP ヘッダの一種です。

DNT の設定が有効になっている場合、ブラウザは(Web ページ、画像、ウィジェット、その他各種パーツの読み込みなど)すべてのトランザクションにおいて**「DNT: 1」**という文字列をHTTP ヘッダに含めて送信します

DNT

DNTにサーバー側が対応するには

DNTはクライアントのブラウザからDNT:1というHTTPリクエストヘッダーのが送信されるため、サーバー側でHTTPリクエストヘッダーを読み込みDNTヘッダーがあって値が1の場合はトラッキング処理をSKIPする、それ以外の場合はトラッキング処理を続行するという実装になります。

RFCのドラフト ではHTTPレスポンスにDNTヘッダーを返却することが推奨されています。

各種ブラウザのDNT対応状況

dnt_browser

ブラウザーのDNTの設定箇所

###IE

アドオンの管理から行う

IE

###Firefox

Firefox

###Chrome

Chrome

参考:「Google Chrome 23」の安定版リリース 「Do Not Track」をサポート

Mac OSX Safari

xsafari

Android Chrome

設定→ プライバシー → トラッキング拒否 で設定可能

achrome

iOS Safari

設定→Safari→プライバシーとセキュリティ

isafari

DNTの現状

便利なDNTですが、現状DNTに対応しているサイトはほとんどありません。

現状、トラッキングを行っている業者はオプトアウトの機能をそれぞれのサービスに用意し、ユーザーのトラッキング防止の希望に対応しています。

自サイトがDNTに対応しているのなら「このサイトはDNTに対応しています」と表明したほうがオーディエンス(ユーザー)にとってもわかりやすいですし、そのサイトがちゃんとプライバシーに配慮しているとアピールできるのですがそのような表明をしているサイトも皆無です。

DNTを強制する法律がまだないため、現状はDoNotTrackはクライアント(ブラウザ)だけ対応が進み、サーバー側が対応が進んでいません。

つまり、現状はブラウザのDNTをONにしてもOFFにしてもトラッキングの挙動はほとんどのサイトで変わらないのが実情です。

DNTが意味のある機能になるためには法で強制するか、 インターネット広告推進協議会のような団体でポリシーを決めて業界全体で一斉にやる必要がありそうです。

DNTの現状に対処しつつDMPに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で確認)。

ブラウザのDNT=ON アプリケーション設定DNT=ON -> DNT対応実行

[debug] - application - rawRequestDntFlag=1
[debug] - application - applicationDntFlag=true
[debug] - application - --- DNT ON ---

ブラウザのDNT=OFF アプリケーション設定DNT=ON -> DNT対応実行しない

[debug] - application - rawRequestDntFlag=null
[debug] - application - Cookie Exist!
[debug] - application - 158f957dd3434f776ad0727e092d85c087302c95de1ce92dad47f6f6ac23eab8

ブラウザのDNT=ON アプリケーション設定DNT=OFF -> DNT対応実行しない

[debug] - application - rawRequestDntFlag=1
[debug] - application - applicationDntFlag=false
[debug] - application - 1436114058269 1436114058269096000 ce49563823e3b8e856092ab6
[debug] - application - 40445eb213ba908acd3a3eefffe95501f877c315029f2965fcb3b0ae31e1d545

ブラウザのDNT=OFF アプリケーション設定DNT=OFF -> DNT対応実行しない

[debug] - application - rawRequestDntFlag=null
[debug] - application - Cookie Exist!
[debug] - application - 158f957dd3434f776ad0727e092d85c087302c95de1ce92dad47f6f6ac23eab8

参考

外部資料 DoNotTrackの概念、実装についてはFirefoxの「DoNotTrack実装ガイド」(PDF)の資料が詳細にまとめています(日本語訳もされています)。

特にアドテクエンジニアの方はP11~P12の広告会社のケースが参考になると思います。

Do Not Track に関するよくある質問 (FAQ)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment