1、HTTP介绍
HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 是基于TCP/IP 进行数据的通信,通常使用端口 80/8080。HTTP可以传输多种数据类型,如html文件、图片、视频等数据。传输的数据类型是多种类型的,如:text/html; charset=UTF-8
, application/json等。
(HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。)
2、HTTP消息结构
HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。HTTP消息分为两种类型:请求消息和响应消息。
一个 HTTP 客户端是一个应用程序(Web 浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的。
客户端请求的报文格式如下
1.请求行
(1)请求方法:
上述的 GET, POST 和 HEAD 方法属于HTTP 1.0的版本,其他的方法数据HTTP1.1新增的方法。
(2) 请求 URI(统一资源标识符):请求的资源路径,通常包括主机名、端口号(如果非默认)、路径和查询字符串。
(3)HTTP 版本:如 HTTP/1.1 或 HTTP/2。
请求行的格式示例:
GET /index.html HTTP/1.1
2.请求头
包含了客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等。常见的请求头如下:
3.空行
请求头和请求体之间的分隔符,表示请求头的结束。
4.请求体(可选)
在某些类型的HTTP请求(如 POST 和 PUT)中,请求体包含要发送给服务器的数据。
服务端的响应消息格式
1.状态行
(1) HTTP 版本:与请求消息中的版本相匹配。
(2)状态码:三位数,表示请求的处理结果,如 200 表示成功,404 表示未找到资源。
常用的状态码如下:
1xx | 信息,服务器收到请求,需要请求者继续执行操作 |
2xx | 成功,操作被成功接收并处理 |
3xx | 重定向,需要进一步的操作以完成请求 |
4xx | 客户端错误,请求包含语法错误或无法完成请求 |
5xx | 服务器错误,服务器在处理请求的过程中发生了错误 |
(3)状态信息:状态码的简短描述。
状态行的格式示例:
HTTP/1.1 200 OK
2.响应头
包含了服务器环境信息、响应体的大小、服务器支持的压缩类型等。常见的响应头信息如下:
Date | 响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT |
Server | 服务器软件的名称和版本。例如:Apache/2.4.1 (Unix) |
Content-Type | 响应体的媒体类型(MIME类型),如text/html; charset=UTF-8 , application/json 等。 |
Content-Length | 响应体的大小,单位是字节。例如:3145 |
Content-Encoding | 响应体的压缩编码,如 gzip , deflate 等。 |
Content-Language | 响应体的语言。例如:zh-CN |
Cache-Control | 控制响应的缓存行为, 如 no-cache 表示必须重新请求。 |
Connection | 管理连接的选项,如keep-alive 或close ,keep-alive 表示连接不会在传输后关闭。。 |
Set-Cookie | 设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure |
Expires | 响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT |
HTTP1.0中默认使用的是短链接,HTTP1.1中默认使用的是长链接。短链接的Connection值设置为close;长链接的Connection值设置为keep-alive。
短链接是指每次的HTTP请求都需要重新链接,长链接是指HTTP的请求可以复用上次请求已连接的socket套接字进行通信。
3.空行
响应头和响应体之间的分隔符,表示响应头的结束。
4.响应体(可选)
包含服务器返回的数据,如请求的网页内容、图片、JSON数据等。
消息响应举例如下:
3、HTTP和TCP的区别
HTTP(Hypertext Transfer Protocol)和TCP(Transmission Control Protocol)在网络协议栈中处于不同的层次,它们各自有不同的职责和特性。以下是HTTP和TCP之间的主要区别:
- 协议层次:
- TCP是传输层协议,它负责在源端和目的端之间建立、管理和终止连接,确保数据的可靠传输。
- HTTP是应用层协议,它使用TCP作为传输层协议来发送和接收数据。HTTP定义了如何格式化请求和响应消息,以及如何在Web上实现超文本链接、缓存等功能。
- 职责和特性:
- TCP:
- 提供面向连接的、可靠的、基于字节流的服务。
- 使用序列号、确认和重传机制确保数据的顺序和完整。
- 支持全双工通信,允许在建立连接后,双方同时发送和接收数据。
- 提供了流量控制、拥塞控制等机制,以优化网络性能。
- HTTP:
- 定义了客户端和服务器之间交换消息的格式和规则。
- 提供了请求/响应模型,客户端发送请求,服务器返回响应。
- 支持多种请求方法(如GET、POST、PUT、DELETE等)和状态码(如200 OK、404 Not Found等)。
- 支持持久连接(HTTP/1.1),允许在一个TCP连接上发送多个请求和响应,减少建立和关闭连接的开销。
- TCP:
- 通信过程:
- 当使用HTTP进行通信时,首先需要在客户端和服务器之间建立一个TCP连接(HTTP/1.0或更早版本中通常是每次请求建立一次连接,HTTP/1.1和更高版本支持持久连接)。
- 建立连接后,客户端发送HTTP请求消息给服务器,服务器收到请求后处理并返回HTTP响应消息给客户端。
- 通信完成后,TCP连接可以被关闭或保持打开状态以支持后续的请求。
- 安全性和加密:
- TCP本身不提供加密或身份验证功能,它只负责数据的可靠传输。
- HTTP可以通过使用HTTPS(HTTP Secure)来提供加密和身份验证功能。HTTPS在HTTP的基础上增加了TLS/SSL协议,用于加密传输的数据,保护通信的机密性和完整性。
- 用途和场景:
- TCP可以用于各种需要可靠传输的场景,如文件传输、邮件发送、数据库连接等。
- HTTP主要用于Web通信,是互联网上的主要协议之一,用于浏览网页、传输文件、执行Web服务等。
HTTP和TCP在网络协议栈中处于不同的层次,各自负责不同的任务。HTTP使用TCP作为传输层协议来确保数据的可靠传输,并在其上定义了如何格式化请求和响应消息以及如何在Web上实现各种功能。
上述文章部分内容参考于:
HTTP/HTTPS 简介 | 菜鸟教程 (runoob.com)
HTTP请求、响应报文格式_http 响应包的格式-CSDN博客