Http的首部和载荷的分割符是"\r\n"还是"\n\n"

图片.png

看 mozilla 的 HTML文档 的时候,并没有提到起始行、请求头、空行、消息体中间的分隔符应该用 "\r\n" 还是 "\n\n"

又看到下面两篇文章,用 "\r\n" 还是 "\n\n" 都有!
How To Use Linux epoll with Python

import socket

EOL1 = b'\n\n'
EOL2 = b'\n\r\n'
response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n'
response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n'
response += b'Hello, world!'

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind(('0.0.0.0', 8080))
serversocket.listen(1)

connectionclient, address = serversocket.accept()
request = b''
while EOL1 not in request and EOL2 not in request:
    request += connectionclient.recv(1024)
print(request.decode())
connectionclient.send(response)
connectionclient.close()

serversocket.close()

Http的首部和载荷的分割符是"\r\n"还是"\n\n"

无意中我在度娘上漫无目的建索有用的信息时,发现有人把Http的首部和载荷分割符写作“\n\n”,但是我记得这个分割应该是"\r\n"(CRLF行),于是司马当活马试了一下,当我把程序再次烧录后,我看到了等待已久http/1.x 200 ok(终于可以直面产品狗了....),在又增加了应用层代码后,终于顺利的完成了这个项目。
————————————————
版权声明:本文为CSDN博主「火云邪神第二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aa16222...

请问用 "\r\n" 还是 "\n\n" 是未定义行为吗?取决于具体的浏览器、服务器实现是吗?

阅读 2.7k
1 个回答

\r\nRFC 2616 的 2.2 章节中有定义的。

HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all
protocol elements except the entity-body (see appendix 19.3 for
tolerant applications). The end-of-line marker within an entity-body
is defined by its associated media type, as described in section 3.7.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏