[フレーム]
Last Updated: February 25, 2016
·
4.343K
· deiu

Parsing a Link header in Javascript

Basically, let’s say you have a bunch of Link headers in your response:

Link: <http://example.org/.meta>; rel=meta, <http://example.org/.acl>; rel=acl

All you need to do now is to pass them to the parser like this:

var r = parseLinkHeader(xhr.getResponseHeader('Link'));

Then, based on the rel type you are interested in, you just get the href value:

r['acl']['href'] -- outputs http://example.org/.acl

Gist source here

// Unquote string (utility)
function unquote(value) {
 if (value.charAt(0) == '"' && value.charAt(value.length - 1) == '"') return value.substring(1, value.length - 1);
 return value;
}

// Parse a Link header
function parseLinkHeader(header) {
 var linkexp = /<[^>]*>\s*(\s*;\s*[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*")))*(,|$)/g;
 var paramexp = /[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*"))/g;

 var matches = header.match(linkexp);
 var rels = new Object();
 for (i = 0; i < matches.length; i++) {
 var split = matches[i].split('>');
 var href = split[0].substring(1);
 var ps = split[1];
 var link = new Object();
 link.href = href;
 var s = ps.match(paramexp);
 for (j = 0; j < s.length; j++) {
 var p = s[j];
 var paramsplit = p.split('=');
 var name = paramsplit[0];
 link[name] = unquote(paramsplit[1]);
 }

 if (link.rel != undefined) {
 rels[link.rel] = link;
 }
 }

 return rels;
}

AltStyle によって変換されたページ (->オリジナル) /