LoginSignup
43
29

More than 1 year has passed since last update.

なんかバグが起きました… そんな時はHAR(HTTP Archive)!

Last updated at Posted at 2020-01-08

ある日の日常

報告者Aさん < ◯◯のページで処理が失敗して先に進めません…
報告者Bさん < △△のページのレイアウトがおかしいです…
報告者Cさん < ××のページが重すぎて開けません…

私 < ちょっと何言ってるかわからないです🤔

とならないためにも、先輩や関連部署、関連企業などに報告・相談する人も
報告・相談される人もお互いが少しでも幸せになるために、この文章を書きました。

報告を受ける側はどんな情報が知りたいか

そもそも報告・相談される人はどんな情報が知りたいでしょうか。
ここで何点か、知りたいことをあげてみると、

  1. パフォーマンスに問題があると判断したのはなぜか

    • 画面が表示されるまでの遅さ
    • 特定の機能が動作するまでの遅さ
    • 意図せぬエラー表示
  2. 該当の画面や該当の機能は期待通りのパフォーマンスで機能していた実績はあるか

    • 何日前までは期待通りだったのか?
    • その後どんな修正を加えたのか
  3. その問題は、画面が表示されるまでの遅さの場合、定量的なもので表現するとどれくらいか

  4. この問題はほかの人にも影響しているか

  5. どういう操作をしたのか

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ファイルの取得に関しての推奨事項

  1. 同じサービスに置いて複数画面が存在している場合、
    パフォーマンスの問題の原因を切り分けやすくするため、
    影響がある(又はありそう)なページと、影響がないページ
    両方のHARファイルを取得したほうが良いです。

  2. 常に起きる問題か、確率で起きる問題なのかを判断しやすくするため
    HARファイルを取得する時は複数回HARファイルを生成した方が良いです。

  3. 特定のJavascriptなどの発火によるリクエストの分析を行う場合などでも、
    分析対象の問題に先立って行われたリクエストが影響が及んでいる可能性があるので
    できるようにページ全体の読み込みをキャプチャするようにしたほうが良いです。

HARファイルの注意事項

  1. HAR ファイルを取得したユーザーはそのHARを取得したアカウントに
    なりすますことが比較的に容易なので注意してください。

  2. 電話番号や住所などの個人情報や、パスワード、クレジットカード番号など
    機密情報が含まれていないことをよく確認してください。

ブラウザでのHARファイルの取得方法

Google Chromeの場合

  1. パフォーマンスを計測したいページに移動

  2. デベロッパーツールを開く
    Macの場合: ⌘ + ⌥ + iの同時押し ※はcommandキー, はoptionキー
    Linuxの場合: Ctrl + Shift + i
    Windowsの場合: F12

  3. 該当ページのリソースのキャッシュを防ぐためデベロッパーツールのウィンドウで
    [Network] タブを選び、上部バーに表示される
    [Disable cache] のチェックボックスにチェックを入れてオンにします。

  4. ページを更新し、ブラウザとサーバーの間のトラフィックの取得を開始します。

  5. 問題が発生する or 原因となった操作を再現します。

  6. 保存したいリクエストにマウスカーソルを合わせて右クリックし、
    [Save all as HAR with content] をクリックします。

  7. 適当な名前をつけて [保存] をクリック

Firefox

  1. パフォーマンスを計測したいページに移動

  2. 開発ツールのネットワークモニターを開く
    Macの場合: ⌘ + ⌥ + eの同時押し ※はcommandキー, はoptionキー
    Linuxの場合: Ctrl + Shift + e
    Windowsの場合: Ctrl + Shift + e

  3. 該当ページのリソースのキャッシュを防ぐため キャッシュ永続化
    のチェックボックスチェックを入れてオンにします。

  4. ページを更新し、ブラウザとサーバーの間のトラフィックの取得を開始します。

  5. 問題が発生する or 原因となった操作を再現します。

  6. ネットワークモニター内の任意のリクエストに合わせて右クリックし、
    [HAR 形式ですべてを保存] をクリックします。

HARを取得してみる

タイトル 阿部 寛のホームページ
URL http://abehiroshi.la.coocan.jp

取得したHAR

JSON全体
abehiroshi.la.coocan.jp.har
{
  "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\">&nbsp;</td>\n          <td width=\"230\">阿部 寛(あべ ひろし)<br></td>\n        </tr>\n        <tr>\n          <td>&nbsp;</td>\n          <td>生年月日 1964年6月22日<br></td>\n        </tr>\n        <tr>\n          <td>&nbsp;</td>\n          <td>血液型 A型<br></td>\n        </tr>\n        <tr>\n          <td>&nbsp;</td>\n          <td><a href=\"prof/prof.htm\">プロフィール</a></td>\n        </tr>\n        <tr>\n          <td>&nbsp;</td>\n          <td>&nbsp;</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>&nbsp;</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\">&nbsp;</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\">&nbsp;</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\">&nbsp;</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\">&nbsp;</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のファイルを読み込ませる必要があります。

HTTP Archive Viewer.png

G Suite Toolbox HAR Analyzer

G Suite Toolboxにある、HAR analizerです。
HARファイルを読み込ませることができ、全体的に見やすく、
request(リクエストタブ)とresponse(応答タブ)が別れているので、
どちらかに注視したい時に楽です。またCookieやタイミングが別タブでまとまっているのも見やすいです。

G Suite Toolbox HAR Analyzer.png

HTTP Archive Viewer

HTTP Archive Viewer の chromeの拡張版です。
見え方はWeb版の HTTP Archive Viewerとほぼ変わりはありません。

ブラウザ版とは違う点はHARのファイルを文字列として貼り付けるだけじゃなく、
ドラッグ + ドロップや選択してHARファイル読み込ませることができます

HTTP Archive Viewer(chrome).png

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があって、だいたいこんなことがわかる。
ということでして、そんなものがあったなぁ...と頭の片隅にでも置いていただければと思います。

この記事が新人や若手のエンジニアのみなさんに少しでも参考になったのなら幸いです。

43
29
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
29