HTTP-Post und Headererkennung
Reinhard Doberstein
- php
HAllo,
ich versuche gerade folgendes zu realisieren:
Der Besucher soll gar nicht merken das die Daten von wo anders kommen. Dabei soll das ganze auch bei Aufrufen mit POST funktionieren. Ich benutze dabei die Funktion die bei http://www.dclp-faq.de/q/q-code-post.html beschrieben ist.
Das geht auch soweit, denke ich zumindest.
Was ich aber zurückbekomme ist sowas wie:
+--------------------+
HTTP/1.1 100 Continue
Server: Microsoft-IIS/4.0
Date: Thu, 21 Nov 2002 14:51:41 GMT
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Thu, 21 Nov 2002 14:51:42 GMT
Connection: close
MIME-Version: 1.0
Content-type: text/html
<html>
...
+--------------------+
d.h. es sieht so aus als ob zwei Header geschickt werden. Ist sowas überhaupt erlaubt? Vielleicht gehts ja weil der 1. Teil ein "100 Continue" ist. Da kenn ich das Protokoll zu wenig.
Wie kann ich in den Fall feststellen wo der eigentliche body beginnt?
Wenn sowas nicht erlaubt ist, wie könnte sowas zustande kommen? Wenn ich diese 'versteckte' URL mit dem Browser angucke siehts jedenfalls richtig aus. Aber da weis ich ja nicht was er für einen Header bekommt.
Webserver ist jedenfalls ein IIS4.0, sieht man ja. Dementsprechend läuft das ganze unter Windows (NT4).
By
Reinhard
Hallo Reinhard,
Der Besucher soll gar nicht merken das die Daten von wo
anders kommen.
Wofuer willst du sowas?
Dabei soll das ganze auch bei Aufrufen mit POST
funktionieren. Ich benutze dabei die Funktion die bei
http://www.dclp-faq.de/q/q-code-post.html
beschrieben ist.
Da werden falsche Zeilenenden benutzt, man sollte statt \n
\015\012 benutzen.
Was ich aber zurückbekomme ist sowas wie:
+--------------------+
HTTP/1.1 100 Continue
Server: Microsoft-IIS/4.0
Date: Thu, 21 Nov 2002 14:51:41 GMTHTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Thu, 21 Nov 2002 14:51:42 GMT
Connection: close
MIME-Version: 1.0
Content-type: text/html<html>
...
+--------------------+d.h. es sieht so aus als ob zwei Header geschickt werden.
Korrekt. In der RFC steht darueber:
|10.1.1 100 Continue
|
| The client may continue with its request. This interim
| response is used to inform the client that the initial
| part of the request has been received and has not yet
| been rejected by the server. The client SHOULD continue
| by sending the remainder of the request or, if the
| request has already been completed, ignore this response.
| The server MUST send a final response after the request
| has been completed.
Ist sowas überhaupt erlaubt?
Jup, klar ist das erlaubt.
Vielleicht gehts ja weil der 1. Teil ein "100 Continue"
ist. Da kenn ich das Protokoll zu wenig.
Was genau meinst du?
Wie kann ich in den Fall feststellen wo der eigentliche
body beginnt?
HTTP-Header sind vom HTTP-Body durch ein '\015\012'
getrennt, also einer Leerzeile. Aber das bewahrt dich nicht
davor, zu interpretieren, was vom Server zurueck kommt. Will
heissen, statt einem 200 koennte auch ein '404 Not Found'
oder ein '500 Internal Server Error' oder, wie in diesem
Falle, ein '100 Continue' zurueck kommen. Erst bei einem
'200 Ok' kannst du dich darauf einstellen, dass der Body
folgt.
Wenn sowas nicht erlaubt ist, wie könnte sowas zustande
kommen? Wenn ich diese 'versteckte' URL mit dem Browser
angucke siehts jedenfalls richtig aus. Aber da weis ich ja
nicht was er für einen Header bekommt.
Das kannst du hier betrachten:
http://forum.de.selfhtml.org/cgi-bin/http_trace.pl
Gruesse,
CK
HAllo,
Der Besucher soll gar nicht merken das die Daten von wo
anders kommen.Wofuer willst du sowas?
Der eigentliche Datenlieferant (eine spezielle Datenbank Schnittstelle) liefert das HTML nicht so wie wir es brauchen. Daher diese verrenkungen für die Konvertierung. Die eigentliche Datenquelle ist von aussen auch nicht erreichbar, daher geht diese Adresse und die ganze Technik niemanden was an. Das verwirrt blos.
Dabei soll das ganze auch bei Aufrufen mit POST
funktionieren. Ich benutze dabei die Funktion die bei
http://www.dclp-faq.de/q/q-code-post.html
beschrieben ist.Da werden falsche Zeilenenden benutzt, man sollte statt \n
\015\012 benutzen.
Das sollte man dann wohl Kristian Köhntopp sagen :-) In meinen Skripten hab ich das auch schon ausgetauscht.
Was ich aber zurückbekomme ist sowas wie:
+--------------------+
HTTP/1.1 100 Continue
Server: Microsoft-IIS/4.0
Date: Thu, 21 Nov 2002 14:51:41 GMTHTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Thu, 21 Nov 2002 14:51:42 GMT
Connection: close
MIME-Version: 1.0
Content-type: text/html<html>
...
+--------------------+d.h. es sieht so aus als ob zwei Header geschickt werden.
Korrekt. In der RFC steht darueber:
[...]
Ist sowas überhaupt erlaubt?
Jup, klar ist das erlaubt.
Vielleicht gehts ja weil der 1. Teil ein "100 Continue"
ist. Da kenn ich das Protokoll zu wenig.Was genau meinst du?
Wie kann ich in den Fall feststellen wo der eigentliche
body beginnt?HTTP-Header sind vom HTTP-Body durch ein '\015\012'
getrennt, also einer Leerzeile.
Das ist genau mein Problem. Der Leerzeile kommt vor der Zeile "HTTP/1.1 200 OK". D.h. diese müßte schon von vom Browser angezeigt werden. Oder sind zwei, und mehr, Header erlaubt solange immer ein "100 Continue" ist?
Ich werde also die 100er Header interpretieren, rausfiltern und wegschmeissen bis ein 'richtiger' Header kommt. (Vereinfacht gesagt)
Aber das bewahrt dich nicht
davor, zu interpretieren, was vom Server zurueck kommt.
Eigentlich würde ich ja die einfach alles rausgeben. Aber in PHP geb ich halt Headerinformationen anders aus als den Body. Daher muss ich erkennen was zum Header, und was zum Body gehört. In dem Fall wäre mal Perl einfacher :-)
Will
heissen, statt einem 200 koennte auch ein '404 Not Found'
oder ein '500 Internal Server Error'
Och, da soll sich der Browser der Besuchers drum kümmern. Auch ein 404 oder 500 geb ich einfach weiter.
Wenn sowas nicht erlaubt ist, wie könnte sowas zustande
kommen? Wenn ich diese 'versteckte' URL mit dem Browser
angucke siehts jedenfalls richtig aus. Aber da weis ich ja
nicht was er für einen Header bekommt.Das kannst du hier betrachten:
Danke für den Tipp und die Infos.
By
Reinhard
Hallo Reinhard,
Wie kann ich in den Fall feststellen wo der
eigentliche body beginnt?HTTP-Header sind vom HTTP-Body durch ein '\015\012'
getrennt, also einer Leerzeile.Das ist genau mein Problem. Der Leerzeile kommt vor der
Zeile "HTTP/1.1 200 OK". D.h. diese müßte schon von vom
Browser angezeigt werden. Oder sind zwei, und mehr, Header
erlaubt solange immer ein "100 Continue" ist?
Richtig. Ein '100 Continue'-Response hat keinen Body. Nach
einem '100 Continue' folgt ein weiterer Header-Part, wie auch
die RFC schon gesagt hat (A HTTP-Server MUST send a final
response header).
Ich werde also die 100er Header interpretieren,
rausfiltern und wegschmeissen bis ein 'richtiger' Header
kommt. (Vereinfacht gesagt)
Prinzipiell kannst du die auch weiterschicken. Waere PHP
nicht so ekelig und gaebe es dort eine Moeglichkeit, etwas
auszugeben, ohne dass Header von PHP selber geschickt werden,
haettest du die Probleme nicht...
Gruesse,
CK