profile
■ フェーズ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...
← ログイン済みユーザーにだけ発行
← 一定時間で無効になる
← 使い捨てなので転用不可
← 毎回異なるので予測不可能
