目录
[1.1. 概述](#1.1. 概述)
[1.2. HTTP与TCP的区别](#1.2. HTTP与TCP的区别)
一、HTTP简介
1.1. 概述
超文本传输协议(HypertextTransfer Protocol,HTTP),用于在客户端和服务端之间传输超文本文档(视频、图片、位置数据等)和其他资源。其位于TCP/IP模型的应用层,依赖于TCP提供的可靠数据传输服务。是一个无状态的简单的请求-响应协议,每次请求和响应后不保留任何状态。HTTP定义了数据的格式,如客户端请求和服务端响应头、URL结构、编码格式等。
1.2. HTTP与TCP的区别
|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
| | HTTP | TCP |
| 定义 | 以TCP为基础,用于在客户端和服务端之间传输超文本文档(视频、图片、位置数据等)和其他资源 | 负责在网络上可靠地传输数据。 |
| TCP/IP模型层次 | 应用层,定义Web通信的规则 | 传输层,提供底层的数据传输服务 |
| 连接方式 | 无状态的连接,每次请求和响应之后不保留任何状态。 | 有状态的长连接,面向连接的协议,通过三次握手建立连接 |
| 数据传输方式 | 定义了数据的格式,如请求和响应头、URL结构和编码方式等 | 提供字节流服务,保证数据传输的顺序和可靠型 |
| 应用场景 | 用于在客户端和服务端之间传输超文本文档(视频、图片、位置数据等)和其他资源 | 支持各种不同的应用,包括但不限于Web通信 |
| 备注 | Http协议是建立在TCP协议基础之上的。当浏览器需要从服务器 获取网页数据的时候,会发出一次http请求。Http通过TCP建立起一个到服务器的通道。 当一个网页完成之后,客户端和服务器端之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个页面时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件中设定这个时间 | |
二、HTTP迭代版本
-
HTTP 0.9
-
简单请求方法,仅限于文字传输的无序协议
-
HTTP 1.0
-
支持0.9版本的简单请求方法和包含客户端HTTP版本的完整GET请求。面向事务的应用层协议,广泛应用于Web浏览器和服务器。
-
HTTP 1.1
-
双方规定了连接方式和连接类型,但并没有过多考虑到通信连接的速率和效率。
-
HTTP 2.0
-
HTTP2.0的前身是HTTP1.0和HTTP1.1。虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范十分庞大。网络协议新版本并不会马上取代旧版本。实际上,HTTP 1.0和HTTP1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。
-
HTTP 3.0
-
与之前依赖于成熟的TCP的版本不同,HTTP3.0使用QUIC,一种基于UDP的多路传输协议。HTTP3.0具有更低的延迟和更快的加载速度。
三、HTTP请求头
客户端------>请求------>服务端
HTTP协议的一部分,用于在客户端和服务端之间传递附加信息(包含了请求、客户端环境或请求的上下文等信息)
accept: application/json, text/javascript, */*; q=0.01 浏览器可接受的MIME类型
accept-encoding: gzip, deflate, br, zstd 浏览器能够进行解码的数据编码方式
accept-language: zh-CN,zh;q=0.9 浏览器希望的语言类型
cookie: PHPSESSID=bdq4ccqp17svf9dp87onjaov2n; 最重要的请求头之一
Request URL: https://blog.51cto.com/blog/user-stat?id=5342541 请求的资源地址
Request Method: GET 请求方法
Status Code: 200 OK 服务端响应请求的状态
Remote Address: 183.131.117.207:443 请求的服务IP地址
Referrer Policy: no-referrer-when-downgrade
四、HTTP响应
服务端------响应------客户端
指定了客户端请求服务端获得什么样的响应
cache-control: must-revalidate, no-cache, no-store 缓存控制
content-encoding: gzip 响应内容编码格式
content-type: application/json; charset=UTF-8 响应内容类型
date: Fri, 06 Sep 2024 05:45:38 GMT 响应时间
eo-cache-status: MISS
eo-log-uuid: 17962474739074623387
expires: Thu, 19 Nov 1981 08:52:00 GMT
load-balancing: blog
origin-agent-cluster: ?0
五、请求头中的请求方式
GET:请求指定的资源,多次执行相同的GET请求应该确保幂等/产生相同的结果。
POST:向指定的资源提交数据,以便根据所提供的数据创建/更新资源。POST请求不是幂等的,每次执行相同的POST请求可能会产生不同的结果。
PUT:此方法用于完整地更新指定的资源。由于PUT请求是幂等的,多次执行相同的PUT请求应该产生相同的结果。
DELETE:此方法用于删除指定的资源。
HEAD:此方法与GET方法类似,只是服务器在响应中只返回HTTP头部,而不返回实际的数据。这用于检查资源的元数据。
OPTIONS:此方法用于获取指定的资源所支持的通信选项。这可以用于CORS(跨源资源共享)检查。
PATCH:此方法用于对资源进行部分更新。
六、响应状态码
- 信息响应(100-199)
- 成功响应(200-299)
- 重定向(300-399)
- 客户端错误(400-499)
- 服务器错误(500-599)
|-----|-----------------------|--------------------------|
| 状态码 | 信息 | 具体描述 |
| 200 | OK | 请求已成功,并且返回了请求的资源。 |
| 204 | No Content | 请求已成功处理,但没有内容返回。 |
| 206 | Partial Content | 服务器已经完成了部分GET请求。 |
| 301 | Moved Permanently | 请求的资源已被永久移动到新的URL。 |
| 302 | Found | 请求的资源临时移动到新的URL。 |
| 304 | Not Modified | 自上次请求后,请求的资源未修改过。 |
| 400 | Bad Request | 服务器无法处理请求,因为客户端的请求语法错误。 |
| 401 | Unauthorized | 请求需要用户验证。 |
| 403 | Forbidden | 服务器拒绝请求。 |
| 404 | Not Found | 服务器无法找到请求的资源。 |
| 500 | Internal Server Error | 服务器遇到了意料之外的情况,导致它无法完成请求。 |
| 503 | Service Unavailable | 服务器暂时无法处理请求,可能是因为过载或维护。 |