为什么我们需要在新行字符"/n "前加一个回车符"/r"?

问题描述 投票:0回答:1

在下面的代码中,HTTP协议需要两个换行符,但为什么需要回车符呢?为什么我们不能直接加上两个"/n "然后发送请求?

import socket
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect(("data.pr4e.org",80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode() # here
mysock.send(cmd)
while True:
    data = mysock.recv(512)
    if len(data) > 0:
        print(data.decode())
    else :
        break
mysock.close()
python python-3.x networking newline carriage-return
1个回答
1
投票

因为这就是 HTTP协议 被定义。更具体地说,HTTP 1.0定义了一个请求的 这样:

Request        = Simple-Request | Full-Request

Full-Request   = Request-Line             
                 *( General-Header       
                  | Request-Header      
                  | Entity-Header )    
                 CRLF
                 [ Entity-Body ]

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

Full-Request,这是任何HTTP 1.0兼容的客户端都应该使用的(简单请求是HTTP 0.9,已被废弃)需要有两个 CRLF 代币(其中一个是在 Request-Line). A CRLF 令牌是两个字节 \r\n. 因此,在你的例子中,字符串的结尾需要用 \r\n\r\n.

这个设计选择在HTTP 1.1中得到了保留。


1
投票

因为这就是HTTP协议的工作方式。

requeststatus行和头文件都必须以(也就是回车后的换行)结束。空行必须只由且没有其他空格组成。

https:/en.wikipedia.orgwikiHTTP_message_body

© www.soinside.com 2019 - 2024. All rights reserved.