Problem mit TServerSocket
Hallo an alle, die hier fleißig ihr Wissen teilen.
Ich hoffe, ich kann davon profitieren ;-) Meine Suche war leider erfolglos, ich weiß aber auch nicht sor richtig, wonach ich suchen soll. Am besten ich erkläre dazu mal mein Problem: Ich habe ein Programm, welches Daten für einen Browser zur Verfügung stellt. Das hat bisher auch ganz gut funktioniert, leider wird der HTML-Inhalt im aktuellen Firefox oder Opera als Quelltext angezeigt. Mit dem IE oder einer älteren Firefox funktioniert es. In einem kleinen Testprogramm nutze ich dafür ein Memo-Feld, in das ich den HTML-Text schreibe. Dieser sieht momentan so aus:
Code:
Das Senden des Textes erledige ich mittels
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-de" lang="de-de" > <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Administration</title> </head> <body> <h1>Administration</h1> </body> </html>
Delphi-Quellcode:
Der Umweg über die Stringliste ist drin, weil es im "richtigen" Programm nur diese gibt.
index:=Tstringlist.create;
index.Clear; index.AddStrings(memo1.lines); Socket.SendText(index.Text); Socket.Close; Der IE zeigt danach erwartungsgemäß das fett geschriebene Wort "Administration", der Firefox und Opera zeigen leider exakt den Text wie er im Memofeld steht. Mit einer älteren Version (genaue Version nicht bekannt) hat es aber funktioniert. Das HTML-Schnipsel wird bei "http://validator.w3.org/check" als gültig erkannt. Was kann ich noch tun ??? Vielen Dank schon mal im Voraus. Viele Grüße Mirko |
AW: Problem mit TServerSocket
Wenn du schon groß verkündest, dass du charset=utf-8 hast, und dann aber einen (TCustomWinSocket.SendText)
Delphi-Quellcode:
versendest (der je nach Delphi-Version von einem
AnsiString
Delphi-Quellcode:
oder
AnsiString
Delphi-Quellcode:
(UTF-16) gebildet wird) dann ist das Verhalten beim IE darauf zurückzuführen, dass der dir milde lächelnd diesen Fauxpas verzeiht. Denn du verschickst definitiv nichts als UTF-8 kodiertes.
UnicodeString
Die anderen verhalten sich streng nach den Regeln :stupid: |
AW: Problem mit TServerSocket
Zitat:
Das HTML mag gültig sein, aber der Browser sendet einen HTTP GET Request und erwartet eine HTTP Response. Diese besteht nicht nur aus dem HTML als 'Fracht', sondern kann (bzw. - je nachdem muss ...) auch Header enthalten: What HTTP response headers are required Wenn der Server dem Browser (Client) nicht mitteilt um welchen Content-Type es sich handelt, kann der Browser ihn einfach als "application/octet-stream" darstellen. (https://tools.ietf.org/html/rfc7231#section-3.1.1.5) |
AW: Problem mit TServerSocket
Warum nimmst Du nicht einfache eine THttpServer Komponente?
|
AW: Problem mit TServerSocket
Vielen Dank für die schnellen Antworten.
@Sir Rufo: Die ganzen Formatierungsgeschichten habe ich jetzt erst reingenommen, weil ich gehofft hatte, dass es damit funtkioniert. @Mavarik: Die THttpServer Komponente kann ich nicht finden, könnte am Delphi 5 liegen :-) Der Tip von mjustin passt am besten ! Man muss eben den kompletten HTTP-Verkehr nachahmen. Wobei komplett schon wieder übertrieben ist. Es reicht, wenn man die Statusmeldung "HTTP/1.1 200 OK" als ersten String schickt. Auf den Rest kann man - zumindest in meiner Testanwendung - verzichten. Also Danke noch mal und viele Grüße Mirko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz