2012-03-25 12 views
4

Gibt es JavaScript-Funktion, um die erste Zeile des HTTP-Headers zu parsen?Wie analysiert man die erste Zeile des http-Headers?

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

Die URL ist codiert.

Ich mag würde ein Objekt, wie diese erhalten:

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

suchte ich eine Menge, aber ich habe nichts nützlich gefunden.

Vielen Dank im Voraus,

+0

In welcher Umgebung? Der Browser? –

+0

ja, in Javascript –

+1

haben Sie die Zeile als JavaScript-String? – boisvert

Antwort

6

Zuerst auf Räume aufteilen:

var lineParts = line.split(' '); 

Jetzt können Sie die Methode, unparsed Pfad erhalten, und Version:

var method = lineParts[0]; 
var path = lineParts[1]; 
var version = lineParts[2]; 

Sie dann kann den Pfad in die Abfragezeichenfolge und Nicht-Abfragezeichenfolge teilen:

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); 
} 

Wenn es eine Abfrage-String ist, können wir es dann aufgeteilt in key=value Strings:

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

Dann können wir sie unescape und sie in ein Objekt stopfen:

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; 
}); 

Wenn Sie wirklich wollte, könnten Sie dann alle diese Daten in ein Objekt:

return { 
    method:  method, 
    url:  url, 
    version: version, 
    parameters: parameters 
}; 

Wenn Sie sich in einer Browserumgebung befinden, ist dies die einzige Möglichkeit. Wenn Sie Node.JS verwenden, it can deal with the URL parsing for you.

Verwandte Themen