Your SlideShare is downloading. ×
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

はじめてのUser-Agent文字列

112

Published on

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

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

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

No Downloads
Views
Total Views
112
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. はじめてのUser-Agent文字列 うさみけんた@ぞ 2015年5月21日 pixiv Inc.
  • 2. お前誰よ • うさみけんた/tadsan/ぞ • 通りすがりのPHPer • さいきんあまりRuby書いてない • すきなHTTPヘッダはAccept-Language
  • 3. pixiv.net touch.pixiv.net www.pixiv.net どうやって見分けるの?
  • 4. HTTP User-Agent Header
  • 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. 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. 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. 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. 超ざっくり用語集 HTTP… Webでデータをやりとりするルールのこと     ブラウザとサーバーがやりとりする Chrome… グーグル社が開発したブラウザ Firefox… モジラ財団が開発したブラウザ Opera… オペラ社が開発したブラウザ Safari… アップル社が開発したブラウザ
  • 10. 超ざっくり用語集 NCSA Mosaic… 最初期のすごいブラウザ NetScape… むかし人気だったブラウザ エンジン… ブラウザのコアのことだよ Mozilla… NetScapeのことだよ Internet Explorer… MS社が作ったブラウザ KHTML… KDEプロジェクトが作ったエンジン Gecko… モジラ財団が作ったエンジン WebKit… Apple社がKHTMLから派生したエンジン Blink… Google社がWebkitから派生したエンジン EdgeHTML… MS社の最新エンジン
  • 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. 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. _人人人人人人人_ > 歴史的経緯 <  ̄Y^Y^Y^Y^Y^Y ̄
  • 14. 地層のように積み重なった 呪詛のような歴史的経緯の山
  • 15. みんなブラウザ判定が好き • ProxyとかJavaScriptとかWebサーバーとか • 新参者のブラウザは互換性のためと称して、
 自分の特徴は入れつつ誤認されたがる • 機能の互換性が十分ならばWin-Win(?) • その結果、最新ブラウザが赤の他人を
 詐称し続ける悪循環… • 微妙な非互換でライブラリ作者が泣きを…
  • 16. Real World User-Agent
  • 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. PC版とスマートフォン版 • スマートフォンだったら、touch.pixiv.netに、 それ以外だったらwww.pixiv.netに飛ばせばえ えやん? • 「スマートフォンだったら」は容易ではない • WindowsCE? BlackBerry? FirefoxOS? • Android/Windowsタブレットはどうするの? • ゲーム機は?
  • 19. 状況を整理しよう • Android, iOSならtouch版に移動させる • Mobileが含まれるか判定すると良いが、
 古いAndroid端末には含まれにあので別途判定 • タブレット端末やゲーム機ではどちらを利用す るか好みが分かれるので、強制転送はかけない • 前回UserAgentの判定を調整したときには、
 PC版とtouch版のどちらが好きな方からも
 意見を頂戴した
  • 20. いろんなユーザーエージェント • Apache-HttpClient (いっぱい来る) • JavaのHTTPライブラリだよ • PCサイトビューアー • フィーチャーフォンのブラウザだよ • テキストブラウザ • テキスト端末でWebを閲覧できるブラウザ
  • 21. PHP <?php function isMobile($UA) { return (stripos($UA, 'mobile') !== false stripos($UA, 'android') !== false); } var_dump(isMobile($_SERVER['HTTP_USER_AGENT']));
  • 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']));

×