2

我想知道是否有人可以阐明这种浏览器行为:

我有一个带有 textarea 的表单,它通过 XHR(使用 jQuery,我也尝试使用纯 XMLHttpRequest 只是为了排除 jQuery 并且结果是相同的)或通过表单的“老式”方式提交到服务器提交。在这两种情况下都会使用 method="POST"。两种方式都提交到服务器上的同一个脚本。

现在有趣的部分:如果您通过 XHR 提交,换行符将被传输为“%0A”(或 \n,如果我没记错的话),如果您以常规方式提交,它们将被传输为“%0D%0A”(或\r\n)。当然,这会在服务器端引起一些问题,但这不是这里的问题。我只想知道为什么会有这种差异?不管你使用什么提交方法,新行不应该是一样的吗?还有哪些其他差异(如果有)?

4

2 回答 2

2

RFC2616 (HTTP1.1) 的 3.7.1 部分中,它允许 \r\n,\r,\n 表示换行符。

HTTP 放宽了这一要求,并允许传输具有纯 CR 或 LF 的文本媒体,当它对整个实体主体一致完成时,它代表一个换行符。HTTP 应用程序必须接受 CRLF、裸 CR 和裸 LF 作为通过 HTTP 接收的文本媒体中的换行符的代表。

但这不适用于控制结构:

这种关于换行的灵活性仅适用于实体主体中的文本媒体;在任何 HTTP 控制结构(例如标头字段和多部分边界)中,不得用裸 CR 或 LF 替换 CRLF。

于 2009-06-02T19:27:52.567 回答
2

XMLHttpRequest 将在发送 XML 时从流中去除 CR 字符。这与指示将 CRLF 规范化为简单 LF 的 XML 规范一致。

因此,如果您将内容打包为 XML 并通过 XHR 发送,您将丢失 CR。

于 2009-06-02T19:32:05.053 回答