📜  HTTP消息(1)

📅  最后修改于: 2023-12-03 14:42:01.382000             🧑  作者: Mango

HTTP消息

HTTP消息是由客户端向服务器发送的报文和服务器向客户端发送的响应报文,每个报文都是由首部和可选的消息体组成。HTTP协议通过这些消息来传递请求和响应。

HTTP消息格式

HTTP消息由其首部和消息体组成,一般的格式如下:

<HTTP消息的首部>
<空行>
<HTTP消息的消息体>

其中空行不是消息体的一部分,只是用来分隔消息头和实体。 HTTP的请求报文和响应报文的格式是略有不同的,下面将分别进行介绍。

HTTP请求报文

HTTP请求报文由请求方法,请求URI,HTTP版本,请求头部和请求主体组成。其中请求方法,URI和HTTP版本一起构成了HTTP请求行。

HTTP请求行的一般格式如下:

<方法> <请求URI> HTTP/<版本>

以下是一个具体的HTTP请求报文的例子:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept-Language: en-US,en;q=0.5
Connection: keep-alive

上面的例子中,请求行是 GET /index.html HTTP/1.1,请求方法是GET,请求URI是/index.html,HTTP版本是1.1。请求头部包括了Host,User-Agent,Accept-Language和Connection四个字段。最后一个空行表示请求头结束,之后的内容是请求主体。

HTTP响应报文

HTTP响应报文由HTTP版本,状态码,响应状态短语,响应头部和响应主体组成。

HTTP响应行的一般格式如下:

HTTP/<版本> <状态码> <响应状态短语>

以下是一个具体的HTTP响应报文的例子:

HTTP/1.1 200 OK
Date: Sun, 03 Oct 2021 14:15:19 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Tue, 30 Oct 2007 17:00:02 GMT
ETag: "17dc6-aef-457b5b0babe80"
Accept-Ranges: bytes
Content-Length: 3943
Connection: close
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
  <title>Example Website</title>
</head>
<body>
  <h1>Welcome to My Website</h1>
  <p>This is an example website.</p>
</body>
</html>

上面的例子中,响应行是 HTTP/1.1 200 OK,HTTP版本是1.1,状态码是200,响应状态短语是OK。响应头部包括了Date、Server、Last-Modified、ETag、Accept-Ranges、Content-Length和Content-Type七个字段。最后一个空行表示响应头结束,之后的内容是响应主体。

HTTP消息实例

以下是一个完整的HTTP消息的示例:

POST /login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
Origin: http://www.example.com
Connection: keep-alive
Referer: http://www.example.com/
Cookie: PHPSESSID=1234567890abcdef1234567890abcdef

username=user&password=pass

HTTP/1.1 200 OK
Date: Sun, 03 Oct 2021 14:15:19 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Tue, 30 Oct 2007 17:00:02 GMT
ETag: "17dc6-aef-457b5b0babe80"
Accept-Ranges: bytes
Content-Length: 3943
Connection: close
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
  <title>Example Website</title>
</head>
<body>
  <h1>Welcome to My Website</h1>
  <p>This is an example website.</p>
</body>
</html>

在上面的示例中,请求报文是一个POST请求,请求的URI为/login,HTTP版本为1.1,请求头部包含了Host、User-Agent、Accept、Content-Type、Content-Length、Origin、Connection、Referer和Cookie。请求主体为username=user&password=pass,表示提交了一个表单。服务器返回的响应报文的状态码是200,响应头部包含了Date、Server、Last-Modified、ETag、Accept-Ranges、Content-Length和Content-Type,响应主体是一个HTML页面。

总结

HTTP消息是客户端和服务器之间进行数据通信的关键。一个HTTP请求或响应都包括了首部和消息体。了解HTTP消息格式、请求报文和响应报文的内容能帮助程序员更好地理解HTTP协议,从而更好地编写HTTP相关的程序。