代码之家  ›  专栏  ›  技术社区  ›  Jan Hančič

新行字符的提交方式不同

  •  2
  • Jan Hančič  · 技术社区  · 15 年前

    我想知道是否有人能对这种浏览器行为有所了解:

    我有一个带有文本区域的表单,它通过xhr(使用jquery,我还尝试使用普通的xmlhttpRequest来排除jquery,结果是相同的)或通过表单提交的“老式”方式提交到服务器。在这两种情况下都使用了method=“post”。 两种方法都提交到服务器上的同一个脚本。

    有趣的是:如果您通过XHR提交,则新行字符将被传输为“%0A”(如果我没有弄错,则为\n),如果您以常规方式提交,则它们将被传输为“%0D%0A”(或\r\n)。 当然,这会导致服务器端出现一些问题,但这不是问题所在。 我只想知道为什么会有这种差异?不管您使用什么方法提交新行,都不应该传输相同的新行吗?还有什么区别(如果有的话)?

    2 回复  |  直到 15 年前
        1
  •  2
  •   AnthonyWJones    15 年前

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

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

        2
  •  2
  •   CookieOfFortune    15 年前

    第3.7.1部分 RFC2616 (http1.1),它允许\r\n、\r\n代表换行。

    HTTP放宽了这一要求,并允许 纯CR或LF单独代表一行的文本媒体传输 当对整个实体始终执行时中断。超文本传输协议 应用程序必须接受CRLF、裸CR和裸LF作为 代表通过HTTP接收的文本媒体中的换行符。

    但这不适用于控制结构:

    这种灵活性 换行符仅适用于实体正文中的文本媒体;裸CR 或LF不能在任何HTTP控件内替换为CRLF 结构(如头字段和多部分边界)。