轉:HAR(HTTP Archive)規範

來源:互聯網
上載者:User

標籤:能力   type   rssi   最新   groups   tle   允許   min   響應   

      HAR(HTTP Archive),是一個用來儲存HTTP請求/響應資訊的通用檔案格式,基於JSON。這個格式的出現可以使HTTP監測工具以一種通用的格式匯出所收集的資料,這些資料可以被其他支援HAR的HTTP分析工具(包括Firebug,httpwatch,Fiddler等)所使用,來分析網站的效能瓶頸。目前HAR規範最新版本為HAR 1.2。HAR檔案必須是UTF-8編碼,有無BOM無所謂。

查看har檔案資料的URL:http://www.softwareishard.com/har/viewer/

HAR資料結構:
一個HAR檔案就是一個JSON對象,如下:

{
    "log": {
        "version" : "1.2",
        "creator" : {},
        "browser" : {},
        "pages": [],
        "entries": [],
        "comment": ""
    }
}
version [string] – 版本,預設為1.1。
creator [object] – 建立HAR檔案的程式名稱和版本資訊。
browser [object, 可選] – 瀏覽器的名稱和版本資訊。
pages [array, 可選] – 頁面列表,如果應用不支援按照page分組,可以省去此欄位。
entries [array] – 所有HTTP請求的列表。
comment [string, 可選](new in 1.2) – 注釋。
註:每個頁面對應一個 對象,每個HTTP請求對應一個對象。如果HTTP的監測分析工具不能把請求按照page分組,那麼為空白。
<creator> & <browser>

這兩個對象的結構是一樣的

"creator": {
    "name": "Firebug",
    "version": "1.6",
    "comment": "",
}

"browser": {
    "name": "Firefox",
    "version": "3.6",
    "comment": ""
}
name [string] – HAR產生工具或者瀏覽器的名稱。
version [string] – HAR產生工具或者瀏覽器的版本。
comment [string, 可選](new in 1.2) – 注釋。
<pages>

這個對象儲存了頁面列表,格式如下:

"pages": [
    {
        "startedDateTime": "2009-04-16T12:07:25.123+01:00",
        "id": "page_0",
        "title": "Test Page",
        "pageTimings": {...},
        "comment": ""
    }
]
startedDateTime [string] – 頁面開始載入的時間(格式ISO 8601 – YYYY-MM-DDThh:mm:ss.sTZD, 例如2009-07-24T19:20:30.45+01:00)。
id [string] – page的唯一標示,entry會用到這個id來和page關聯在一起。
title [string] – 頁面標題。
pageTimings[object] – 頁面載入過程中詳細的時間資訊。
comment [string, 可選](new in 1.2) – 注釋。
<pageTimings>

這個對象描述了在頁面載入過程中各個事件發生的時間點。所有的時間都是以毫秒計算的。如果有的時間無法計算出來,那麼相應欄位置為-1。

"pageTimings": [
    {
        "onContentLoad": 1720,
        "onLoad": 2500,
        "comment": ""
    }
]
onContentLoad [number, 可選] – 頁面內容載入時間,相對於頁面開始載入時間的毫秒數(page.startedDateTime)。如果時間不適用於當前的請求,那麼置為-1。
onLoad [number,可選] – 頁面載入時間(即onLoad事件觸發的時間)。相對於頁面開始載入時間的毫秒數(page.startedDateTime)。如果時間不適用於當前的請求,那麼置為-1。
comment [string, 可選](new in 1.2) – 注釋。
由於不同瀏覽器實現不一樣,onContentLoad屬性可能代表DOMContentLoad事件觸發,也可能代表document.readyState等於interactive。

<entries>

這個對象包含了一個數組,數組中每個元素的內容就是一個HTTP請求的相應資訊。用startedDateTime來排序的話可以加快資料匯出的速度。HAR分析工具要確保此數組是按照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, unique, 可選] – 頁面id,如果不支援按照page分組,那麼欄位為空白。
startedDateTime [string] – 請求開始時間 (格式ISO 8601 – YYYY-MM-DDThh:mm:ss.sTZD)。
time [number] – 請求消耗的時間,以毫秒為單位。這個值是timings對象中所有可用(值不為-1) timing的和。
request [object] – 請求的詳細資料。
response [object] – 響應的詳細資料。
cache [object] – 緩衝使用方式的資訊。
timings [object] – 請求/響應過程(round trip)的詳細時間資訊。
serverIPAddress [string, 可選](new in 1.2) – 伺服器IP地址。
connection [string, 可選](new in 1.2)– TCP/IP串連的唯一標示。 如果程式不支援,直接忽略此欄位。
comment [string, optional](new in 1.2) – 注釋。
<request>

這個對象包含了請求的詳細資料

"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,POST,…)。
url [string] – 請求的絕對URL(fragments are not included)。
httpVersion [string] – 請求HTTP版本。
cookies [array] – cookie列表。
headers [array] – header列表。
queryString [object] – 查詢字串資訊。
postData [object, 可選] – Post資料資訊。
headersSize [number] – HTTP要求標頭的位元組數。如果不可用,設定為-1。
bodySize [number] – 請求body位元組數(POST資料)。如果不可用,設定為-1。
comment [string, 可選](new in 1.2)– 注釋。
<response>

這個對象包含響應的詳細資料。

"response": {
    "status": 200,
    "statusText": "OK",
    "httpVersion": "HTTP/1.1",
    "cookies": [],
    "headers": [],
    "content": {},
    "redirectURL": ",
    "headersSize" : 160,
    "bodySize" : 850,
    "comment" : ""
}
status [number] – 響應狀態。
statusText [string] – 響應狀態原因。
httpVersion [string] – HTTP版本。
cookies [array] – cookie列表。
headers [array] – header列表。
content [object] – 響應內容的詳細資料。
redirectURL [string] – Location回應標頭中的重新導向URL。
headersSize [number]* – HTTP要求標頭的位元組數。如果不可用,設定為-1。
bodySize [number] – 接收的body位元組數。如果響應來自緩衝(304),那麼設定為0。如果不可用,設定為-1。
comment [string, optional](new in 1.2) – 注釋。
註:headersSize – 回應標頭大小隻對從伺服器接收到的header進行計算。被瀏覽器加上的header不計算在內,但是會加在header列表中。

<cookies>

這個對象包含了所有的cookie(在和中被使用)。

"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 Path。
domain [string, 可選] – cookie網域名稱。
expires [string, 可選] – cookie到期時間。(格式ISO 8601 – YYYY-MM-DDThh:mm:ss.sTZD, 例如2009-07-24T19:20:30.123+02:00)。
httpOnly [boolean, 可選] – 如果cookie只是在HTTP下有效,此值設定為true,否則設定為false。
secure [boolean, 可選](new in 1.2) – 如果cookie通過ssl傳送,此值設定為true,否則設定為false。
comment [string, 可選](new in 1.2) – 注釋。
<headers>

這個對象包含了所有的header(可以在lt;request>and<response>中使用)

"headers": [
    {
        "name": "Accept-Encoding",
        "value": "gzip,deflate",
        "comment": ""
    },

    {
        "name": "Accept-Language",
        "value": "en-us,en;q=0.5",
        "comment": ""
    }
]
<queryString>

這個對象包含了查詢字串中所有的paramter-value對(嵌在對象中)。

"queryString": [
    {
        "name": "param1",
        "value": "value1",
        "comment": ""
    },

    {
        "name": "param1",
        "value": "value1",
        "comment": ""
    }
]
<postData>

這個對象描述了POST的資料(嵌在對象中)

"postData": {
    "mimeType": "multipart/form-data",
    "params": [],
    "text" : "plain posted data",
    "comment": ""
}
mimeType [string] – POST資料的MIME類型。
params [array] – POST參數列表 (in case of URL encoded parameters)。
text [string] – POST資料的純文字形式(Plain text posted data)。
comment [string, optional](new in 1.2) – 注釋。
注意:text和params欄位是互斥的。
<params>

POST請求參數列表(嵌在 對象中)

"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, 可選](new in 1.2) – 注釋。
<content>

這個對象描述了響應內容的詳細情況(嵌在 對象中)

"content": {
    "size": 33,
    "compression": 0,
    "mimeType": "text/html; charset="utf-8",
    "text": "n",
    "comment": ""
}
size [number] – 返回內容的位元組數。如果內容沒有被壓縮,應該和response.bodySize相等;如果被壓縮,那麼會大於response.bodySize。
compression [number, 可選] – 節省的位元組數。如果無法提供此資訊,則忽略此欄位。
mimeType [string] – 響應文本的MIME類型 (Content-Type回應標頭的值)。MIMIE類型的字元集也包含在內。
text [string, 可選] – 從伺服器返回的響應body或者從瀏覽器緩衝載入的內容。這個欄位只能用文本型的內容來填充。欄位內容可以是HTTP decoded(decompressed & unchunked)的文本,或者是經編碼(例如,base64)過的響應內容。如果資訊不可用,忽略此欄位。
encoding [string, 可選](new in 1.2) – 響應內容的編碼格式,例如”base64″。如果text欄位的內容是經過了HTTP解碼(decompressed & unchunked)的,那麼忽略此欄位。
comment [string, optional](new in 1.2) – 注釋。
在設定text欄位之前,HTTP響應內容已經完成瞭解碼(decompressed &  unchunked),然後把原始字元編碼轉換成UTF-8。欄位內容同樣可以使用base64進行編碼,但是HAR工具必須有解碼base64的能力。對欄位編碼還可以把二進位內容包含進HAR檔案中。

這有另一個例子,原始響應內容是:

"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, 可選](new in 1.2) – 注釋。
如果緩衝資訊為空白,那麼對象如下(或者也可以直接刪掉cache這個欄位):

"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, 可選](new in 1.2) – 注釋
<timings>

這個對象描述了請求/響應過程的各個階段。時間都是以毫秒為單位。

"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, 可選](new in 1.2) – SSL/TLS驗證花費時間。如果這個欄位被定義了,那麼這個時間也會被包含進connect欄位中(為了向後相容HAR1.1)。如果時間對於當前請求不可用,置為-1。
comment [string, 可選](new in 1.2) – 注釋。
send,wait,receive時間是必須提供的,並且不能為負數。匯出工具如果不能提供blocked,dns,connect和ssl等時間,那麼這些時間可以被忽略。如果工具可以提供這些時間,但是不適用的話,可以把這些值設定為-1。 例如,當請求使用了一個存在的串連,connect會被置為-1。

一個請求所花的時間等於這些時間的和,不包括值為-1的。

entry.time == entry.timings.blocked + entry.timings.dns + entry.timings.connect + entry.timings.send + entry.timings.wait + entry.timings.receive

自訂欄位

HAR規範允許自訂欄位,但是要遵循如下規則:

自訂欄位(field)和元素(element)必須以底線開頭(規範中的欄位必須不能以底線開頭)
HAR工具必須忽略所有自訂欄位和元素,如果這個HAR檔案不是當前HAR工具產生的。
當HAR工具不知道如何解析非自訂欄位的時候,忽略它們。
當檔案包含了已經被廢棄的非自訂欄位時候,HAR工具可以拒絕解析此檔案。
版本格式

HAR規範的版本號碼有如下規則:
<主要版本號>.<副版本號碼>
主要版本號表示規範的向後相容性,副版本號碼表示增量修改。所以,任何向後相容的修改都會增加副版本號碼。如果一個存在的欄位被廢棄了,那麼主要版本號要增加(例如2.0)。

Examples:
1.2 -> 1.3(向後相容)

1.111 -> 1.112 (向後相容)

1.5 -> 2.0 (2.0不相容1.5)

如果HAR工具只支援HAR1.1,那麼以下的代碼可以被用來檢測不被相容的版本。

if (majorVersion != 1 || minorVersion < 1)
{
    throw “Incompatible version”;
}
這個例子中,如果被解析檔案的版本為0.8,0.9,1.0等,那麼工具會拋出異常,但是1.1, 1.2, 1.112等版本可以被解析。2.x版本直接拒絕解析。

原文:http://www.softwareishard.com/blog/har-12-spec/

Google Group: http://groups.google.com/group/http-archive-specification【需FQ】

(完)

作者: JeremyWei | 可以轉載, 但必須以超連結形式標明文章原始出處和作者資訊及著作權聲明

轉載自: http://weizhifeng.net/har-12-spec-chinese-edtion.html

轉:HAR(HTTP Archive)規範

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.