如何解析http头的第一行?

Dan*_*Fox 4 javascript parameters http

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

GET /page/?id=173&sessid=mk9sa774 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

网址已编码.

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

{
"method" : "GET",
"url" : "/page/",
"parameters": {
  "id" : 173,
  "sessid" : "mk9sa774"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢,

ick*_*fay 7

首先你可以拆分空格:

var lineParts = line.split(' ');
Run Code Online (Sandbox Code Playgroud)

现在您可以获取方法,未解析的路径和版本:

var method  = lineParts[0];
var path    = lineParts[1];
var version = lineParts[2];
Run Code Online (Sandbox Code Playgroud)

然后,您可以将路径拆分为查询字符串和非查询字符串部分:

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);
}
Run Code Online (Sandbox Code Playgroud)

如果有查询字符串,我们可以将其拆分为key=value字符串:

var queryStringParts = [];
if(queryStringIndex != -1) {
    queryStringParts = queryString.split('&');
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以将它们取消并将它们填充到一个对象中:

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;
});
Run Code Online (Sandbox Code Playgroud)

如果你真的想,那么你可以将所有数据放入一个对象:

return {
    method:     method,
    url:        url,
    version:    version,
    parameters: parameters
};
Run Code Online (Sandbox Code Playgroud)

如果您在浏览器环境中,这是唯一的方法.如果您正在使用Node.JS,它可以为您处理URL解析.