<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.wavecdn.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nfr</id>
	<title>WaveCDN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.wavecdn.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nfr"/>
	<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php/Special:Contributions/Nfr"/>
	<updated>2026-05-08T15:52:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=305</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=305"/>
		<updated>2014-10-04T14:03:57Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun einige häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Set-Cookie-Header aus der Backend-Antwort entfernen'''&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Webuser-Anfrage mit Cookie cachbar machen'''&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''URL umschreiben'''&lt;br /&gt;
&lt;br /&gt;
Ferner ist es möglich mit einer Erweiterung die angefragte URL umzuschreiben.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_request_uri('/rewritten-url')&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=304</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=304"/>
		<updated>2014-07-21T10:13:20Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get(name)&lt;br /&gt;
|Gibt eine die benutzerdefinierte Variable mit dem angegebenen Namen zurück. Benutzerdefinierte Variablen behalten Ihre Gültigkeit über alle Anfragenschritte hinweg. D.h. auf Variablen, die in wavecdn_receive() gesetzt wurden, können in späteren Schritten abgerufen werden.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set(name, value)&lt;br /&gt;
|Setzt die benutzerdefinierte Variable mit dem angegebenen Namen und dem angegebenen Wert. Die benutzerdefinierte Variable muss nicht im selben Schritt, sondern kann auch in vorherigen Schritten gesetzt worden sein.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_uri(uri)&lt;br /&gt;
|Ändert die angefragte URI des Webusers.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet. Siehe get_request_headers() für das erwartete Format.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=303</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=303"/>
		<updated>2014-07-18T14:01:33Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun einige häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Set-Cookie-Header aus der Backend-Antwort entfernen'''&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Webuser-Anfrage mit Cookie cachbar machen'''&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''URL umschreiben'''&lt;br /&gt;
&lt;br /&gt;
Ferner ist es möglich mit einer Erweiterung die angefragte URL umzuschreiben.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_request_uri('/rewritten-url')&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=302</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=302"/>
		<updated>2014-07-18T13:58:22Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Set-Cookie-Header aus der Backend-Antwort entfernen'''&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Webuser-Anfrage mit Cookie cachbar machen'''&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''URL umschreiben'''&lt;br /&gt;
&lt;br /&gt;
Ferner ist es möglich mit einer Erweiterung die angefragte URL umzuschreiben.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_request_uri('/rewritten-url')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=301</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=301"/>
		<updated>2014-03-12T15:56:31Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get(name)&lt;br /&gt;
|Gibt eine die benutzerdefinierte Variable mit dem angegebenen Namen zurück. Benutzerdefinierte Variablen behalten Ihre Gültigkeit über alle Anfragenschritte hinweg. D.h. auf Variablen, die in wavecdn_receive() gesetzt wurden, können in späteren Schritten abgerufen werden.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set(name, value)&lt;br /&gt;
|Setzt die benutzerdefinierte Variable mit dem angegebenen Namen und dem angegebenen Wert. Die benutzerdefinierte Variable muss nicht im selben Schritt, sondern kann auch in vorherigen Schritten gesetzt worden sein.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet. Siehe get_request_headers() für das erwartete Format.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=300</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=300"/>
		<updated>2014-03-06T13:18:48Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet. Siehe get_request_headers() für das erwartete Format.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=File:Request-model.png&amp;diff=299</id>
		<title>File:Request-model.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=File:Request-model.png&amp;diff=299"/>
		<updated>2014-02-25T15:03:57Z</updated>

		<summary type="html">&lt;p&gt;Nfr: Nfr uploaded a new version of &amp;amp;quot;File:Request-model.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=298</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=298"/>
		<updated>2014-02-25T12:00:29Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet. Siehe get_request_headers() für das erwartete Format.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=297</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=297"/>
		<updated>2014-01-09T11:18:54Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=296</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=296"/>
		<updated>2014-01-09T10:02:02Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Webuser-Anfrage mit Cookie cachbar machen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Set-Cookie-Header aus der Backend-Antwort entfernen'''&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Webuser-Anfrage mit Cookie cachbar machen'''&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=295</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=295"/>
		<updated>2014-01-09T10:01:47Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Set-Cookie-Header aus der Backend-Antwort entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Set-Cookie-Header aus der Backend-Antwort entfernen'''&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
==== Webuser-Anfrage mit Cookie cachbar machen ====&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=294</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=294"/>
		<updated>2014-01-09T10:01:30Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Cookie-Header aus Webuser-Anfrage entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
==== Set-Cookie-Header aus der Backend-Antwort entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
==== Webuser-Anfrage mit Cookie cachbar machen ====&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=293</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=293"/>
		<updated>2014-01-09T10:01:11Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Webuser-Anfrage mit Cookie cachbar machen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
==== Cookie-Header aus Webuser-Anfrage entfernen ====&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
==== Set-Cookie-Header aus der Backend-Antwort entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
==== Webuser-Anfrage mit Cookie cachbar machen ====&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=292</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=292"/>
		<updated>2014-01-09T10:00:58Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Set-Cookie-Header aus der Backend-Antwort entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
==== Cookie-Header aus Webuser-Anfrage entfernen ====&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
==== Set-Cookie-Header aus der Backend-Antwort entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=291</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=291"/>
		<updated>2014-01-09T10:00:48Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Cookie-Header aus Webuser-Anfrage entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
==== Cookie-Header aus Webuser-Anfrage entfernen ====&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Set-Cookie-Header aus der Backend-Antwort entfernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=290</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=290"/>
		<updated>2014-01-09T10:00:37Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
===Cookie-Header aus Webuser-Anfrage entfernen ===&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Set-Cookie-Header aus der Backend-Antwort entfernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=289</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=289"/>
		<updated>2014-01-09T10:00:20Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Cookie-Header aus Webuser-Anfrage entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
'''Cookie-Header aus Webuser-Anfrage entfernen'''&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Set-Cookie-Header aus der Backend-Antwort entfernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=288</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=288"/>
		<updated>2014-01-09T09:59:41Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende sechs Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie-Header aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Set-Cookie-Header aus der Backend-Antwort entfernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=287</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=287"/>
		<updated>2014-01-09T09:58:40Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie-Header aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Set-Cookie-Header aus der Backend-Antwort entfernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=286</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=286"/>
		<updated>2014-01-09T09:57:33Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Cookie aus Webuser-Anfrage entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie-Header aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Set-Cookie-Header aus der Backend-Antwort entfernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine Ressource gecached werden soll, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Antwort vom Backend kein Set-Cookie-Header vorhanden ist. Mit dem folgenden Snippet lässt sich der Set-Cookie-Header aus der Antwort vom Backend entfernen.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_fetch(env):&lt;br /&gt;
     env.unset_backend_response_header('Set-Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=285</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=285"/>
		<updated>2014-01-09T09:52:53Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_pass&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=284</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=284"/>
		<updated>2014-01-09T09:37:09Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern. Wenn die Erweiterung Ressourcen betrifft, die im Cache von WaveCDN liegen, ist eine Invalidierung erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden. Liegt es ggf. am Caching? Wurde das CDN-Setup invalidiert?&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=283</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=283"/>
		<updated>2014-01-09T09:33:12Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Standardmäßig handelt es sich hierbei fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_headers(headers)&lt;br /&gt;
|Ersetzt in der Anfrage, die WaveCDN an das Backend (Origin/Storagen) schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus Anfrage zurück, die WaveCDN an das Backend (Origin/Storage) schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_request_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anfrage, die WaveCDn an das Backend (Origin/Storage) schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_request_header(name)&lt;br /&gt;
|Entfernt aus der Anfrage, die WaveCDN an das Backend schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=282</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=282"/>
		<updated>2014-01-09T09:29:09Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der vorbereiteten Anfrage an das Backend (Origin/Storage) zurück. Hierbei handelt es sich fast ausschließlich um die Header der Webuser-Anfrage, die auch für die Anfrage an das Backend verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=281</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=281"/>
		<updated>2014-01-09T09:25:17Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=280</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=280"/>
		<updated>2014-01-09T09:19:22Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich dabei um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Parameter muss es sich um einen Integer handeln.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=279</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=279"/>
		<updated>2014-01-09T09:18:14Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Als Parameter wird eine Liste von Headern erwartet.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=278</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=278"/>
		<updated>2014-01-09T09:16:35Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '185.22.221.5'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=277</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=277"/>
		<updated>2014-01-09T09:11:39Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|unset_response_header(name)&lt;br /&gt;
|Entfernt aus der Antwort, die WaveCDN an den Webuser schicken wird, bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=276</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=276"/>
		<updated>2014-01-09T09:10:28Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort, die WaveCDN zurück an den Webuser schicken wird, alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=275</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=275"/>
		<updated>2014-01-09T09:08:03Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|unset_backend_response_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Origin/Storage-Antwort bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=274</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=274"/>
		<updated>2014-01-09T09:05:46Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: &amp;amp;#x5B;&amp;amp;#x5B;'Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/'&amp;amp;#x5D;&amp;amp;#x5D;&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=273</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=273"/>
		<updated>2014-01-09T09:04:24Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Set-Cookie', 'sessionid=f938a47a9ef3259860a8b7c4; path=/']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=272</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=272"/>
		<updated>2014-01-09T09:03:11Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: [['Set-Cookie': 'sessionid=f938a47a9ef3259860a8b7c4; path=/']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Antwort vom Origin/Storage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=271</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=271"/>
		<updated>2014-01-09T08:56:17Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=home'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=home' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: {'site': 'home'}&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=270</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=270"/>
		<updated>2014-01-09T08:55:04Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=example'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=example' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Der einzige Original-Header, der immer bestehen bleibt und seinen Originalwert beibehält, ist der Host-Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=269</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=269"/>
		<updated>2014-01-09T08:53:49Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'HEAD', 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=example'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=example' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Die einzige Ausnahme ist der Host-Header. Er bleibt immer bestehen und behält den Originalwert. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=268</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=268"/>
		<updated>2014-01-09T08:53:27Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php?site=example'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '/main/index.php'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'site=example' oder None&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Die einzige Ausnahme ist der Host-Header. Er bleibt immer bestehen und behält den Originalwert. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=267</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=267"/>
		<updated>2014-01-09T08:52:28Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: 'GET' oder 'POST'&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Die einzige Ausnahme ist der Host-Header. Er bleibt immer bestehen und behält den Originalwert. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=266</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=266"/>
		<updated>2014-01-09T08:51:36Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück. Zum Beispiel 'GET' oder 'POST'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Die einzige Ausnahme ist der Host-Header. Er bleibt immer bestehen und behält den Originalwert. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=265</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=265"/>
		<updated>2014-01-09T08:44:07Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück. Zum Beispiel 'GET' oder 'POST'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Ersetzt nachträglich in der Webuser-Anfrage alle Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=264</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=264"/>
		<updated>2014-01-09T08:43:03Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück. Zum Beispiel 'GET' oder 'POST'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage die Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=263</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=263"/>
		<updated>2014-01-09T08:42:39Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück. Zum Beispiel 'GET' oder 'POST'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück. Zum Beispiel: 	[['Accept-Encoding', 'gzip'], ['Host', 'example.wavecdn.net'], ['Connection', 'keep-alive'], ['Accept', 'text/html,application/xhtml+xml,application/xml'], ['Accept-Language', 'de-de,de']]&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage die Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=262</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=262"/>
		<updated>2014-01-09T08:33:17Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück. Zum Beispiel 'GET' oder 'POST'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage die Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Alle Header, die bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen haben, werden überschrieben. Am Ende gibt es genau einen Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt eine Liste mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=261</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=261"/>
		<updated>2014-01-09T08:29:21Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Webuser-Anfrage mit Cookie cachbar machen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden.&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=260</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=260"/>
		<updated>2014-01-09T08:29:09Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Cookie aus Webuser-Anfrage entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive(env):&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden.&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=259</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=259"/>
		<updated>2014-01-09T08:28:55Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Cookie aus Webuser-Anfrage entfernen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss. Siehe auch die &amp;lt;Caching-Voraussetzungen&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
== Webuser-Anfrage mit Cookie cachbar machen ==&lt;br /&gt;
&lt;br /&gt;
Wenn Anfragen gecached werden sollen, müssen die Caching-Voraussetzungen erfüllt sein. Dazu gehört, dass in der Webuser-Anfrage kein Cookie vorhanden ist oder dass &amp;quot;Cache with Cookies&amp;quot; aktiviert ist. Im folgenden sollen Anfragen mit Cookies explizit gecached werden. Dafür aktivieren &amp;quot;Cache with Cookies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     env.set_cache_with_cookies(True)&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden.&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=258</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=258"/>
		<updated>2014-01-09T08:26:47Z</updated>

		<summary type="html">&lt;p&gt;Nfr: /* Entfernen des Cookies aus der Webuser-Anfragen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Cookie aus Webuser-Anfrage entfernen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden.&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=257</id>
		<title>Erweiterung schreiben</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Erweiterung_schreiben&amp;diff=257"/>
		<updated>2014-01-09T08:26:22Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.&lt;br /&gt;
&lt;br /&gt;
Wir empfehlen vorweg die [http://www.wavecdn.com/extensions FAQ] durchlesen.&lt;br /&gt;
&lt;br /&gt;
= Funktionen =&lt;br /&gt;
&lt;br /&gt;
Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im [[Anfragenmodell]] beschrieben. Konkret handelt es sich um folgende fünf Schritte:&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     pass&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Bei Aufruf einer Funktion der Erweiterung wird genau ein Parameter übergeben. Es handelt sich dabei um eine Instanz der Environment-Klasse. Aus dem Environment können Daten ausgelesen oder auch gespeichert werden. Über das Environment ist es also möglich die Abarbeitung der Anfrage zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Um ein Gefühl dafür zu bekommen, was alles möglich ist, sollte man sich die [[Environment-Klasse|Dokumentation der Environment-Klasse]] anschauen.&lt;br /&gt;
&lt;br /&gt;
= Rückgabewerte =&lt;br /&gt;
&lt;br /&gt;
Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.&lt;br /&gt;
&lt;br /&gt;
= Deployment =&lt;br /&gt;
&lt;br /&gt;
Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab &amp;quot;Erweiterungen&amp;quot; gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern.&lt;br /&gt;
&lt;br /&gt;
= Snippets =&lt;br /&gt;
&lt;br /&gt;
Wir wollen nun häufig verwendete Snippets auflisten.&lt;br /&gt;
&lt;br /&gt;
== Entfernen des Cookies aus der Webuser-Anfragen ==&lt;br /&gt;
&lt;br /&gt;
Die Folgende Erweiterung entfernt bei Eintreffen der Webuser-Anfrage den Cookie-Header. Der Code wird häufig benötigt, wenn man bestimmte Pfade cachbar machen will und deshalb den Cookie entfernen muss.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 def wavecdn_receive():&lt;br /&gt;
     env.unset_request_header('Cookie')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Freie Erweiterung =&lt;br /&gt;
&lt;br /&gt;
Sowohl das WaveCDN Team als auch die Community haben im Laufe der Zeit zahlreiche Erweiterungen geschrieben, die frei zur Verfügung stehen. Sie sind &amp;lt;hier&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab &amp;quot;Erweiterungen&amp;quot; und auf den Button &amp;quot;Anzeigen&amp;quot; bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden.&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
	<entry>
		<id>http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=256</id>
		<title>Environment-Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.wavecdn.com/index.php?title=Environment-Klasse&amp;diff=256"/>
		<updated>2014-01-09T08:22:37Z</updated>

		<summary type="html">&lt;p&gt;Nfr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Konkret handelt es sich bei der Environment-Klasse um die Python-Klasse WavecdnEnvironmentV1. Sie ist bei der [[Erweiterung schreiben|Programmierung von Erweiterungen]] relevant. Im folgenden findet sich die Dokumentation der Klassenmethoden. Die Spalte 'Verfügbarkeit' gibt die [[Anfragenmodell|Schritte der Anfragenabarbeitung]] an, in denen die jeweilige Methode verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;table-wavecdn&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Methode&lt;br /&gt;
!style=&amp;quot;width:600px&amp;quot;|Beschreibung&lt;br /&gt;
!Verfügbarkeit&lt;br /&gt;
|-&lt;br /&gt;
|get_client_ip()&lt;br /&gt;
|Gibt die IP vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_ssl()&lt;br /&gt;
|Gibt in Form eines Boolean zurück, ob der Webuser bei der Anfrage SSL genutzt hat oder nicht.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_method()&lt;br /&gt;
|Gibt die Methode der Anfrage vom Webuser zurück. Zum Beispiel 'GET' oder 'POST'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_uri()&lt;br /&gt;
|Gibt die vom Webuser angefragte URI zurück, beispielsweise '/main/index.php?site=example'.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_path()&lt;br /&gt;
|Gibt die vom Webuser angefragte URL ohne Query-String zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string()&lt;br /&gt;
|Gibt den Query-String aus der vom Webuser angefragten URL zurück. Wenn kein Query-String vorhanden ist, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameters()&lt;br /&gt;
|Gibt ein Dictionary mit den Parametern des Query-Strings zurück. Wenn zwei Parameter den gleichen Namen haben, wird nur der erste in das Dictionary aufgenommen. Wenn kein Query-String vorhanden ist, wird ein leeres Dictionary zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_query_string_parameter(name)&lt;br /&gt;
|Gibt den Wert vom Parameter mit dem angegebenen Namen aus dem Query-String zurück. Wenn es zwei Parameter mit dem angebenen Namen im Query-String gibt, wird der Wert vom ersten Parameter zurückgegeben. Wenn der angegebene Parameter nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_request_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Anfrage vom Webuser zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_headers(headers)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage die Header. Erwartet wird eine Liste von Headern.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_request_header(name)&lt;br /&gt;
|Gibt den ersten Header aus der Webuser-Anfrage zurück, der bei Ignorierung von Groß- und Kleinschreibung den gleichen Namen hat. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
* wavecdn_hit&lt;br /&gt;
* wavecdn_miss&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_request_header(name)&lt;br /&gt;
|Setzt nachträglich in der Webuser-Anfrage den Header mit dem angegebenen Namen. Wenn es bei Ignorierung von Groß- und Kleinschreibung einen anderen Header mit dem angegebenen Namen gibt, wird dieser überschrieben. Wenn es mehrere mit dem gleichen Namen gibt, wird der erste überschrieben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|unset_request_header(name)&lt;br /&gt;
|Entfernt nachträglich aus der Webuser-Anfrage bei Ignorierung von Groß- und Kleinschreibung alle Header mit dem angegebenen Namen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_receive&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern aus der Origin/Storage-Antwort zurück.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_backend_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Origin/Storage-Antwort zurück. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|set_backend_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Origin/Storage-Antwort. Sinnvoll, wenn Header noch vor dem Caching hinzugefügt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_fetch&lt;br /&gt;
|-&lt;br /&gt;
|get_response_status_code()&lt;br /&gt;
|Gibt den HTTP-Code der Antwort zurück, die WaveCDN an den Webuser schicken wird. Es handelt sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_status_code(code)&lt;br /&gt;
|Setzt den HTTP-Code der Antwort, die WaveCDN an den Webuser schicken wird. Beim Code handelt es sich um einen Integer.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_headers()&lt;br /&gt;
|Gibt ein Dictionary mit den Headern der Antwort zurück, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|get_response_header(name)&lt;br /&gt;
|Gibt den Header mit dem angegebenen Namen aus der Antwort zurück, die WaveCDN an den Webuser schicken wird. Wenn der Header nicht existiert, wird None zurückgegeben.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|set_response_header(name, value)&lt;br /&gt;
|Setzt den Header mit dem angegebenen Namen und Wert in der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|-&lt;br /&gt;
|remove_response_header(name)&lt;br /&gt;
|Entfernt den Header mit dem angegebenen Namen aus der Anwort, die WaveCDN an den Webuser schicken wird.&lt;br /&gt;
|&lt;br /&gt;
* wavecdn_deliver&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfr</name></author>
	</entry>
</feed>