У меня самая сумасшедшая проблема с Firefox. Я не уверен, исходит ли эта проблема от самого Firefox или от моего пользовательского веб-сервера (встроенного в Delphi) или от того, что это может быть. Эта проблема возникает только в Firefox (и Opera), когда он перемещает все от головы до тела, а также добавляет случайные символы в начале тела. Странно, но даже с полностью 100% пустой веб-страницей.
Я тестирую на такой простой странице:
<html>
<head>
<title>Test</title>
</head>
<body>
</body>
</html>
Что касается веб-сервера, я создаю собственное приложение HTTP в Delphi, используя IdHTTPWebBrokerBridge
(Indy) и просто заменяю ContentStream
(или Content
) Request
, например, так ...
procedure TDashModule.DashConsoleHomeAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.ContentType:= 'text/html';
Response.ContentStream:= TFileStream.Create('C:\SomeDir\SomeFile.html', fmOpenRead or fmShareDenyNone);
end;
... где SomeFile.html
- пустая страница, опубликованная выше, а процедура - обработчик событий для обработчика запросов по умолчанию.
В Chrome, IE, Safari и т. Д. Все отображается в точности как исходный код. Тем не менее, Firefox (и Opera) производят это:
<html>
<head>
</head>
<body>

<title>Test</title>
</body>
</html>
Как видите, тег title
был перемещен вниз до body
, и некоторые случайные символы 
появляются в самом начале тела. При просмотре необработанной страницы в виде исходного файла в Firefox она отображается правильно. Но при использовании моего веб-сервера в Delphi Firefox уничтожает эту страницу (и все страницы, если на то пошло).
Что может быть, и как это исправить?
Шаги для воспроизведения
A) Создайте новую HTML-страницу (для меня в Visual Studio 2010) только с таким содержимым:
<html>
<head>
<title>Test</title>
</head>
<body>
</body>
</html>
B) В Delphi XE2 запустите новый проект: File > New > Other... > Web Broker > Web Server Application
C) Выберите Stand-alone VCL Application
> Далее> Готово
D) Создайте обработчик по умолчанию (щелкните правой кнопкой мыши WebModule1
и выберите Action Editor...
)
E) Для элемента DefaultHandler
перейдите в Свойства события и перейдите к Обработчику событий для OnAction
F) Замените любой код, который уже существует, этим (замените имя файла на имя файла HTML):
Response.ContentStream:= TFileStream.Create('C:\SomeDir\SomeFile.html', fmOpenRead or fmShareDenyNone);
E) Запустите приложение и нажмите «Показать в браузере» - скопируйте / вставьте URL-адрес в Firefox, если необходимо.
UPDATE
Благодаря помощи я пришел к выводу, что проблема связана с тегом спецификации файла, который там не принадлежит. Это было связано с тем, как работает TFileStream
, он загружает каждый маленький кусочек файла, который включает этот код. Вместо этого я изменил свой метод на использование TStringList.LoadFromFile()
, потому что это автоматически обнаруживает его, и я также могу прочитать TStringList.Text
, чтобы присвоить Response.Content
.