1

ロード時にファイル拡張子を取得するときにブラウザは何を解釈していますか?

html、svg、および dtd (エンティティ) を混在させようとしています。私はそれを有効な方法で行うようにしています。しかし、今は私が理解できない問題の立場です。やった:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html [
            <!ENTITY duration "3s">
            ...
            ...
    <div style='width:100%; border:1px solid black;'>high there</div>
    <p>toaster</p>
    <hr/>
    <svg width="600" ... 

私の「ページ」は意図したとおりに表示され、Rubymineは注釈なしでファイルを「読み取り」ます。

ファイル拡張子がSVG (つまり、index.svg) である限り。HTMLに変更すると、不運です。ページは本来あるべき姿に少しだけ似ています。ここで両方のバリアントを参照してください。

svgおよびhtmlとして

ファイルの拡張子に応じてブラウザが「気が変わった」とき、舞台裏で何が起こっているのでしょうか?

ところで、私の RumyMine は、拡張子が 'html' のファイルに何か問題があることを教えてくれます (ただし、何ではないか)。

私は両方を好みます: 何が起こるか教えてください。

4

1 に答える 1

3

これは、拡張機能を処理するブラウザとは関係ありませんが、サーバーが拡張機能を処理する方法から始まります。

実際、仕様には次のように書かれています。

ファイル拡張子は、信頼性が低く、簡単にスプーフィングされるため、HTTP 経由で取得されたリソースの提供された MIME タイプを決定するために使用されません。

ページがhttp://keepitsimple-soft.com/question.htmlとして提供される場合、Apache サーバーは応答にこの HTTP ヘッダーを含めます: Content-Type: text/html、ブラウザーはそれが HTML ページであることを認識し、HTML パーサーを使用してそれを読み取ります。HTML パーサーは、DOCTYPE でこれらのエンティティ定義を処理しないため、SVG で正しく解釈できません。

ページがhttp://keepitsimple-soft.com/question.svgとして提供される場合、サーバーは次の HTTP ヘッダーを応答に含めますContent-Type: image/svg+xml。この場合、ブラウザは「+xml」の部分を認識し、XML パーサーを使用してファイルを解析します。これはエンティティ定義を解釈するため、SVG を完全に処理できます。

すべきこととしては、XHTML を使用して XML パーサーに固執するか、ネットワーク経由でページを送信する前にエンティティ定義を解決することができます。その場合、ページは HTML パーサーで動作するはずです。(私はこれをテストしていませんが。)

于 2013-09-22T20:31:05.547 に答える