Ende eines HTTP Response/Request

Kalkulon

Mitglied
Ich will überprüfen, ob ein HTTP Request oder Response schon abgeschlossen wurde. Gibt es ein Zeichen, was das Ende eines HTTP Response/Request markiert?
 
Zuletzt bearbeitet von einem Moderator:
D

Dow Jones

Gast
Nein, ein einzelnes Zeichen gibt es leider nicht. Du musst erstmal den Header des Request/Response einlesen (endet mit einer Leerzeile, also mit "\r\n\r\n" oder mit "\n\n") und dann austüfteln wie viele Bytes noch für den Body folgen. Wie das bei HTTP/1.1 offiziell funktionieren sollte steht in RFC2616.

Kurz gefasst:
1) prüfen ob überhaupt ein Body vorgesehen ist
2) das Feld Transfer-Encoding prüfen ob chunked-encoding benutzt wird
3) das Feld Content-Length prüfen ob eine Länge in Bytes angegeben ist
4) das Feld Content-Type prüfen ob multipart/byteranges angegeben ist
5) wenn nichts davon zutrifft: Daten einlesen bis die Verbindung geschlossen wird


RFC2616 hat gesagt.:
4.4 Message Length

The transfer-length of a message is the length of the message-body as it appears in the message; that is, after any transfer-codings have been applied. When a message-body is included with a message, the transfer-length of that body is determined by one of the following (in order of precedence):

1.Any response message which "MUST NOT" include a message-body (such as the 1xx, 204, and 304 responses and any response to a HEAD request) is always terminated by the first empty line after the header fields, regardless of the entity-header fields present in the message.

2.If a Transfer-Encoding header field (section 14.41) is present and has any value other than "identity", then the transfer-length is defined by use of the "chunked" transfer-coding (section 3.6), unless the message is terminated by closing the connection.

3.If a Content-Length header field (section 14.13) is present, its decimal value in OCTETs represents both the entity-length and the transfer-length. The Content-Length header field MUST NOT be sent if these two lengths are different (i.e., if a Transfer-Encoding
header field is present). If a message is received with both a
Transfer-Encoding header field and a Content-Length header field,
the latter MUST be ignored.

4.If the message uses the media type "multipart/byteranges", and the transfer-length is not otherwise specified, then this self- delimiting media type defines the transfer-length. This media type MUST NOT be used unless the sender knows that the recipient can parse it; the presence in a request of a Range header with multiple byte- range specifiers from a 1.1 client implies that the client can parse multipart/byteranges responses.
A range header might be forwarded by a 1.0 proxy that does not
understand multipart/byteranges; in this case the server MUST
delimit the message using methods defined in items 1,3 or 5 of
this section.

5.By the server closing the connection. (Closing the connection cannot be used to indicate the end of a request body, since that would leave no possibility for the server to send back a response.)

For compatibility with HTTP/1.0 applications, HTTP/1.1 requests containing a message-body MUST include a valid Content-Length header field unless the server is known to be HTTP/1.1 compliant. If a request contains a message-body and a Content-Length is not given, the server SHOULD respond with 400 (bad request) if it cannot determine the length of the message, or with 411 (length required) if it wishes to insist on receiving a valid Content-Length.

All HTTP/1.1 applications that receive entities MUST accept the "chunked" transfer-coding (section 3.6), thus allowing this mechanism to be used for messages when the message length cannot be determined in advance.

Messages MUST NOT include both a Content-Length header field and a non-identity transfer-coding. If the message does include a non- identity transfer-coding, the Content-Length MUST be ignored.

When a Content-Length is given in a message where a message-body is allowed, its field value MUST exactly match the number of OCTETs in the message-body. HTTP/1.1 user agents MUST notify the user when an invalid length is received and detected.
Zitiert aus RFC2616 - HTTP/1.1: HTTP Message - 4.4 Message Length
 
U

Unregestriert

Gast
Ich greif mal das Thema auf...

Hier mal ein mini bsp.:

Java:
		ServerSocket ss = new ServerSocket(1337);
		Socket s = ss.accept();
		BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line = null;
		while ((line = in.readLine()) != null)
			System.out.println(line);
		System.out.println("done");

Das Programm bleibt immer in der while schleife hängen...völlig egal was ich mache.

Auch das abbrechen wenn \n\n oder \r\n\r\n kommt funktioniert, da der Stream einfach so nicht endet.
 
S

SlaterB

Gast
D

Dow Jones

Gast
Prinzipiell sollte deine Methode schon richtig sein. Versuch mal statt !=null ein ! line.isEmpty(), damit müsstest du auf jeden Fall einen Http-Header sauber einlesen können. Null wird von readline nur bei EOF zurückgeliefert, ansonsten blockiert der Aufruf solange bis neue Daten anliegen. Und da die allermeisten Httpserver Keep-Alive unterstützen würde deine Schleife auf einen Timeout der Verbinfung warten (das kann durchaus ein paar Minuten dauern) um dann vermutlich mit einer IOException nach dir zu werfen.

Mit dem "\n\n" bzw. "\r\n\r\n" im obigen Post waren übrigens die letzten Zeichen eines Headers gemeint, nicht die letzten Zeilen. Ein Header sähe also beispielsweise so aus:
Code:
HTTP/1.1 200 OK\r\n
Connection: Keep-Alive\r\n
\r\n
Da readline() aber ohnehin eine komplette Textzeile einliest (und dabei die Zeilenende-Kennung \n bzw. \r\n auch gleich abschneidet) müsste dein Code mit ! line.isEmpty() eigentlich klappen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 SSH-Kommunikation - Ende eines Streams nicht erkenntlich Netzwerkprogrammierung 2
K "Ende eines Sockets" Netzwerkprogrammierung 9
U Ende eines Inputstreams ermitteln Netzwerkprogrammierung 3
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
M Ende des Streams ohne Schließen/Checksumme mitsenden Netzwerkprogrammierung 2
D Timeouts ohne Ende bei SMTP und FTP Netzwerkprogrammierung 3
M SocketError bei Aufruf eines SOAP-Servers Netzwerkprogrammierung 8
G seite nach posten eines html-forms laden Netzwerkprogrammierung 0
J Protokolle innerhalb eines Heimnetzwerks Netzwerkprogrammierung 6
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
N Name eines Attributes aus einem festen String und einer Variablen generieren Netzwerkprogrammierung 5
X Response eines RESTful-Service mit JSON Netzwerkprogrammierung 8
F Neuer Json aus teilen eines vorhandenen Json Netzwerkprogrammierung 0
N Client Identifikation eines Servers Netzwerkprogrammierung 1
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
K Multiplayer eines Spiels Netzwerkprogrammierung 21
K Ansprechen eines Remote Druckers Netzwerkprogrammierung 2
L Erstellen eines Online Multiplayer Apps Netzwerkprogrammierung 10
eLogic Download eines Links Netzwerkprogrammierung 2
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
2 Schliessen eines Serversockets Netzwerkprogrammierung 2
Hindi93 Abbruch eines Programmes abfangen Netzwerkprogrammierung 8
C Alle Computer eines Netzwerkes finden Netzwerkprogrammierung 32
N Senden eines Arrays Netzwerkprogrammierung 6
U Name eines Netzlaufwerks ermitteln Netzwerkprogrammierung 5
L Body eines http Request auslesen Netzwerkprogrammierung 2
aze Tcp Verkehr eines Applets simulieren Netzwerkprogrammierung 10
J Socket Erreichbarkeit eines Java Servers (Socket-Lösung) über das Internet Netzwerkprogrammierung 3
M Socket Leistungsfähigkeit eines xSocketservers, wieviele Verbindungen max? Netzwerkprogrammierung 4
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
cowabunga1984 Transferierte Datenmenge eines SOAP Clients (JAX-WS) anzeigen Netzwerkprogrammierung 2
K TrafficClass eines UDP Pakets kommt beim Empfänger nicht an Netzwerkprogrammierung 5
musiKk Problem bei bidirektionaler Nutzung eines Socket Netzwerkprogrammierung 2
J Machbarkeit eines Bluetooth-Servers? Netzwerkprogrammierung 2
S Realisierung eines Netzwerkcodes für ein Strategiespiel Netzwerkprogrammierung 7
A Broadcast - senden eines Packetes an alle rechner im netz Netzwerkprogrammierung 15
P problem beim schließen eines Streams Netzwerkprogrammierung 6
K Mit Java-MailAPI dir Verfügbarkeit eines SMTP-Servers prüfen Netzwerkprogrammierung 4
J while-Schleife / Abbruchbed. beim Einlesen eines Streams Netzwerkprogrammierung 4
J Länge eines Streams Netzwerkprogrammierung 4
T Timeout eines KSOAP-Calls Netzwerkprogrammierung 5
G Info eines Webseites kopieren Netzwerkprogrammierung 16
J Antwort eines Soaprequests parsen mittels org.apache.soap Netzwerkprogrammierung 2
E Möglichkeit zum Timeout eines Process Netzwerkprogrammierung 7
T Erstellung eines Proxy Netzwerkprogrammierung 11
T Pfad eines Servlets rausfinden Netzwerkprogrammierung 2
O Einbinden eines java-servers Netzwerkprogrammierung 9
C Übergabe eines Datensatzes (Übergabestruktur) Netzwerkprogrammierung 12
G Verzeichnis eines Rechners übers Netzwerk auslesen Netzwerkprogrammierung 5
B Problem mit der Ausgabe eines Strings an SocketOut Netzwerkprogrammierung 4
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
G localhost im Backend https vs. http Netzwerkprogrammierung 9
J Simple HTTP Framework (basierend auf expressjs) Netzwerkprogrammierung 1
M HTTP Http requests aufzeichnen Netzwerkprogrammierung 2
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
M http request and response Netzwerkprogrammierung 0
M Verbindungszeit berechnen (TCP, HTTP/1.0, HTTP/1.1) Netzwerkprogrammierung 2
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
U HTTP XML vom Server abholen oder http Abfragen, Entscheidung treffen Netzwerkprogrammierung 0
P HTTP Server / Client Netzwerkprogrammierung 1
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
M Server mit HTTP Netzwerkprogrammierung 9
H Sockets oder HTTP- Methoden? Netzwerkprogrammierung 3
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D HTTP Bräuchte hilfe mit Http Requests Netzwerkprogrammierung 6
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
T HTTP Einen HTTP Server erstellen Netzwerkprogrammierung 20
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
T Socket Java HTTP-Proxy Netzwerkprogrammierung 3
A HTTP Zugriff auf http-Server - Error 400 Netzwerkprogrammierung 11
B HTTP JSESSIONID in Http(s)URLConnection loswerden! Netzwerkprogrammierung 13
E Socket HTTP-Server Netzwerkprogrammierung 6
C HTTP POST Connect Netzwerkprogrammierung 9
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
Tobse HTTP ServerSocket HTTP Netzwerkprogrammierung 4
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N Http Client Netzwerkprogrammierung 3
W Asynchroner HTTP Client / non-blocking I/O Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
T HTTP Encoding von Http-Streams Netzwerkprogrammierung 2
D http request Netzwerkprogrammierung 11
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
Kr0e Simpler HTTP Stream server Test Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben