Ajax-Anwendung in Second Life
Seite 5: llHTTPRequest()
llHTTPRequest()
und http_response()
Die Signatur der Funktion llHTTPRequest()
lautet wie folgt:
key llHTTPRequest(string url, list parameters, string body)
url
ist eine HTTP- oder HTTPS-Adresse eines Webservers außerhalb von Second Life, body
im Fall von POST
- oder PUT
-Anfragen der zum Server geschickte Rumpf der HTTP-Nachricht. Bei parameters
handelt es sich um eine Key-Value-Liste mit folgenden optionalen Keys und den jeweiligen Vorgabewerten:
HTTP_METHOD ("GET")
: Angabe der HTTP-Methode; laut LSL-Wiki unterstützt die Funktion die Methoden GET
, POST
, PUT
, DELETE
.
HTTP_MIMETYPE ("text/plain;charset=utf-8")
: entspricht dem Content-Type-Header von HTTP. Ein Abweichen vom Vorgabewert kann etwa sinnvoll sein, um eine Formulareingabe (mit dem Wert application/x-www-form-urlencoded
) zu simulieren. Die Methode könnte in diesem Falle POST
sein, und die vermeintlichen Formulardaten sollten korrekt kodiert im Body-Parameter von llHTTPRequest()
stehen. Für die Kodierung steht die Funktion llEscapeURL()
zur Verfügung.
HTTP_BODY_MAXLENGTH ("2048")
: maximale Länge der erhaltenen HTTP-Nachricht. Laut Wiki kann man derzeit keinen anderen Wert als den Vorgabewert setzen.
HTTP_VERIFY_CERT ("TRUE")
: gibt an, ob für HTTPS-Verbindungen nur Zertifikate bekannter "certificate authorities" akzeptiert werden (Vorgabeverhalten). Falls der Wert auf FALSE
gesetzt ist, akzeptiert llHTTPRequest()
jedes SSL-Zertifikat.
llHTTPRequest()
liefert einen Wert vom Typ key
zurück, der die Anfrage eindeutig identifiziert. Nach Beendigung der Anfrage wird dieser Wert an den Event-Handler http_response()
übergeben. Falls die an llHTTPRequest()
übergebenen Parameter zu einem Fehler führen, ist der Rückgabewert gleich NULL_KEY
.
Ein HTTP-Request aus Second Life ist serverseitig durch die Angabe Second Life LSL/VERSION (http://secondlife.com/)
als HTTP-User-Agent zu erkennen. VERSION
steht für die jeweils aktuelle Versionsnummer. Darüber hinaus schickt der SL-Request noch einige nicht Standard-HTTP-Header an den Server. Darunter die UUID des kommunizierenden SL-Objekts, Name und Key des Avatars, dem das Objekt gehört, sowie SL-Geokoordinaten.
http_response()
Der Event-Handler http_response()
reagiert auf eingehende HTTP-Nachrichten und entspricht ungefähr dem onReadyStateChange
des XMLHTTPRequest
-Objekts in Javascript. Die Signatur lautet:
http_response(key request_id, integer status, list
metadata, string body)
Die request_id
ist der von llHTTPRequest()
gelieferte Key, der den Request identifiziert. status
repräsentiert einen Integerwert und entspricht dem HTTP-Status (beispielsweise 200 für erfolgreiche Anfrage, 404 für ‚ÄûNot found‚Äú). Bei metadata
handelt es sich um eine Liste von Key-Value-Paaren. Derzeit gibt es nur einen Key: HTTP_BODY_TRUNCATED
. Dessen Integerwert gibt an, an welcher Byte-Position die vom Server geschickte Nachricht abgeschnitten wurde. Das kann passieren, falls die Nachricht länger als der oben genannte HTTP_BODY_MAXLENGTH
-Wert ist. body
enthält schließlich die Nutzlast. Falls der Content-Type kein text/*
-Typ ist (etwa text/plain
), steht in body
die Zeichenkette "Unsupported or unknown Content-Type". Falls SL die Zeichenkodierung nicht unterstützt, enthält body
den Hinweis "Unsupported or unknown character set".