2

誰かがこのブラウザの動作に光を当てることができるかどうか疑問に思っていました:

XHR(jQueryを使用して、jQueryを除外するためだけにプレーンなXMLHttpRequestでも試してみましたが、結果は同じです)またはフォームを介した「昔ながらの」方法のいずれかを介してサーバーに送信されるテキストエリアを含むフォームがあります参加する。どちらの場合も、method="POST" が使用されます。どちらの方法でも、サーバー上の同じスクリプトに送信されます。

ここでおもしろい点: XHR 経由で送信すると、改行文字は "%0A" (または \n 私が間違っていなければ \n) として転送され、通常の方法で送信すると "%0D%0A" (または\r\n)。もちろん、これはサーバー側でいくつかの問題を引き起こしますが、それはここでは問題ではありません。この違いの理由を知りたいのですが?どの送信方法を使用しても、新しい行は同じように転送されるべきではありませんか? 他にどのような違いがありますか (ある場合)?

4

2 に答える 2

2

XMLHttpRequest は、XML を送信するときに、ストリームから CR 文字を取り除きます。これは、CRLF を単純な LF に正規化することを示す XML 仕様と一致しています。

したがって、コンテンツを XML としてパッケージ化して XHR 経由で送信すると、CR が失われます。

于 2009-06-02T19:32:05.053 に答える
2

RFC2616 (HTTP1.1)のパート 3.7.1では、\r\n、\r、\n のいずれかで改行を表すことができます。

HTTP はこの要件を緩和し、エンティティ本体全体に対して一貫して行われる場合、プレーンな CR または LF だけで改行を表すテキスト メディアの転送を許可します。HTTP アプリケーションは、HTTP 経由で受信したテキスト メディアの改行を表すものとして、CRLF、裸の CR、および裸の LF を受け入れなければなりません。

しかし、これは制御構造には当てはまりません:

改行に関するこの柔軟性は、エンティティ本体のテキスト メディアにのみ適用されます。HTTP 制御構造 (ヘッダー フィールドやマルチパート境界など) 内では、CRLF を裸の CR または LF で置き換えてはなりません。

于 2009-06-02T19:27:52.567 に答える