diff --git a/src/test-data/capture-har_redirect-loop.har b/src/test-data/capture-har_redirect-loop.har new file mode 100644 index 00000000..9558f75e --- /dev/null +++ b/src/test-data/capture-har_redirect-loop.har @@ -0,0 +1,983 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "capture-har", + "version": "0.3.2" + }, + "entries": [ + { + "startedDateTime": "2017-03-08T16:14:18.727Z", + "time": 23.071817, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/redirect/25", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "249" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/24" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 249, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/24", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 23.071817 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.751Z", + "time": 10.202541, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/24", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/23" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/23", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 10.202541 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.761Z", + "time": 8.33777, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/23", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/22" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/22", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 8.33777 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.769Z", + "time": 6.515225, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/22", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/21" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/21", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 6.515225 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.776Z", + "time": 8.86667, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/21", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/20" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/20", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 8.86667 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.785Z", + "time": 8.127766, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/20", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/19" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/19", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 8.127766 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.793Z", + "time": 8.206482, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/19", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/18" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/18", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 8.206482 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.802Z", + "time": 6.609548, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/18", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/17" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/17", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 6.609548 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.808Z", + "time": 7.505908, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/17", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/16" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/16", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 7.505908 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.816Z", + "time": 6.999412, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/16", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/15" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/15", + "headersSize": -1, + "bodySize": -1 + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 6.999412 + } + }, + { + "startedDateTime": "2017-03-08T16:14:18.823Z", + "time": 7.506675, + "request": { + "method": "GET", + "url": "https://www.httpbin.org/relative-redirect/15", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "www.httpbin.org" + }, + { + "name": "user-agent", + "value": "woobot/2.0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 302, + "statusText": "FOUND", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "server", + "value": "nginx" + }, + { + "name": "date", + "value": "Wed, 08 Mar 2017 16:14:18 GMT" + }, + { + "name": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "close" + }, + { + "name": "location", + "value": "/relative-redirect/14" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "access-control-allow-credentials", + "value": "true" + } + ], + "content": { + "size": 0, + "mimeType": "text/html" + }, + "redirectURL": "https://www.httpbin.org/relative-redirect/14", + "headersSize": -1, + "bodySize": -1, + "_error": { + "message": "Max redirects exceeded", + "code": "MAXREDIRECTS" + } + }, + "cache": {}, + "timings": { + "send": 0, + "receive": 0, + "wait": 7.506675 + } + } + ] + } +} \ No newline at end of file diff --git a/src/ts/transformers/har-heuristics.ts b/src/ts/transformers/har-heuristics.ts index e4457e7f..207b9018 100644 --- a/src/ts/transformers/har-heuristics.ts +++ b/src/ts/transformers/har-heuristics.ts @@ -79,6 +79,10 @@ function isPush(entry: Entry): boolean { */ export function documentIsSecure(data: Entry[]) { const rootDocument = data.filter((e) => !e.response.redirectURL)[0]; + // check if request is a redirect chain + if (rootDocument === undefined) { + return (data.length > 0) ? isSecure(data[0]) : false; + } return isSecure(rootDocument); }