AJAX: Fehler bei Squid Proxy X-Squid-Error: ERR_INVALID_REQ 0
anita
- javascript
Hallo!
Ich habe ein AJAX Modul in meiner Seite, die folgendes macht:
Der User wählt aus einer Liste einen Namen aus, bei Klick auf einen Listeneintrag wird ein HttpXMLRequest abgesetzt und es wird via AJAX eine Liste zurückgegeben, in dem weitere Details zu dem ausgewählten Namen erscheinen. Eigentlich das typische AJAX Beispiel.
Jetzt hab ich folgendes Problem. Wenn der Windows-Client-Rechner hinter einem Squid Proxy hängt, bekommt er bei Ausführung der "AJAX-Anfrage" folgende Fehlermeldung:
**********************************
ERROR
The requested URL could not be retrieved
While trying to process the request:
POST /mggqm/includes/measupload/measup_getProcList.php?wfid=42&accessrigth=0cc175b9c0f1b6a831c399e269772661 HTTP/1.1
Host: ###.###.###.###
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Cookie: PHPSESSID=c7aa95e01934b9fe10ff3f0905869f57
Pragma: no-cache
Cache-Control: no-cache
The following error was encountered:
* Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:
* Missing or unknown request method
* Missing URL
* Missing HTTP Identifier (HTTP/1.0)
* Request is too large
* Content-Length missing for POST or PUT requests
* Illegal character in hostname; underscores are not allowed
Your cache administrator is root.
Generated Fri, 13 Apr 2007 09:27:33 GMT by Proxy1 (squid/2.6.STABLE12)
*************************************
Der Header der zurückgegeben Datei sieht wie folgt aus:
****************************************
Server: squid/2.6.STABLE12
Date: Fri, 13 April 2007 09:33:23 GMT
Content-Type: text/html
Content-Length: 1780
Expires: Fri, 13 April 2007 09:33:23 GMT
X-Squid-Error: ERR_INVALID_REQ 0
X-Cache: MISS from Proxy1
X-Cache-Lookup: NONE from Proxy1:3128
Via: 1.0 Proxy1:3128 (squid/2.6.STABLE12)
Proxy-Connection: close
*****************************************
Der HTTP-Status der Seite ist: 411
Es funktioniert nicht bei folgenden Konstellationen:
IE unter Windows (via Proxy)
Firefox unter Windows (via Proxy)
Opera unter Windows, sowie sämtliche Linux Clients mit diversen Browsern bringt diese Fehlermeldung nicht.
Ich habe bereits folgenden Artikel von MS im I-Net gefunden.
http://support.microsoft.com/kb/287705/de
Aber wie gehe ich jetzt weiter vor? Hatte schon jemand das gleiche Problem und hat eine Lösung darauf?
Viele Grüße
Anita
hi,
While trying to process the request:
Sind diese Angaben vollständig?
Some aspect of the HTTP Request is invalid. Possible problems:
* Content-Length missing for POST or PUT requests
Ich sehe keinen Content-Length-Header
* Illegal character in hostname; underscores are not allowed
Wo ist der Hostname?
gruß,
wahsaga
Hi!
hi,
While trying to process the request:
Sind diese Angaben vollständig?
Wenn du meinst, ob ich die Fehlermeldung vollständig angegeben hab, ja!
Der Fehler kommt bereits bei readyState 2 vor.
2: Die Anfrage wurde gesendet und wird verarbeitet (Sie knnen die Kopfdaten der Antwort auswerten).
Da ist die Seite natürlich noch nicht komplett aufgebaut.
Some aspect of the HTTP Request is invalid. Possible problems:
* Content-Length missing for POST or PUT requests
Ich sehe keinen Content-Length-Header
Wenn ich mir den Header der Rückgabe mit resObjekt.getAllResponseHeaders()
anschaue, dann bekomme ich aber den Content-Length Header angezeigt:
Content-Length: 1780
Könnte aber in dem MS-Link erwähnten Problem liegen:
"Wenn ein Webserver mehr Daten als dass in dem Content-Length-Header angegeben, sendet, kann der Proxyserver feststellen, dass das eine Verletzung der Verwendung des Content-Length-Headers laut RFC 2068 Section 14.14 und 4.4 ist. Daher wird es den Anschluss schließen, der verwandt wird, um die Daten zu downloaden. Wenn der Port von Internet Explorer geöffnet wurde, das das Proxy-Connection:Keep Aktiv Header- verwendet, wird der Port mit dem Proxyserver geschlossen wird dass sein, indem den TCP FIN Flag in dem letzten Antwortframe auf dem bestimmten Port festlegt.
Internet Explorer wird den Content-Length-Header verwenden, um den Umfang der Daten zu bestimmen, um Daten von dem TCP-Sockets zu empfangen. Zusätzliche Daten in dem Sockets belassen, das normalerweise verworfen wird ist, nachdem das geschieht. Dieses TCP-Sockets wird jedoch erneut verwandt sein, da die Keep-Alive-Sitzung läuft. Wenn der Proxyserver versucht, das TCP-Sockets für nachfolgende HTTP-Anforderungen erneut zu verwenden, wird der Proxyserver ein TCP-Paket auf dem Port ausstellen, da es den Port zuvor nicht da Content-Length Übereinstimmen schloss."
* Illegal character in hostname; underscores are not allowed
Wo ist der Hostname?
Hostname: ###.###.###.### <- IP-Adresse des Servers
gruß,
wahsaga
Gruß Anita
hi,
Ich sehe keinen Content-Length-Header
Wenn ich mir den Header der Rückgabe mit resObjekt.getAllResponseHeaders()
anschaue, dann bekomme ich aber den Content-Length Header angezeigt:
Content-Length: 1780
Ja, im Response.
Die Meldung des Proxys bezieht sich aber auf den Request.
gruß,
wahsaga
hi,
Ich sehe keinen Content-Length-Header
Wenn ich mir den Header der Rückgabe mit resObjekt.getAllResponseHeaders()
anschaue, dann bekomme ich aber den Content-Length Header angezeigt:
Content-Length: 1780Ja, im Response.
Die Meldung des Proxys bezieht sich aber auf den Request.gruß,
wahsaga
Okay, verstehe. Dann hab ich am falschen Ort gesucht bisher.
Obwohl ne ich verstehs eigentlich nicht. Sorry, wenn ich blöd frag, aber wie kann das beeinflussen. Ich bin mit dem http-zeug leider nicht so durch, bitte korrigieren wenn ich blödsinn schreib.
Ich sende den Request ab mit
resObjekt.open('post','measup_getProcList.php?wfid='+wfid+'&accessrigth='+accessrigth,true);
resObjekt.onreadystatechange = showProcList;
resObjekt.send(null);
Wie kommt es jetzt, dass hier irgendwas fehlt bzw. wie kann ich es hier beeinflussen?
Dank Dir im Voraus für Deine Hilfe!
Hi!
Okay, da hab ich mal einen ziemlich doofen Fehler drin. Muss natürlich heissen:
resObjekt.open('GET','measup_getProcList.php?wfid='+wfid+'&accessrigth='+accessrigth,true);
wenn ich schon mit GET Daten verschicke, dann sollt ich vielleicht auch GET hinschreiben. Kommt vom Code kopieren.
Ich hab mich ziemlich dadurch verwirren lassen, dass es unter Windows+Opera und unter Linux+Browser funktioniert hat. Wieso meckert denn der Proxy da nicht?
Vielen Dank wahsaga für Deine Hilfe. Du hast mich in die richtige Richtung geschuppst!
Gruß Anita