如何解析http头的第一行?

时间:2012-03-25 21:10:18

标签: javascript http parameters

是否有任何javascript函数来解析http头的第一行?

GET /page/?id=173&sessid=mk9sa774 HTTP/1.1

网址已编码。

我想得到一个像这样的对象:

{
"method" : "GET",
"url" : "/page/",
"parameters": {
  "id" : 173,
  "sessid" : "mk9sa774"
  }
}

我搜索了很多,但我没有找到任何有用的东西。

提前感谢,

1 个答案:

答案 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