首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要同时检查“\r\n”和“\n”作为HTTP头/内容分隔符?

是否需要同时检查“\r\n”和“\n”作为HTTP头/内容分隔符?
EN

Stack Overflow用户
提问于 2014-11-07 23:32:23
回答 2查看 2.4K关注 0票数 2

接受的答案在这页上说,我们应该检查\r\n\r\n\n\n的HTTP响应,作为将头和内容分开的顺序。

比如:

代码语言:javascript
复制
HTTP/1.1 200 Ok\r\n
Server: AAA\r\n
Cache-Control: no-cache\r\n
Date: Fri, 07 Nov 2014 23:20:27 GMT\r\n
Content-Type: text/html\r\n
Connection: close\r\n\r\n   <--------------

或者:

代码语言:javascript
复制
HTTP/1.1 200 Ok\r\n
Server: AAA\r\n
Cache-Control: no-cache\r\n
Date: Fri, 07 Nov 2014 23:20:27 GMT\r\n
Content-Type: text/html\r\n
Connection: close\n\n   <--------------

在我在Wireshark中看到的所有响应中,服务器使用\r\n\r\n

真的有必要同时检查一下吗?哪些服务器/协议版本将使用\n\n

EN

回答 2

Stack Overflow用户

发布于 2021-03-06 13:20:07

我从\r\n\r\n开始,但很快就找到了一些使用\n\n的网站。看看一些专业图书馆,比如curl,他们也可以处理\n\n,即使它不符合标准。

我不太了解curl代码,但在这里可以看到:https://github.com/curl/curl/blob/7a33c4dff985313f60f39fcde2f89d5aa43381c8/lib/http.c#L1406-L1413

代码语言:javascript
复制
/* find the end of the header line */
  end = strchr(start, '\r'); /* lines end with CRLF */
  if(!end) {
    /* in case there's a non-standard compliant line here */
    end = strchr(start, '\n');

    if(!end)
      /* hm, there's no line ending here, use the zero byte! */
      end = strchr(start, '\0');
  }

考虑到这一点,我认为即使是\0\0也会被处理。

所以:

  • 去处理外面的“任何事情”,那么是的。
  • 如果你想严格遵守标准,那就不行。
票数 1
EN

Stack Overflow用户

发布于 2014-11-08 16:00:31

HTTP规范说:

消息头字段的行终止符是序列CRLF.但是,我们建议应用程序在解析此类标头时,将单个LF识别为行结束符,而忽略前面的CR。

在实践中,我从未见过带有CR行分隔符的web服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26811822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档