ある日の日常
報告者Aさん < ◯◯のページで処理が失敗して先に進めません…
報告者Bさん < △△のページのレイアウトがおかしいです…
報告者Cさん < ××のページが重すぎて開けません…
私 < ちょっと何言ってるかわからないです🤔
とならないためにも、先輩や関連部署、関連企業などに報告・相談する人も
報告・相談される人もお互いが少しでも幸せになるために、この文章を書きました。
報告を受ける側はどんな情報が知りたいか
そもそも報告・相談される人はどんな情報が知りたいでしょうか。
ここで何点か、知りたいことをあげてみると、
-
パフォーマンスに問題があると判断したのはなぜか
- 画面が表示されるまでの遅さ
- 特定の機能が動作するまでの遅さ
- 意図せぬエラー表示
-
該当の画面や該当の機能は期待通りのパフォーマンスで機能していた実績はあるか
- 何日前までは期待通りだったのか?
- その後どんな修正を加えたのか
-
その問題は、画面が表示されるまでの遅さの場合、定量的なもので表現するとどれくらいか
-
この問題はほかの人にも影響しているか
-
どういう操作をしたのか
HAR(HTTP ARchive)とは
Webブラウザーとサイトとのやり取りに関する
詳細なパフォーマンスデータをエクスポートするための
HTTPトランザクションのアーカイブ形式を定義する仕様です
World Wide Web Consortium(W3C)のWeb Performance Working Groupによって
作成されており、現在はまだドラフト形式であり、進行中です。
さて、ここで報告・相談される人が知りたいことに
どのくらい関係するかというと、
知りたいこと | HARが参考になるか | 備考 |
---|---|---|
パフォーマンスに問題があると判断したのはなぜか | ◎ | 明らかなエラー表示やレスポンスの遅さはHARより確認できる |
該当の画面や該当の機能は良好なパフォーマンスで機能していた実績はあるか | × | 過去の実績は確認することはできない |
その問題は、画面が表示されるまでの遅さの場合、定量的なもので表現するとどれくらいか | ◎ | 各種リクエストにかかった時間は確認できる |
この問題はほかの人にも影響しているか | ◯ | 特定の条件下でしか発生しないものを除き、リクエストを再現できるので、同じ現象が発生するかを確認しやすい |
どういう操作をしたのか | △ | どういうデータをリクエストに渡したのかまではわかる。だが操作を完全に再現はできない |
上記に記載したように、どのようなリクエストが
どのように振る舞ったかをある程度、確認しやすくなります。
HARの特徴
次にHARはどのような特徴があるかを簡単に説明すると、
- エクスポートされる際のアーカイブの形式としては Json です
- HARファイルはUTF-8エンコーディングで保存する必要があり、
他のエンコードは禁止です - ファイルにBOMが存在する場合、リーダーはBOMを無視する必要があり、
ライターはファイル内にBOMを発行することができます - エクスポートされたアーカイブの拡張子は一般的には .harです
HARファイルの取得に関しての推奨事項
-
同じサービスに置いて複数画面が存在している場合、
パフォーマンスの問題の原因を切り分けやすくするため、
影響がある(又はありそう)なページと、影響がないページの
両方のHARファイルを取得したほうが良いです。 -
常に起きる問題か、確率で起きる問題なのかを判断しやすくするため
HARファイルを取得する時は複数回HARファイルを生成した方が良いです。 -
特定のJavascriptなどの発火によるリクエストの分析を行う場合などでも、
分析対象の問題に先立って行われたリクエストが影響が及んでいる可能性があるので
できるようにページ全体の読み込みをキャプチャするようにしたほうが良いです。
HARファイルの注意事項
-
HAR ファイルを取得したユーザーはそのHARを取得したアカウントに
なりすますことが比較的に容易なので注意してください。 -
電話番号や住所などの個人情報や、パスワード、クレジットカード番号など
機密情報が含まれていないことをよく確認してください。
ブラウザでのHARファイルの取得方法
Google Chromeの場合
-
パフォーマンスを計測したいページに移動
-
デベロッパーツールを開く
Macの場合:⌘ + ⌥ + i
の同時押し ※⌘
はcommandキー,⌥
はoptionキー
Linuxの場合:Ctrl + Shift + i
Windowsの場合:F12
-
該当ページのリソースのキャッシュを防ぐためデベロッパーツールのウィンドウで
[Network]
タブを選び、上部バーに表示される
[Disable cache]
のチェックボックスにチェックを入れてオンにします。 -
ページを更新し、ブラウザとサーバーの間のトラフィックの取得を開始します。
-
問題が発生する or 原因となった操作を再現します。
-
保存したいリクエストにマウスカーソルを合わせて右クリックし、
[Save all as HAR with content]
をクリックします。 -
適当な名前をつけて
[保存]
をクリック
Firefox
-
パフォーマンスを計測したいページに移動
-
開発ツールのネットワークモニターを開く
Macの場合:⌘ + ⌥ + e
の同時押し ※⌘
はcommandキー,⌥
はoptionキー
Linuxの場合:Ctrl + Shift + e
Windowsの場合:Ctrl + Shift + e
-
該当ページのリソースのキャッシュを防ぐため
キャッシュ永続化
のチェックボックスチェックを入れてオンにします。 -
ページを更新し、ブラウザとサーバーの間のトラフィックの取得を開始します。
-
問題が発生する or 原因となった操作を再現します。
-
ネットワークモニター内の任意のリクエストに合わせて右クリックし、
[HAR 形式ですべてを保存]
をクリックします。
HARを取得してみる
タイトル | 阿部 寛のホームページ |
---|---|
URL | http://abehiroshi.la.coocan.jp |
取得したHAR
JSON全体
{
"log": {
"version": "1.2",
"creator": {
"name": "WebInspector",
"version": "537.36"
},
"pages": [
{
"startedDateTime": "2020-01-08T13:27:40.530Z",
"id": "page_1",
"title": "http://abehiroshi.la.coocan.jp/",
"pageTimings": {
"onContentLoad": 544.6839999931399,
"onLoad": 1358.0170000059297
}
}
],
"entries": [
{
"startedDateTime": "2020-01-08T13:27:40.525Z",
"time": 79.1300000000978,
"request": {
"method": "GET",
"url": "http://abehiroshi.la.coocan.jp/",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "abehiroshi.la.coocan.jp"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "Upgrade-Insecure-Requests",
"value": "1"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "ja,en-US;q=0.9,en;q=0.8"
}
],
"queryString": [],
"cookies": [],
"headersSize": 486,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Wed, 08 Jan 2020 13:27:40 GMT"
},
{
"name": "Content-Type",
"value": "text/html"
},
{
"name": "Content-Length",
"value": "336"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Last-Modified",
"value": "Mon, 05 Sep 2016 05:15:36 GMT"
},
{
"name": "ETag",
"value": "\"150-53bbbc52a6bee\""
},
{
"name": "Accept-Ranges",
"value": "bytes"
},
{
"name": "Server",
"value": "Apache"
}
],
"cookies": [],
"content": {
"size": 336,
"mimeType": "text/html",
"compression": 0,
"text": "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">\n<title>阿部寛のホームページ</title>\n</head>\n<frameset cols=18,82>\n <frame src=menu.htm marginheight=0 marginwidth=0 scrolling=auto name=left>\n <frame src=top.htm marginheight=0 marginwidth=0 scrolling=auto name=right>\n</frameset><noframes></noframes>\n"
},
"redirectURL": "",
"headersSize": 237,
"bodySize": 336,
"_transferSize": 573
},
"cache": {},
"timings": {
"blocked": 11.880999995385297,
"dns": 18.65,
"ssl": -1,
"connect": 33.484,
"send": 0.3089999999999975,
"wait": 13.124000002820047,
"receive": 1.6820000018924475,
"_blocked_queueing": 5.294999995385297
},
"serverIPAddress": "[2001:258:8609:73:210:131:2:8]",
"_initiator": {
"type": "other"
},
"_priority": "VeryHigh",
"_resourceType": "document",
"connection": "119005",
"pageref": "page_1"
},
{
"startedDateTime": "2020-01-08T13:27:41.064Z",
"time": 18.70000000053551,
"request": {
"method": "GET",
"url": "http://abehiroshi.la.coocan.jp/menu.htm",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "abehiroshi.la.coocan.jp"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "Upgrade-Insecure-Requests",
"value": "1"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
},
{
"name": "Referer",
"value": "http://abehiroshi.la.coocan.jp/"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "ja,en-US;q=0.9,en;q=0.8"
}
],
"queryString": [],
"cookies": [],
"headersSize": 536,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Wed, 08 Jan 2020 13:27:41 GMT"
},
{
"name": "Content-Type",
"value": "text/html"
},
{
"name": "Content-Length",
"value": "2399"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Last-Modified",
"value": "Thu, 06 May 2010 06:59:52 GMT"
},
{
"name": "ETag",
"value": "\"95f-485e77d3e0a00\""
},
{
"name": "Accept-Ranges",
"value": "bytes"
},
{
"name": "Server",
"value": "Apache"
}
],
"cookies": [],
"content": {
"size": 2399,
"mimeType": "text/html",
"compression": 0,
"text": "<!-- saved from url=(0022)http://internet.e-mail -->\n<HTML>\n<HEAD>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">\n<TITLE>メニュー</TITLE>\n</HEAD>\n<BODY bgcolor=\"#F0F0FF\">\n<br>\n<table border=\"0\" width=\"142\">\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#FFCCCC\">●</font></td>\n <td width=\"148\"> \n <p><a href=\"top.htm\" target=\"right\">トップ</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#00FF00\">●</font></td>\n <td width=\"148\"> \n <p><a href=\"movie/eiga.htm\" target=\"right\">映画出演</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#33FFFF\">●</font> \n <td width=\"148\"> \n <p><a href=\"tv/tv.htm\" target=\"right\">ドラマ出演</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#0099FF\">●</font></td>\n <td width=\"148\"> \n <p><a href=\"stage/butai.htm\" target=\"right\">舞台出演</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#0000FF\">●</font></td>\n <td width=\"148\"> \n <p><a href=\"photo/photo.htm\" target=\"right\">写真集</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#333399\">●</font></td>\n <td width=\"148\"> \n <p><a href=\"essay/essay.htm\" target=\"right\">出版本</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"><font color=\"#CC00CC\">●</font></td>\n <td width=\"148\"> \n <p><a href=\"kanri/kanri.htm\" target=\"right\">管理者</a></p>\n </td>\n </tr>\n <tr> \n <td width=\"15\"> </td>\n <td width=\"10\"> </td>\n <td width=\"148\"> </td>\n </tr>\n</table>\n</BODY>\n</HTML>\n"
},
"redirectURL": "",
"headersSize": 238,
"bodySize": 2399,
"_transferSize": 2637
},
"cache": {},
"timings": {
"blocked": 6.043000001671724,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.1339999999999999,
"wait": 11.54900000382401,
"receive": 0.973999995039776,
"_blocked_queueing": 2.670000001671724
},
"serverIPAddress": "[2001:258:8609:73:210:131:2:8]",
"_initiator": {
"type": "parser",
"url": "http://abehiroshi.la.coocan.jp/",
"lineNumber": 6
},
"_priority": "VeryHigh",
"_resourceType": "document",
"connection": "119005",
"pageref": "page_1"
},
{
"startedDateTime": "2020-01-08T13:27:41.068Z",
"time": 30.064000006116927,
"request": {
"method": "GET",
"url": "http://abehiroshi.la.coocan.jp/top.htm",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "abehiroshi.la.coocan.jp"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "Upgrade-Insecure-Requests",
"value": "1"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
},
{
"name": "Referer",
"value": "http://abehiroshi.la.coocan.jp/"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "ja,en-US;q=0.9,en;q=0.8"
}
],
"queryString": [],
"cookies": [],
"headersSize": 535,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Wed, 08 Jan 2020 13:27:41 GMT"
},
{
"name": "Content-Type",
"value": "text/html"
},
{
"name": "Content-Length",
"value": "4544"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Last-Modified",
"value": "Sat, 21 Dec 2019 08:16:01 GMT"
},
{
"name": "ETag",
"value": "\"11c0-59a3267a9982b\""
},
{
"name": "Accept-Ranges",
"value": "bytes"
},
{
"name": "Server",
"value": "Apache"
}
],
"cookies": [],
"content": {
"size": 4544,
"mimeType": "text/html",
"compression": 0,
"text": "<!-- saved from url=(0022)http://internet.e-mail -->\n<!-- saved from url=(0022)http://internet.e-mail -->\n<html>\n\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n<meta name=\"GENERATOR\" content=\"JustSystems Homepage Builder Version 20.0.6.0 for Windows\">\n<title>阿部 寛のホームページ</title>\n\n\n</head>\n\n\n<body background=\"image/abehiroshi.jpg\">\n<br>\n<h1 align=\"center\">阿部 寛のホームページ</h1>\n<table align=\"center\">\n <tr>\n <td rowspan=\"2\"><img src=\"abe-top-20190328-2.jpg\" width=\"350\" height=\"414\" border=\"0\"><br>\n <br>\n <table width=\"256\">\n <tr>\n <td width=\"14\"> </td>\n <td width=\"230\">阿部 寛(あべ ひろし)<br></td>\n </tr>\n <tr>\n <td> </td>\n <td>生年月日 1964年6月22日<br></td>\n </tr>\n <tr>\n <td> </td>\n <td>血液型 A型<br></td>\n </tr>\n <tr>\n <td> </td>\n <td><a href=\"prof/prof.htm\">プロフィール</a></td>\n </tr>\n <tr>\n <td> </td>\n <td> </td>\n </tr>\n <tr>\n <td colspan=\"2\"><br>\n If you have any enquiries regarding my TV drama or film, or would like to make an enquiry concerning future projects, please do not hesitate to contact me through the following email address.<br>\n <br>\n mail:<a href=\"mailto:shigeta@navy.plala.or.jp\">shigeta@navy.plala.or.jp</a></td>\n </tr>\n </table> \n <br>\n 所属<strong>:</strong><br>\n 茂田オフィス<br>\n 107-0052<br>\n 東京都港区赤坂9-5-29 <br>\n 赤坂ロイヤルマンション303<br>\n \nTEL : +81-3-5410-8585<br>\n FAX : +81-3-5410-0588 </td>\n <td> </td>\n <td><div align=\"center\">★★★ 最新情報 ★★★</div></td>\n </tr>\n <tr>\n <td></td>\n <td>\n <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td></td>\n </tr>\n </table>\n<!-- start -->\n <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td align=\"left\" valign=\"bottom\"><hr width=\"100%\" size=\"1\"></td>\n </tr>\n </table>\n\n <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td align=\"left\" valign=\"top\"><strong>・舞台</strong></td>\n </tr>\n </table>\n <table border=\"0\" cellspacing=\"5\" cellpadding=\"0\">\n <tr>\n <td width=\"70\" align=\"left\" valign=\"top\"> </td>\n <td>\n <strong><a href=\"https://www.saf.or.jp/arthall/stages/detail/7009\" target=\"_blank\">彩の国シェイクスピア・シリーズ第35弾 『ヘンリー八世』</a> <br>\n 2020年2月14日(金)~3月1日(日)<br>\n </strong></td>\n </tr>\n <tr>\n <td align=\"left\" valign=\"top\"> </td>\n <td><br></td>\n </tr>\n\n </table>\n<!-- end -->\n<!-- start -->\n <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td align=\"left\" valign=\"bottom\"><hr width=\"100%\" size=\"1\"></td>\n </tr>\n </table>\n\n <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td align=\"left\" valign=\"top\"><strong>・映画</strong></td>\n </tr>\n </table>\n <table border=\"0\" cellspacing=\"5\" cellpadding=\"0\">\n <tr>\n <td width=\"70\" align=\"left\" valign=\"top\"> </td>\n <td>\n <strong>\n <a href=\"http://www.hokusai2020.com/\" target=\"_blank\">「HOKUSAI」</a> <br>\n 2020年・初夏 全国公開<font color=\"#ff0000\">New!</font><br>\n <br>\n </strong></td>\n </tr>\n </table>\n <table border=\"0\" cellspacing=\"5\" cellpadding=\"0\">\n <tr>\n <td width=\"70\" align=\"left\" valign=\"top\"> </td>\n <td><strong> マレーシア映画「The Garden Of Evening Mists」<br>\n 2020年公開予定<br>\n <br>\n </strong></td>\n </tr>\n </table>\n<!-- end -->\n\n <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td align=\"left\" valign=\"bottom\"><hr width=\"100%\" size=\"1\"></td>\n </tr>\n </table>\n\t\t <br>\n\t\t <br>\n\t\t <br>\n\t\t <br>\n <br>\n\t\t <br>\n\t\t <br>\n <br>\n <br>\n <br>\n\t\t <br>\n\t\t <br>\n <br>\n <br>\n <br>\n <br>\n\t\t <br>\n <br>\n <br>\n <br>\n <br>\n </td>\n </tr>\n</table>\n</body>\n</html>\n"
},
"redirectURL": "",
"headersSize": 239,
"bodySize": 4544,
"_transferSize": 4783
},
"cache": {},
"timings": {
"blocked": 3.463000008860603,
"dns": 0.020999999999999908,
"ssl": -1,
"connect": 10.431999999999999,
"send": 0.24300000000000033,
"wait": 14.499999994550832,
"receive": 1.405000002705492,
"_blocked_queueing": 1.939000008860603
},
"serverIPAddress": "[2001:258:8609:73:210:131:2:8]",
"_initiator": {
"type": "parser",
"url": "http://abehiroshi.la.coocan.jp/",
"lineNumber": 7
},
"_priority": "VeryHigh",
"_resourceType": "document",
"connection": "119028",
"pageref": "page_1"
},
{
"startedDateTime": "2020-01-08T13:27:41.834Z",
"time": 29.75299999525305,
"request": {
"method": "GET",
"url": "http://abehiroshi.la.coocan.jp/abe-top-20190328-2.jpg",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "abehiroshi.la.coocan.jp"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
{
"name": "Accept",
"value": "image/webp,image/apng,image/*,*/*;q=0.8"
},
{
"name": "Referer",
"value": "http://abehiroshi.la.coocan.jp/top.htm"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "ja,en-US;q=0.9,en;q=0.8"
}
],
"queryString": [],
"cookies": [],
"headersSize": 442,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Wed, 08 Jan 2020 13:27:41 GMT"
},
{
"name": "Content-Type",
"value": "image/jpeg"
},
{
"name": "Content-Length",
"value": "26147"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Last-Modified",
"value": "Sat, 30 Mar 2019 06:41:19 GMT"
},
{
"name": "ETag",
"value": "\"6623-5854a13321d97\""
},
{
"name": "Accept-Ranges",
"value": "bytes"
},
{
"name": "Server",
"value": "Apache"
}
],
"cookies": [],
"content": {
"size": 26147,
"mimeType": "image/jpeg",
"compression": 0,
"text": "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",
"encoding": "base64"
},
"redirectURL": "",
"headersSize": 241,
"bodySize": 26147,
"_transferSize": 26388
},
"cache": {},
"timings": {
"blocked": 2.1219999989457428,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.13200000000000012,
"wait": 13.161000002721325,
"receive": 14.337999993585981,
"_blocked_queueing": 1.0929999989457428
},
"serverIPAddress": "[2001:258:8609:73:210:131:2:8]",
"_initiator": {
"type": "parser",
"url": "http://abehiroshi.la.coocan.jp/top.htm",
"lineNumber": 19
},
"_priority": "High",
"_resourceType": "image",
"connection": "119028",
"pageref": "page_1"
},
{
"startedDateTime": "2020-01-08T13:27:41.842Z",
"time": 18.744999993941747,
"request": {
"method": "GET",
"url": "http://abehiroshi.la.coocan.jp/image/abehiroshi.jpg",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "abehiroshi.la.coocan.jp"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
{
"name": "Accept",
"value": "image/webp,image/apng,image/*,*/*;q=0.8"
},
{
"name": "Referer",
"value": "http://abehiroshi.la.coocan.jp/top.htm"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "ja,en-US;q=0.9,en;q=0.8"
}
],
"queryString": [],
"cookies": [],
"headersSize": 440,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Wed, 08 Jan 2020 13:27:41 GMT"
},
{
"name": "Content-Type",
"value": "image/jpeg"
},
{
"name": "Content-Length",
"value": "3104"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Last-Modified",
"value": "Tue, 26 Jul 2011 11:19:39 GMT"
},
{
"name": "ETag",
"value": "\"c20-4a8f71b8608c0\""
},
{
"name": "Accept-Ranges",
"value": "bytes"
},
{
"name": "Server",
"value": "Apache"
}
],
"cookies": [],
"content": {
"size": 3104,
"mimeType": "image/jpeg",
"compression": 0,
"text": "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OpqCS6kiG57dgnruFQXTPBfpMwymMD+tXf3dzD/eRqL3Dmcm0nZoeDlQfUVlsfP1QDPAbH5VqMQqlj0AzWVYbjM8nVsYH1NEuiJrauMTRlnWLjazt/dUZNR2t4tySu3awGcZzUuFhiZvQFmPrVHS0+aR8dgKLu5UpSU0u5oO6ou52Cj1NVn1CBehLH2FW6y7wCTUETr0Bx9aJNodWUoq8TTU7kDEYyM49KWiiqNQooooAKKKKACiiigAooqtcRXDSLJDJjb/AAmkyZOyvYs1XncyOLdDyeXI7Co1N9IMMI4/fqasQwrCpAJJPJY9TRuTdz0S0I/sFt/zz/8AHjVa9tIYrcvGmCCO5rRqG7iaa3ZE+8cY/Ok0rCnTjyuyGWLbrNPbI/WrNUba2uYAQJEAPOMZqzMszQ7Y2UOeCx4/Kmtgg2oarYZesfs5RRl3O0Cn20PkQKnfqfrVNbS8VtwmXPqST/SpRFfZ+a4QD2Gf6Ur63sSpPm5nFjdTI8hB33Z/SpNPVltRu7nI+lC2Sl98zmVvfp+VWqEtbjjB8/OwqnqBLJHCvLO3SpZxcNgQFF9Sev8AKoFivEcv+6Zj/Eev0ofYKjbXLZluGMRQqg7Cn1TL34/5ZxN9P/11JGlw5BmZVA/hTv8AU07lRl0SZYooopmgUVXuLeSV1eOYqV6DtSqt0Rh3iHuoJNK5HM72sV7xTc3UcC/w8sfSrygKoUcADApscSxA45J5LHqafQkEY2bk92RzvsgkYdQpxVTS1+SR/U4qxdxvLbmNBySOtRWtvcQIV3xgE56E/wCFJ7kST9onbRFysyX99qqr2UgflzWkM4GSCe+KpNZSC6M0coXJJyRkiiQVU2lZdS6WAYLnk9qzr/Mt3HEPT+Zq+kYTJyWY9WPU1XW0c3pnZhjPAH0xQ9QqxckkWUQIgUdBTqKKo2MvVCfNQdtvFX7f/j2i/wBwfyptzbLcoAThh0NMghuYk8vzI9o6HBJqbWZgouNRu2jIr8mV47dBlicn2q5DGIYljHYUkUKxEtyzt1Y9TRMkjptjcIfXFO3UtRs3N7jpI1lQo4yDVC03wXj2+dy9fpUqw3ucG4UD1C5/pU8MCw5OSzt1Y9TS3ZLTlJO1rDb19lpIfUY/OoNNiCwmX+Jjj8KmvIJLiNUQqOcnJqSCPyoUTjIHOPWi2ocrdW72RHfPstHx34pmnLttc/3iTUt1AbiHYDg5yM1Hb2skaBJJcqP4V6fnR1BqXtb20sWgQRkVmQfvtUd/7pJ/pWnVCOxlimLJMFB4zjJxQ+gVU242Re3DdtzzjNLTUQIMDvySepp1UarzCiiigYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9k=",
"encoding": "base64"
},
"redirectURL": "",
"headersSize": 239,
"bodySize": 3104,
"_transferSize": 3343
},
"cache": {},
"timings": {
"blocked": 1.9080000003101305,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.11399999999999999,
"wait": 15.190999998863786,
"receive": 1.5319999947678298,
"_blocked_queueing": 1.1830000003101304
},
"serverIPAddress": "[2001:258:8609:73:210:131:2:8]",
"_initiator": {
"type": "parser",
"url": "http://abehiroshi.la.coocan.jp/top.htm",
"lineNumber": 161
},
"_priority": "High",
"_resourceType": "image",
"connection": "119005",
"pageref": "page_1"
}
]
}
}
取得したHARを見やすい方法で見る
取得したHARはJSON形式なので、一般のエディタで開いて
確認することもできますが情報量が多く、慣れていても
目視で確認するのはわかりづらいのでGUIツールで確認することにします。
よく知られているツールは下記の3つです
ツール名 | URL |
---|---|
HTTP Archive Viewer | http://www.softwareishard.com/har/viewer/ |
G Suite Toolbox HAR Analyzer | https://toolbox.googleapps.com/apps/har_analyzer/ |
HTTP Archive Viewer (Chrome Extension) | https://chrome.google.com/webstore/detail/http-archive-viewer/ebbdbdmhegaoooipfnjikefdpeoaidml?hl=ja |
HTTP Archive Viewer
Headerのタブでrequestとresponseをまとめて確認できるので、
Headerだけ確認したい時とかには便利です。
ただし、文字列としてHARのファイルを読み込ませる必要があります。
G Suite Toolbox HAR Analyzer
G Suite Toolboxにある、HAR analizerです。
HARファイルを読み込ませることができ、全体的に見やすく、
request(リクエストタブ)とresponse(応答タブ)が別れているので、
どちらかに注視したい時に楽です。またCookieやタイミングが別タブでまとまっているのも見やすいです。
HTTP Archive Viewer
HTTP Archive Viewer の chromeの拡張版です。
見え方はWeb版の HTTP Archive Viewerとほぼ変わりはありません。
ブラウザ版とは違う点はHARのファイルを文字列として貼り付けるだけじゃなく、
ドラッグ + ドロップや選択してHARファイル読み込ませることができます
HARのフォーマット
log
さきほど取得したHARファイルを見てみると、まずlog
というオブジェクトがあります。このオブジェクトはHARファイルのデータのルートを表し、必ず存在しなければなりません。また名前はlogでなければなりません。
また次の名前/値のペアが含まれます(各値の詳細は順に説明します)
JSON Name | JSON Type | 必須かどうか | 説明 |
---|---|---|---|
version | string | 必須 | HARのフォーマットのバージョン番号 |
creator | object | 必須 | ログを作成したアプリケーションの名前と、そのアプリケーションのバージョン番号を含むcreator型のオブジェクト |
browser | array | オプション | ユーザーエージェントの名前とそのユーザーエージェントのバージョン情報を含むbrowser型のオブジェクト |
pages | array | オプション | それぞれがエクスポートされたページを表すpages型のオブジェクトの配列。 アプリケーションがページによるグループ化をサポートしていない場合、このフィールドは省略する |
entries | array | 必須 | entry型のオブジェクトの配列で、それぞれが1つのエクスポートされたHTTPリクエストを表す |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されたコメント |
creator
logの中のcreatorはオブジェクトで、次の名前/値のペアが含まれます
JSON Name | JSON Type | 必須かどうか | 説明 |
---|---|---|---|
name | string | 必須 | ログを作成したアプリケーションの名前 |
version | string | 必須 | ログを作成したアプリケーションのバージョン番号 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されたコメント |
browser
logの中のbrowserもオブジェクトで、次の名前/値のペアが含まれます
JSON Name | JSON Type | 必須かどうか | 説明 |
---|---|---|---|
name | string | 必須 | ログを作成したブラウザーの名前 |
version | string | 必須 | ログを作成したブラウザーのバージョン番号 |
comment | string | オプション | ユーザーまたはブラウザによって提供されたコメント |
pages
logの中のpagesは次のような配列で、エクスポートされたページのリストを表します。
また、次の名前/値のペアが含まれます
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
startedDateTime | string | 必須 | ページ読み込みの開始の日付とタイムスタンプ。ISO 8601 YYYY-MM-DDThh:mm:ss.sTZD
|
id | string | 必須 | ページの一意の識別子。エントリは、親ページを参照するために使用します。 |
title | string | 必須 | ページのタイトル |
pageTimings | object | 必須 | ページの読み込みに関する詳細なタイミング情報 |
comment | string | オプショナル | ユーザーまたはアプリケーションによって提供されるコメント |
"pages": [
{
"startedDateTime": "2009-04-16T12:07:25.123+01:00",
"id": "page_0",
"title": "Test Page",
"pageTimings": {...},
"comment": ""
}
]
pageTimings
このオブジェクトは、ページの読み込み中に発生したさまざまなイベント(状態)のタイミングを記述します。すべての時間はミリ秒で指定され、時間情報が利用できない場合、フィールドは-1に設定されます。
"pageTimings": {
"onContentLoad": 1720,
"onLoad": 2500,
"comment": ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
onContentLoad | number | オプショナル | ページの読み込みが開始されてからのミリ秒数。タイミングが現在のリクエストに適用されない場合は、-1を使用 |
onLoad | number | オプショナル | ページの読み込みが開始されてからのミリ秒数。タイミングが現在のリクエストに適用されない場合は、-1を使用 |
comment | string | オプショナル | ユーザーまたはアプリケーションによって提供されるコメント |
entries
このオブジェクトは、エクスポートされたすべてのHTTPリクエストを含む配列を表します。データをエクスポートする方法としては、インポートが高速になるためにstartedDateTime(最も古いものから開始)でエントリを並べ替えることが推奨されている。ただし、リーダーアプリケーションは、常に配列がソートされていることを確認する必要がある。
"entries": [
{
"pageref": "page_0",
"startedDateTime": "2009-04-16T12:07:23.596Z",
"time": 50,
"request": {...},
"response": {...},
"cache": {...},
"timings": {},
"serverIPAddress": "10.0.0.1",
"connection": "52492",
"comment": ""
}
]
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
pageref | string | optional | ユニークな親ページへの参照。アプリケーションがページによるグループ化をサポートしていない場合、このフィールドは省略 |
startedDateTime | string | 必須 | リクエスト開始の日付とタイムスタンプ。 ISO 8601 YYYY-MM-DDThh:mm:ss.sTZD
|
time | number | 必須 | リクエストの合計経過時間(ミリ秒)。これはタイミングオブジェクトで使用可能なすべてのタイミングの合計(つまり、-1の値は含まれません) |
request | object | 必須 | リクエストに関する詳細情報 |
response | object | 必須 | レスポンスに関する詳細情報 |
cache | object | 必須 | キャッシュの使用に関する情報 |
timings | object | 必須 | request/reponseに関する詳細なタイミング情報 |
serverIPAddress | string | オプション | 接続されたサーバーのIPアドレス(DNS解決の結果) |
connection | string | オプション | 親のTCP/IP接続の一意のID。クライアントのポート番号にすることができる。ポートがより多くの接続で共有される場合、ポート番号は一意の識別子である必要はないことに注意い。ポートがアプリケーションで使用できない場合、代わりに他の一意の接続IDを使用できる(接続インデックスなど)。アプリケーションがこの情報をサポートしていない場合は、このフィールドを省略 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
request
このオブジェクトには、実行されたリクエストに関する詳細情報が含まれています。送信されるリクエストのサイズはこの値を使って計算できる
var totalSize = entry.request.headersSize + entry.request.bodySize;
"request": {
"method": "GET",
"url": "http://www.example.com/path/?param=value",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [],
"queryString" : [],
"postData" : {},
"headersSize" : 150,
"bodySize" : 0,
"comment" : ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
method | string | 必須 | リクエストメソッド (GET, POSTnado) |
url | string | 必須 | リクエストの絶対URL ※ フラグメントは含まない |
httpVersion | string | 必須 | リクエストのHTTPバージョン |
cookies | string | 必須 | cookieのリスト |
headers | array | 必須 | ヘッダーオブジェクトのリスト |
queryString | array | 必須 | クエリパラメータオブジェクトのリスト |
postData | object | オプション | postされたデータ情報 |
headersSize | number | 必須 | HTTPリクエストメッセージの開始から、本文の前の二重CRLFまでの合計バイト数。情報が利用できない場合は、-1に設定 |
bodySize | number | オプション | リクエストbody(POSTデータペイロード)のサイズ(バイト単位)。情報が利用できない場合は、-1に設定 |
comment | string | オプション | リクエストbody(POSTデータペイロード)のサイズ(バイト単位)。情報が利用できない場合は、-1に設定します。 |
response
このオブジェクトには、レスポンスに関する詳細情報が含まれています。
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [],
"content": {},
"redirectURL": "",
"headersSize" : 160,
"bodySize" : 850,
"comment" : ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
status | number | 必須 | レスポンスのHTTPステータスコード |
statusText | string | 必須 | レスポンスのHTTPステータスコードの説明 |
httpVersion | string | 必須 | レスポンスのHTTPバージョン |
cookies | array | 必須 | cookieオブジェクトのリスト |
headers | array | 必須 | headerオブジェクトのリスト |
content | object | 必須 | レスポンスbodyに関する詳細 |
redirectURL | string | 必須 | Location レスポンスヘッダーからのリダイレクトターゲットURL。 |
headersSize | number | 必須 | HTTPレスポンスメッセージの開始から、本文の前の二重CRLFまでの合計バイト数。情報が利用できない場合は、-1に設定 ※1 |
bodySize | number | 必須 | 受信したレスポンスの本文のサイズ(バイト単位)。キャッシュからの応答の場合は0に設定(304)。情報が利用できない場合は、-1に設定 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
※1 受信した応答ヘッダーのサイズは、サーバーから実際に受信したヘッダーからのみ計算されます。
ブラウザによって追加された追加のヘッダーはこの数には含まれませんが、
ヘッダーオブジェクトのリストに表示されます。
受信した合計応答サイズは、次のように計算できます(両方の値が使用可能な場合)。
var totalSize = entry.response.headersSize + entry.response.bodySize;
cookies
このオブジェクトには、すべてのCookieのリストが含まれます(requestおよびresponseオブジェクトで使用されます)
"cookies": [
{
"name": "TestCookie",
"value": "Cookie Value",
"path": "/",
"domain": "www.janodvarko.cz",
"expires": "2009-07-24T19:20:30.123+02:00",
"httpOnly": false,
"secure": false,
"comment": ""
}
]
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
name | string | 必須 | Cookieの名前 |
value | string | 必須 | Cookieの値 |
path | string | オプション | Cookieに関連するパス |
domain | string | オプション | Cookieのホスト |
expires | string | オプション | Cookieの有効期限 ISO 8601 YYYY-MM-DDThh:mm:ss.sTZD
|
httpOnly | boolean | オプション | CookieがHTTPのみの場合はtrueに、そうでない場合はfalseに設定 |
secure | boolean | オプション | cookieがsslを介して送信された場合はtrue、そうでない場合はfalse |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
headers
このオブジェクトには、すべてのヘッダーのリストが含まれます(requestおよびresponseオブジェクトで使用されます)
"headers": [
{
"name": "Accept-Encoding",
"value": "gzip,deflate",
"comment": ""
},
{
"name": "Accept-Language",
"value": "en-us,en;q=0.5",
"comment": ""
}
]
※直下の表のみはW3Cのドラフトに明確な記載がないため推測で記述
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
name | string | 必須 | headerの名前 |
value | string | オプション | headerの値 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
queryString
このオブジェクトには、クエリ文字列から解析されたすべてのパラメーターと値のリストが含まれています(requestオブジェクトに埋め込まれている場合)
"queryString": [
{
"name": "param1",
"value": "value1",
"comment": ""
},
{
"name": "param1",
"value": "value1",
"comment": ""
}
]
※直下の表のみはW3Cのドラフトに明確な記載がないため推測で記述
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
name | string | 必須 | queryStringの名前 |
value | string | オプション | queryStringの値 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
postData
このオブジェクトは、ポストされたデータがあれば、それを記述します(requestオブジェクトに埋め込まれます)
"postData": {
"mimeType": "multipart/form-data",
"params": [],
"text" : "plain posted data",
"comment": ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
mimeType | string | 必須 | postされたデータのMIMEタイプ |
params | array | 必須 | postされたパラメータのリスト(URLエンコードされたパラメーターの場合) |
text | string | 必須 | プレーンテキストのpostde-ta |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
※ textフィールドとparamsフィールドは相互に排他的であることに注意してください
params
postされたパラメーターのリスト(存在する場合)(postDataオブジェクトに埋め込まれます)
"params": [
{
"name": "paramName",
"value": "paramValue",
"fileName": "example.pdf",
"contentType": "application/pdf",
"comment": ""
}
]
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
name | string | 必須 | postされたパラメーターの名前 |
value | string | 必須 | postされたパラメーターの値またはpostされたファイルのコンテンツ |
fileName | string | オプション | postされたファイルの名前 |
contentType | string | オプション | postされたファイルのコンテンツタイプ |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
content
このオブジェクトは、responseコンテンツに関する詳細を記述します(responseオブジェクトに埋め込まれます)
"content": {
"size": 33,
"compression": 0,
"mimeType": "text/html; charset=utf-8",
"text": "\n",
"comment": ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
size | number | 必須 | 返されるコンテンツの長さ(バイト単位)。圧縮がない場合はresponse.bodySizeと等しく、コンテンツが圧縮されている場合は大きくする必要があります |
compression | number | オプション | 保存されたバイト数。情報が利用できない場合は、このフィールドを省略 |
mimeType | string | 必須 | 応答テキストのMIMEタイプ(Content-Typeレスポンスヘッダーの値)。MIMEタイプのcharset属性が含まれます(利用可能な場合) |
text | string | オプション | サーバーから送信された、またはブラウザーのキャッシュから読み込まれたresponse body。このフィールドには、テキストコンテンツのみが入力されます。テキストフィールドは、HTTPでデコードされたテキスト、またはresponse bodyのエンコードされた(たとえば「base64」)表現です。情報が利用できない場合は、このフィールドを省略 |
encoding | string | オプション | レスポンステキストフィールドに使用されるエンコーディング(例: "base64")。テキストフィールドが元の文字セットからUTF-8にトランスコードされるのではなく、テキストフィールドがHTTPデコード(圧縮解除されていない)されている場合は、このフィールドを省略 ※1 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
テキストフィールドを設定する前に、HTTPレスポンスは元の文字セットからUTF-8にトランスコードされるのではなく、デコード(圧縮解除されたまま)されます。さらに、base64などを使用してエンコードできます。
理想的には、アプリケーションはbase64 blobのエンコードを解除し、ブラウザーが操作したものと同じバイト単位のリソースを取得できる必要があります。
エンコードフィールドは、バイナリレスポンス(画像など)をHARファイルに含めるのに役立ちます。エンコードされたレスポンスの別の例を次に示します。元のレスポンスは次のとおりです。
<html><head></head><body/></html>\n
"content": {
"size": 33,
"compression": 0,
"mimeType": "text/html; charset=utf-8",
"text": "PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5Lz48L2h0bWw+XG4=",
"encoding": "base64",
"comment": ""
}
cache
このオブジェクトには、ブラウザキャッシュからのリクエストに関する情報が含まれています。
"cache": {
"beforeRequest": {},
"afterRequest": {},
"comment": ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
beforeRequest | object | オプション | リクエスト前のキャッシュエントリの状態。情報が利用できない場合は、このフィールドを省略 |
afterRequest | object | オプション | リクエスト後のキャッシュエントリの状態。情報が利用できない場合は、このフィールドを省略 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
例えば、キャッシュ情報が使用できない場合(またはフィールド全体を省略できる場合)のオブジェクトは下記のようになります。
"cache": {}
また、リクエスト前のキャッシュエントリに関する情報が利用できず、リクエスト後にキャッシュエントリがない場合のオブジェクトは下記のようになります。
"cache": {
"afterRequest": null
}
これは、リクエストの前後にキャッシュエントリがない場合のオブジェクトです
"cache": {
"beforeRequest": null,
"afterRequest": null
}
これは、エントリがキャッシュにないが、コンテンツがリクエストによってダウンロードされた後に保存されたことを示すためにオブジェクトがどのように見えるかです。
"cache": {
"beforeRequest": null,
"afterRequest": {
"expires": "2009-04-16T15:50:36",
"lastAccess": "2009-16-02T15:50:34",
"eTag": "",
"hitCount": 0,
"comment": ""
}
}
前の二つの例はどちらもbeforeRequestとafterRequestオブジェクトを共有し、次の構造をしています。
"beforeRequest": {
"expires": "2009-04-16T15:50:36",
"lastAccess": "2009-16-02T15:50:34",
"eTag": "",
"hitCount": 0,
"comment": ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
expires | string | オプション | キャッシュエントリの有効期限 |
lastAccess | string | 必須 | キャッシュエントリが最後に開かれた時刻 |
eTag | string | 必須 | Etag |
hitCount | number | 必須 | キャッシュエントリが開かれた回数 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
timing
このオブジェクトは、requestとresponseのラウンドトリップ内のさまざまなフェーズを記述します。すべての時間はミリ秒で指定されます。
"timings": {
"blocked": 0,
"dns": -1,
"connect": 15,
"send": 20,
"wait": 38,
"receive": 12,
"ssl": -1,
"comment": ""
}
名前 | 型 | 必須かどうか | 説明 |
---|---|---|---|
blocked | number | オプション | ネットワーク接続を待機するキューで費やされた時間。タイミングが現在の要求に適用されない場合は、-1を使用 |
dns | number | オプショナル | DNS解決時間。ホスト名の解決に必要な時間。タイミングが現在の要求に適用されない場合は、-1を使用 |
connect | number | オプション | TCP接続の作成に必要な時間。タイミングが現在の要求に適用されない場合は、-1を使用 |
send | number | 必須 | HTTPリクエストをサーバーに送信するのに必要な時間 |
wait | number | 必須 | サーバーからの応答を待っている時間 |
receive | number | 必須 | サーバー(またはキャッシュ)からレスポンス全体を読み取るのに必要な時間 |
ssl | number | オプション | SSL/TLSネゴシエーションに必要な時間。このフィールドが定義されている場合、時間も接続フィールドに含まれます(HAR 1.1との後方互換性を確保するため)。タイミングが現在のrequestに適用されない場合は、-1を使用 |
comment | string | オプション | ユーザーまたはアプリケーションによって提供されるコメント |
send, wait, receiveは任意ではなく、非負の値を持っている必要があります。
エクスポートツールは、「blocked」、「dns」、「connect」、および「ssl」、
を提供できない場合はすべての要求のタイミングを省略することができます。
これらのタイミングを提供できるツールは、適用されない場合、値を-1に設定できます。
たとえば、既存の接続を再利用するrequestの場合、connectは-1になります。
また、requestの時間値は、このセクションで提供されるタイミングの合計と等しくなければなりません(-1の場合を除く)。
entry.time == entry.timings.blocked + entry.timings.dns
- entry.timings.connect + entry.timings.send
- entry.timings.wait + entry.timings.receive;
HARのカスタムフィールドに関して
次のルールを適用することで、カスタムフィールドを出力形式に追加することが可能です。
-
カスタムフィールドとカスタム要素はアンダースコアで始まらなければなりません
(スペックフィールドはアンダースコアで始まらないでください。 -
パーサーは、ファイルを読み込む同じツールによってファイルが書き込まれなかった場合、
すべてのカスタムフィールドと要素を無視する必要があります。 -
パーサーは、マイナーバージョン番号が書き込まれた最大マイナーバージョンより大きいため、
解析方法がわからない、すべての非カスタムフィールドを無視する必要があります。 -
パーサーは、仕様の特定のバージョンに存在しないことがわかっている
非カスタムフィールドを含むファイルを拒否できます。
最後に
拙筆ながら、今回はHARについて記載しました。
ケースによってはHARが全く役に立たないときもありますし、
HARによって劇的に問題解決が早くなる時もあります。
今回の記事が新人や若手のエンジニアのみなさんに伝えたいのは、
あくまでの報告の材料の一つとしてHARがあって、だいたいこんなことがわかる。
ということでして、そんなものがあったなぁ...と頭の片隅にでも置いていただければと思います。
この記事が新人や若手のエンジニアのみなさんに少しでも参考になったのなら幸いです。