HTTP协议详解

2024年 2月 20日 115.9k 0

HTTP(Hypertext Transfer Protocol)是一种用于在计算机之间传输超文本的协议。

它是构建在TCP/IP协议之上的应用层协议,被用于在Web浏览器和Web服务器之间传递信息。

HTTP协议是一种无状态、无连接的协议,它在每个请求和响应之间是独立的,不保留先前的状态信息。

图片[1]-HTTP协议详解-不念博客

1. 请求与响应

HTTP 协议的通信模型基于请求-响应的方式。客户端发送一个请求给服务器,然后服务器返回一个响应。

请求(Request)

一个 HTTP 请求由客户端发起,通常由一个请求行、请求头部、空行和请求体组成。

请求行

请求行包含请求的方法、请求的URL和HTTP协议的版本。

GET /index.html HTTP/1.1

在这个例子中:

  • GET: 请求方法,表示获取指定资源。
  • /index.html: 请求的资源路径。
  • HTTP/1.1: 使用的HTTP协议版本。

请求头部

请求头部包含关于请求的附加信息,例如客户端类型、所支持的数据类型等。

Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

空行

空行表示请求头部结束,后面的数据都是请求体。

   

请求体

请求体包含实际发送给服务器的数据,比如 POST 请求中的表单数据。

username=johndoe&password=secret

响应(Response)

服务器接收到请求后,返回一个响应给客户端。一个 HTTP 响应由一个状态行、响应头部、空行和响应体组成。

状态行

状态行包含HTTP协议的版本、一个状态码和相应的状态消息。

HTTP/1.1 200 OK

在这个例子中:

  • HTTP/1.1: 使用的HTTP协议版本。
  • 200: 状态码,表示请求成功。
  • OK: 状态消息,提供关于状态码的简短说明。

响应头部

响应头部包含关于响应的附加信息,例如服务器类型、响应的数据类型等。

Content-Type: text/html
Content-Length: 1024

空行

空行表示响应头部结束,后面的数据都是响应体。

   

响应体

响应体包含实际返回给客户端的数据,比如 HTML 内容。

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

2. HTTP 方法

HTTP 定义了一些常见的请求方法,每个方法表示一种对资源的操作。以下是一些常见的 HTTP 方法:

  • GET: 请求获取指定资源。
  • POST: 提交数据进行处理,通常用于提交表单。
  • PUT: 请求服务器存储一个资源,通常要指定存储的位置。
  • DELETE: 请求服务器删除指定资源。
  • HEAD: 类似于 GET 请求,但服务器只返回头部信息,不返回实际内容。
  • OPTIONS: 请求获取服务器支持的 HTTP 方法。

3. URL结构

URL(Uniform Resource Locator)是用于标识互联网上资源的地址。它包含了协议、主机、端口、路径和查询参数等信息。

http://www.example.com:80/index.html?name=john&age=25
  • http: 协议。
  • www.example.com: 主机名。
  • 80: 端口号。
  • /index.html: 路径。
  • ?name=john&age=25: 查询参数。

4. 状态码

HTTP 响应状态码用于表示服务器对请求的处理结果。常见的状态码有:

  • 2xx(成功): 表示请求被成功接收、理解、接受。
  • 3xx(重定向): 要完成请求,需要进一步操作,通常用于重定向。
  • 4xx(客户端错误): 请求包含错误或无法完成,客户端需要处理。
  • 5xx(服务器错误): 服务器在处理请求的过程中发生错误。

例如,常见的状态码:

  • 200 OK: 请求成功。
  • 201 Created: 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立。
  • 204 No Content: 服务器成功处理了请求,但不需要返回任何实体内容。
  • 301 Moved Permanently: 被请求的资源已永久移动到新位置。
  • 302 Found: 请求的资源现在临时从不同的 URI 响应请求。
  • 304 Not Modified: 自从上次请求后,请求的网页未修改过。
  • 400 Bad Request: 服务器无法理解该请求。
  • 401 Unauthorized: 请求要求身份验证。
  • 403 Forbidden: 服务器理解请求,但拒绝执行。
  • 500 Internal Server Error: 服务器遇到了一个未曾预料的状况,无法完成对请求的处理。

5. 报文头部

HTTP 报文头部包含了请求和响应的元信息,提供有关报文主体、服务器和客户端信息的信息。

常见的请求头部:

  • Host: 指定请求资源所在的服务器。
  • User-Agent: 发起请求的用户代理,通常是浏览器。
  • Accept: 客户端能够处理的媒体类型。

常见的响应头部:

  • Content-Type: 返回的数据类型,例如 text/html、application/json。
  • Content-Length: 返回的数据长度。
  • Server: 服务器信息。

6. 报文体

HTTP 报文体包含实际的数据,对于请求报文,报文体可能包含用户提交的表单数据等信息;

对于响应报文,报文体包含了服务器返回的实际数据,比如 HTML 内容。

总结

HTTP协议是Web世界的基石,了解其基本原理对于Web开发者至关重要。

本文介绍了 HTTP 的基本请求和响应结构、常见的请求方法、URL 结构、状态码、报文头部和报文体等基本概念。

相关文章

如何在 Linux 中使用 logname 命令?
为什么有 HTTPS?HTTPS 如何实现安全通信?
HTTPS的TSL握手流程是什么
华为无线网络射频调优及WLAN跨VLAN的三层漫游示例
502错误是什么、应该怎么排查?
HTTP3为什么抛弃了经典的TCP,而选择QUIC

发布评论