新行字符的提交方式不同

时间:2009-06-02 19:22:56

标签: html ajax request

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

我有一个带有textarea的表单,通过XHR提交给服务器(使用jQuery,我也尝试使用简单的XMLHttpRequest来管理jQuery,结果是相同的)或“老式的”通过表单提交的方式。在两种情况下都使用method =“POST”。 两种方式都提交到服务器上的相同脚本。

现在有趣的部分:如果您通过XHR提交,新行字符将被转移为“%0A”(如果我没有记错,则为\ n),如果您提交常规方式,则将其转移为“%0D%0A” “(或\ r \ n)。 当然,这会在服务器端引起一些问题,但这不是问题。 我想知道为什么会有这种差异?无论您使用何种提交方式,新线路都不应该相同地转移吗?还有什么其他差异(如果有的话)?

2 个答案:

答案 0 :(得分:2)

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

  

HTTP放宽了这个要求并允许      传输单纯CR或LF的文本媒体代表一条线      当整个实体 - 身体一致地完成时中断。 HTTP      应用程序必须接受CRLF,裸CR和裸LF      代表通过HTTP接收的文本媒体中的换行符。

但这不适用于控制结构:

  

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

答案 1 :(得分:2)

XMLHttpRequest将从流中发送XML剥离CR字符。这与XML规范一致,表明CRLF被标准化为简单的LF。

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