はじめてのUser-Agent文字列

3,869 views

Published on

User-Agent文字列ってなんだよ入門

Published in: Internet
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,869
On SlideShare
0
From Embeds
0
Number of Embeds
1,427
Actions
Shares
0
Downloads
3
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

はじめてのUser-Agent文字列

  1. 1. はじめてのUser-Agent文字列 うさみけんた@ぞ 2015年5月21日 pixiv Inc.
  2. 2. お前誰よ • うさみけんた/tadsan/ぞ • 通りすがりのPHPer • さいきんあまりRuby書いてない • すきなHTTPヘッダはAccept-Language
  3. 3. pixiv.net touch.pixiv.net www.pixiv.net どうやって見分けるの?
  4. 4. HTTP User-Agent Header
  5. 5. Hi, I’m Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/ 12A4345d Safari/600.1.4 iPhone 6 Plus
  6. 6. Hi, I’m Mozilla/5.0 (Linux; Android 4.4.2; GT- I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/ 28.0.1500.94 Mobile Safari/537.36 Android Browser
  7. 7. Hi, I’m Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36 OS X Chrome 43
  8. 8. Hi, I’m Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/ 12.0 Windows 10 Edge
  9. 9. 超ざっくり用語集 HTTP… Webでデータをやりとりするルールのこと     ブラウザとサーバーがやりとりする Chrome… グーグル社が開発したブラウザ Firefox… モジラ財団が開発したブラウザ Opera… オペラ社が開発したブラウザ Safari… アップル社が開発したブラウザ
  10. 10. 超ざっくり用語集 NCSA Mosaic… 最初期のすごいブラウザ NetScape… むかし人気だったブラウザ エンジン… ブラウザのコアのことだよ Mozilla… NetScapeのことだよ Internet Explorer… MS社が作ったブラウザ KHTML… KDEプロジェクトが作ったエンジン Gecko… モジラ財団が作ったエンジン WebKit… Apple社がKHTMLから派生したエンジン Blink… Google社がWebkitから派生したエンジン EdgeHTML… MS社の最新エンジン
  11. 11. Hi, I’m Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/ 12.0 Windows 10 Edge モジラだよ WKだよ KHTMLだよ Geckoぽいよ Chrome39だよ Webkit537ベースだよ
  12. 12. Hi, I’m Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/ 12.0 Windows 10 Edge モジラだよ WKだよ KHTMLだよ Geckoぽいよ Chrome39だよ Webkit537ベースだよ 結局おめーは誰なんだよ
  13. 13. _人人人人人人人_ > 歴史的経緯 <  ̄Y^Y^Y^Y^Y^Y ̄
  14. 14. 地層のように積み重なった 呪詛のような歴史的経緯の山
  15. 15. みんなブラウザ判定が好き • ProxyとかJavaScriptとかWebサーバーとか • 新参者のブラウザは互換性のためと称して、
 自分の特徴は入れつつ誤認されたがる • 機能の互換性が十分ならばWin-Win(?) • その結果、最新ブラウザが赤の他人を
 詐称し続ける悪循環… • 微妙な非互換でライブラリ作者が泣きを…
  16. 16. Real World User-Agent
  17. 17. よく来るBotと仲良しになる • Googlebot
 https://support.google.com/webmasters/answer/ 182072?hl=ja • Twitterbot
 https://dev.twitter.com/cards/getting-started • bingbot
 http://www.bing.com/webmaster/help/which- crawlers-does-bing-use-8c184ec0
  18. 18. PC版とスマートフォン版 • スマートフォンだったら、touch.pixiv.netに、 それ以外だったらwww.pixiv.netに飛ばせばえ えやん? • 「スマートフォンだったら」は容易ではない • WindowsCE? BlackBerry? FirefoxOS? • Android/Windowsタブレットはどうするの? • ゲーム機は?
  19. 19. 状況を整理しよう • Android, iOSならtouch版に移動させる • Mobileが含まれるか判定すると良いが、
 古いAndroid端末には含まれにあので別途判定 • タブレット端末やゲーム機ではどちらを利用す るか好みが分かれるので、強制転送はかけない • 前回UserAgentの判定を調整したときには、
 PC版とtouch版のどちらが好きな方からも
 意見を頂戴した
  20. 20. いろんなユーザーエージェント • Apache-HttpClient (いっぱい来る) • JavaのHTTPライブラリだよ • PCサイトビューアー • フィーチャーフォンのブラウザだよ • テキストブラウザ • テキスト端末でWebを閲覧できるブラウザ
  21. 21. PHP <?php function isMobile($UA) { return (stripos($UA, 'mobile') !== false stripos($UA, 'android') !== false); } var_dump(isMobile($_SERVER['HTTP_USER_AGENT']));
  22. 22. PHP <?php function isTouchDevice($UA) { return (stripos($UA, 'nintendo') !== false || // 3DS, Wii stripos($UA, 'touch') !== false || // Win tablet stripos($UA, 'brew') !== false || // PCサイトビューアー stripos($UA, 'playstation') !== false // PSP, PSX ); } var_dump(isTouchDevice($_SERVER['HTTP_USER_AGENT']));

×