文章

HTTP

什么是Http

HTTP(超文本传输协议)是一个基于TCP/IP实现的,请求-响应的,无状态的,应用层协议。标准的客户端-服务器模型。HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,首先,客户端会向服务器发送请求消息,请求消息包含的内容是“对什么”和“进行怎样的操作”两个部分。其中相当于“对什么”的部分称为URI(统一资源标识符),一般来说,URI的内容是一个存放网页数据的文件名或者是一个CGI程序的文件名。而相当于“进行怎样的操作”的部分称为方法或HTTP动词。 OSI7层参考模型

层号OSI层描述协议示例
7应用层应用数据HTTP/SMTP
6表示层数据表示/转换/加密ssl/tls
5会话层多连接管理-
4传输层包或流的可靠传输TCP/UDP
3网络层网络节点间的路由与数据转发IP
2数据链路层可靠的本地数据连接(LAN)以太网
1物理层物理连接(电缆)CAT5

HTTP的主要方法

  • GET:获取URI指定的信息。
  • POST:向服务器发送数据,一般用于发送表单填写的数据等情况下。
  • DELETE:删除URI指定的服务器上的文件。
  • PUT:替换URI指定的服务器上的文件。
  • HEAD:和GET基本相同,不过他只返回HTTP的消息头,用于获取文件最后更新时间等信息。
  • OPTIONS:用于通知和查询通信选项。

HTTP请求消息

HTTP消息的格式是有严格规定的,首先请求消息的第一行是请求行 ,接下来的部分是消息头,每行包含一个头字段,消息头的行数根据具体情况可变,直到一个空行结束,空行下面就是消息体,其中包含客户端向服务器发送的数据。

1
2
3
4
5
6
7
POST /BOOK/1 HTTP/1.1
Connection: keep-alive
Content-Length: 98
Content-Type: text/html; charset=utf-8
Date: Wed, 31 May 2023 15:48:30 GMT
<空行>
<消息体>

HTTP响应消息

服务器在完成自己的工作后,会将结果存放在响应消息中。

1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Server: Apache
Connection: close
Content-Length: 98
Content-Type: text/html; charset=utf-8
Date: Wed, 31 May 2023 15:48:30 GMT
<空行>
<消息体>

在响应消息的开头有一个状态码,它用来表示操作的执行结果是成功还是发生了错误。状态码的第一位数字表示状态类型,第二,三位数字表示具体的情况。

状态码含义
1xx告知请求的处理进度和情况
2xx成功
3xx表示需要进一步操作,重定向等
4xx客户端错误
5xx服务端错误
本文由作者按照 CC BY 4.0 进行授权