是否有任何javascript函数来解析http头的第一行?
GET /page/?id=173&sessid=mk9sa774 HTTP/1.1
网址已编码。
我想得到一个像这样的对象:
{
"method" : "GET",
"url" : "/page/",
"parameters": {
"id" : 173,
"sessid" : "mk9sa774"
}
}
我搜索了很多,但我没有找到任何有用的东西。
提前感谢,
答案 0 :(得分:7)
首先你可以拆分空格:
var lineParts = line.split(' ');
现在您可以获取方法,未解析的路径和版本:
var method = lineParts[0];
var path = lineParts[1];
var version = lineParts[2];
然后,您可以将路径拆分为查询字符串和非查询字符串部分:
var queryStringIndex = path.indexOf('?');
var url, queryString;
if(queryStringIndex == -1) {
url = path, queryString = '';
}else{
url = path.substring(0, queryStringIndex);
// I believe that technically the query string includes the '?',
// but that's not important for us.
queryString = path.substring(queryStringIndex + 1);
}
如果有查询字符串,我们可以将其拆分为key=value
字符串:
var queryStringParts = [];
if(queryStringIndex != -1) {
queryStringParts = queryString.split('&');
}
然后我们可以将它们取消并将它们填充到一个对象中:
var parameters = {};
queryStringParts.forEach(function(part) {
var equalsIndex = part.indexOf('=');
var key, value;
if(equalsIndex == -1) {
key = part, value = "";
}else{
key = part.substring(0, equalsIndex);
value = part.substring(equalsIndex + 1);
}
key = decodeURIComponent(key);
value = decodeURIComponent(value);
parameters[key] = value;
});
如果您真的想要,那么您可以将所有数据放入对象中:
return {
method: method,
url: url,
version: version,
parameters: parameters
};
如果您在浏览器环境中,这是唯一的方法。如果您使用的是Node.JS,请it can deal with the URL parsing for you。