■ フェーズ1:ページ閲覧

───────────────────────────────────────

13:19:52  GET /downloads/?ad_local=side_download → 200 OK(159ms)


  【裏で同時発火】

  Facebook PageView × 4ピクセル

  Google gtag.config × 5アカウント

  Bing PageView × 1

  ofgreencolumn モニタリング

  Taboola トラッキング


───────────────────────────────────────

■ フェーズ2:ダウンロードボタンクリック

───────────────────────────────────────

13:19:57  GET /download/confirmation/?dlAssetId=AS_167195

          → 302(286ms)

          → location: /mykeyence/?dlLangType=ja-JP


───────────────────────────────────────

■ フェーズ3:マイページ表示(同じ秒に並列処理)

───────────────────────────────────────

13:19:57  GET /mykeyence/              → 200 OK(311ms)

13:19:57  GET /ajax/accessLog/         → 200 OK(36ms)内部ログ

13:19:57  GET /isLoadingDlServer/      → 200 OK(28ms)サーバー確認


  【裏で同時発火・約40本以上】

  Facebook SubscribedButtonClick × 4ピクセル

  Facebook Segment × 4ピクセル

  Facebook POST /tr/(8,501バイト)

  Google pagead × 3アカウント

  Google ccm メールハッシュ照合 × 3アカウント

  Google viewthroughconversion × 3アカウント

  Google rmkt リマーケティング登録 × 3アカウント

  Google purchase イベント × 複数

  Bing コンバージョン計測 × 1

  ofgreencolumn POST(3,554バイト)

  メールアドレス平文送信 × 3回

  customerID=25972406 → Google送信

  uid=D25972406 → Google送信


───────────────────────────────────────

■ フェーズ4:ファイルダウンロード実行(10秒後)

───────────────────────────────────────

13:20:07  GET /downloadFromDLList?downloadAssetId=AS_167195

          → 302(87ms)ワンタイムトークン発行

          → location: download.keyence.com/contents/?dlc=xGEdShy8...


13:20:07  GET download.keyence.com/contents/?dlc=xGEdShy8...

          → 200 OK

          → AS_167195_EB-3000_C_288013_KJ_JP_2046_2.pdf(9.8MB)

          → ダウンロード完了!


───────────────────────────────────────

■ 送信先まとめ

───────────────────────────────────────

キーエンス本体:

  /downloadConfirm/     認証・権限確認

  /downloadFromDLList   ワンタイムトークン発行

  download.keyence.com  ファイル配信(Akamai CDN経由)


外部送信先:

  Facebook(Meta)      ピクセル×4 / PageView・SubscribedButtonClick・Segment

  Google広告            アカウント×5 / purchase・rmkt・ccm

  Microsoft Bing        コンバージョン計測×1

  Taboola               ユーザーマッチング×1

  ofgreencolumn         行動モニタリング

  im-apps.net           DMP(データ管理)

  deteql.net            モニタリング


───────────────────────────────────────

■ 数字まとめ

───────────────────────────────────────

総所要時間               約18秒

キーエンスへのリクエスト  6本

外部トラッキング          約40本以上

広告プラットフォーム数    4社

Googleアカウント数        5アカウント

Facebookピクセル数        4ピクセル

メール送信               ハッシュ化 複数回 / 平文 3回

ファイルサイズ            9.8MB(PDF)


───────────────────────────────────────

■ 技術スタック

───────────────────────────────────────

Webサーバー      Apache

アプリサーバー   Tomcat(JSESSIONID)

フレームワーク   Apache Struts

CDN             Akamai

負荷分散         AWS ALB

ファイル配信     専用ドメイン(download.keyence.com)+ Akamai




メインの2ぶん

https://www.keyence.co.jp/mykeyence/downloadFromDLList?downloadAssetId=AS_167195&downloadZipFlag=0

https://download.keyence.com/contents/?dlc=xGEdShy8kr10E5EGqーーーーーーー


■ ステップ1:権限チェック

───────────────────────────────────────

Request URL

  https://www.keyence.co.jp/mykeyence/downloadFromDLList

    ?downloadAssetId=AS_167195

    &downloadZipFlag=0

Request Method  GET

Status Code     302 Found

Server          Apache

時刻            13:20:07


server-timing:

  cdn-cache; desc=MISS   ← CDNにキャッシュなし・本番サーバーまで届いた

  edge; dur=20           ← CDNエッジ処理:20ミリ秒

  origin; dur=87         ← Tomcat処理:87ミリ秒


【Tomcatが87ミリ秒でやっていること】

  ① JSSESSIONIDでセッション確認

  ② signinStat=1を確認

  ③ AS_167195のダウンロード権限確認

  ④ ワンタイムトークン生成

  ⑤ download.keyence.comへのURL組み立て

  ⑥ 302を返す


cache-control: max-age=0, no-cache, no-store

← 絶対にキャッシュさせない(セキュリティ)


location:

  https://download.keyence.com/contents/

    ?dlc=xGEdShy8kr10E5EGq5sTーーーーーー

         ↑

    ワンタイムトークン(使い捨てURL)

    ・一定時間で無効になる

    ・ログイン済みユーザーにだけ発行

    ・毎回異なる値が生成される


Cookie(送信):

  JSESSIONID=14EBF01F9F5CBA350A17815A50CB53DF ← セッションID

  signinStat=1                                 ← ログイン済み

  signinf=iM6l5xXl...                         ← ログイントークン


───────────────────────────────────────

■ ステップ2:ファイル取得

───────────────────────────────────────

Request URL

  https://download.keyence.com/contents/

    ?dlc=xGEdShy8kr10E5EGq5sTDZCjhTo3v8RN

Request Method  GET

Status Code     200 OK

Remote Address  23.42.126.117:443

Server          Apache


【ドメインが変わっている】

  www.keyence.co.jp    → ここで認証・トークン発行

  download.keyence.com → ここでファイル配信(別ドメイン)


content-disposition:

  attachment; filename*=UTF-8''AS_167195_EB-3000_C_288013_KJ_JP_2046_2.pdf


ファイル名を分解:

  AS_167195  ← アセットID

  EB-3000    ← 製品型番

  C          ← バリエーション

  288013     ← 内部管理番号

  KJ_JP      ← 日本語版

  2046_2     ← バージョン

  .pdf       ← PDFファイル


content-length: 10318930バイト = 約9.8MB

content-type:   application/octet-stream ← バイナリファイル

connection:     keep-alive ← 接続を維持して高速転送


───────────────────────────────────────

■ ワンタイムトークンの比較(毎回変わる)

───────────────────────────────────────

1回目(12:26:28): dlc=rtbmUu4Mーーーーーー

2回目(13:16:32): dlc=6eGQJNao%ーーーーーー

3回目(13:20:07): dlc=xGEdShy8krーーーー

        ↑

毎回完全に異なる値が生成される

← URLを知っていても使い回せない設計


───────────────────────────────────────

■ なぜワンタイムトークンが必要か

───────────────────────────────────────

❌ トークンなしの場合(危険)

  https://download.keyence.com/files/EB-3000.pdf

  ← URLを知っていれば誰でもダウンロードできる

  ← 未ログインユーザーも取得可能


✅ ワンタイムトークンありの場合(安全)

  https://download.keyence.com/contents/?dlc=xGEdShy8...

  ← ログイン済みユーザーにだけ発行

  ← 一定時間で無効になる

  ← 使い捨てなので転用不可

  ← 毎回異なるので予測不可能