一、前言
从今天开始,就要启动后端的学习了,Springboot会贯穿到底,一定要跟着小编严谨的去搭建Springboot环境,依赖添加的过程可能需要2分钟左右,读者们要耐心等待一下,搭建好Springboot之后才算正式的开始web后端的学习,http相关的内容仅供了解。
如果大家准备好的话那就一起开启我们的后端之旅。
二、springboot模块创建
第一步:右键单击->新建->模块
第二步:Springboot->按照顺序进行填写->下一步
注:jdk和java版本号保持一致
第三步:选择版本->勾选Spring Web->创建
三、http协议
3.1 HTTP 的特点和概述
无连接性:
- HTTP 协议是无连接的,即每次请求都是独立的,服务器处理完一个请求后会断开连接,下一个请求需要重新建立连接。这种特性使得每个请求都是独立的,不会保留状态信息,适合分布式的、基于请求-响应模型的网络环境。
无状态性:
- HTTP 协议是无状态的,即服务器不会保存每个客户端的请求信息。每次请求都是独立的,服务器处理完后即忘记。这要求客户端每次请求都要提供必要的信息,如 Cookie、Session ID 等,以维持状态。
简单和灵活:
- HTTP 协议简单直观,使用起来灵活。请求和响应都是文本形式,易于阅读和调试。它支持各种数据格式,如文本、图片、音频、视频等,使其成为广泛应用于互联网上的基础协议。
基于请求-响应模型:
- HTTP 是基于请求-响应模型的协议。客户端发送请求给服务器,请求中包含方法(如 GET、POST)、资源路径、协议版本等信息;服务器根据请求进行处理,并返回响应,响应中包含状态码、响应头和响应体等信息。
状态码和头部信息:
- HTTP 使用状态码来表示请求的处理结果,如200表示成功,404表示未找到资源,500表示服务器内部错误等。同时,HTTP 使用头部信息(Header)来传递额外的请求和响应信息,如内容类型、长度、Cookie等。
安全性和扩展性:
- HTTP 协议本身不具备加密功能,通信内容可以被窃听和篡改,为了提高安全性,可以在 HTTP 上加入 SSL/TLS 协议形成 HTTPS。HTTP 协议也支持通过扩展头部和方法来实现功能的扩展,如缓存控制、身份认证等。
3.2 请求协议
HTTP 请求协议是客户端向服务器发送请求时所遵循的规范和格式。它定义了请求的结构、方法、请求头部、请求体等内容。
请求行(Request Line):
请求行包含了请求的方法、资源路径和协议版本,格式如下:
METHOD PATH VERSION
- METHOD:请求方法,例如 GET、POST、PUT、DELETE 等,用来指定请求的类型和操作方式。
- PATH:请求的资源路径,即服务器上请求资源的位置。
- VERSION:HTTP 协议的版本号,通常是 HTTP/1.1 或 HTTP/2。
示例:
GET /index.html HTTP/1.1
请求头部(Request Headers):
请求头部包含了关于请求的各种信息,如客户端信息、请求内容类型、认证信息等。每个头部字段都以键值对形式出现,格式如下:
HeaderName: Value
常见的请求头部包括:
- Host:请求的主机名,指示服务器请求的目标。
- User-Agent:发送请求的用户代理(浏览器、爬虫等)信息。
- Content-Type:请求体的类型(仅在有请求体时使用)。
- Authorization:认证信息,用于访问受保护的资源。
示例:
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
请求体(Request Body):
某些请求(如 POST、PUT)可能会包含数据或内容,这些数据在请求体中传输。请求体的格式和内容根据请求的方法和需要而有所不同,通常是文本、JSON 数据或二进制数据。
示例:
POST /submit-form HTTP/1.1
Host: www.example.com
Content-Type: application/json
{
"username": "user123",
"password": "pass123"
}
HTTP 请求的基本流程:
- 建立连接:客户端与服务器建立 TCP 连接。
- 发送请求:客户端向服务器发送格式正确的 HTTP 请求。
- 服务器处理:服务器接收、解析并处理请求。
- 发送响应:服务器生成并发送 HTTP 响应给客户端。
3.3 响应协议
HTTP 响应协议是服务器响应客户端请求时遵循的规范和格式,它定义了响应的结构、状态码、响应头部、响应体等内容。
状态行(Status Line):
状态行包含了响应的协议版本、状态码和状态消息,格式如下:
VERSION STATUS_CODE REASON_PHRASE
- VERSION:HTTP 协议的版本号,通常是 HTTP/1.1 或 HTTP/2。
- STATUS_CODE:三位数字的状态码,表示服务器对请求的处理结果。
- REASON_PHRASE:对状态码的简短描述,方便人类阅读,但实际上并不影响机器处理。
HTTP/1.1 200 OK
响应头部(Response Headers):
响应头部包含了关于响应的各种信息,如服务器类型、响应内容类型、日期等。每个头部字段同样以键值对形式出现,格式如下:
HeaderName: Value
常见的响应头部包括:
- Content-Type:响应体的类型。
- Content-Length:响应体的长度。
- Date:响应的日期和时间。
- Server:服务器的软件信息。
- Set-Cookie:设置客户端的 Cookie 信息。
示例:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Date: Sat, 10 Jul 2024 12:00:00 GMT
Server: Apache/2.4.38 (Ubuntu)
响应体(Response Body):
响应体包含了服务器返回给客户端的实际内容,格式和内容根据响应的内容类型而有所不同,可以是文本、HTML、JSON 数据或二进制数据等。
示例:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Example.com</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a sample HTML response.</p>
</body>
</html>
HTTP 响应的基本流程:
- 接收请求:服务器接收客户端的 HTTP 请求。
- 处理请求:服务器处理请求,生成需要的数据和响应。
- 发送响应:服务器将响应的状态行、头部和体发送给客户端。
3.4 协议解析
1. 请求方法(Request Methods)
HTTP 定义了几种请求方法,常见的包括:
- GET:请求指定的资源。
- POST:向指定资源提交数据进行处理请求(如提交表单或上传文件)。
- PUT:上传指定的资源。
- DELETE:删除指定的资源。
- HEAD:获取报头信息,类似于 GET 请求,但服务器只返回报头,不返回实体的主体部分。
- OPTIONS:列出可对资源实行的请求方法,用来查询服务器支持的方法。
2. 状态码(Status Codes)
HTTP 使用状态码来表示服务器对请求的处理结果,常见的状态码包括:
- 2xx:成功。例如,200 表示请求成功。
- 3xx:重定向。例如,301 表示永久重定向,302 表示临时重定向。
- 4xx:客户端错误。例如,404 表示未找到请求的资源。
- 5xx:服务器错误。例如,500 表示服务器内部错误。
3. 报文结构
HTTP 报文分为请求报文和响应报文:
- 请求报文包括请求行、请求头部和请求体。
- 响应报文包括状态行、响应头部和响应体。
4. 连接管理
HTTP/1.1 引入了持久连接(persistent connection)的概念,使得在同一个 TCP 连接上可以发送和接收多个 HTTP 请求和响应,减少了连接建立和关闭的开销,提高了性能。
URL(Uniform Resource Locator)
URL 是统一资源定位符,用来唯一标识互联网上的资源。HTTP 使用 URL 来指定请求的资源地址,包括协议类型(http:// 或 https://)、主机名、路径、查询参数等信息。
5. 安全性
HTTP 并不具备加密功能,因此传输的数据在传输过程中可能会被窃听或篡改。为了解决这个问题,HTTPS(HTTP Secure)应运而生,通过 SSL/TLS 加密协议来保证通信安全。
6. 版本演变
- HTTP/0.9:最早的版本,只支持 GET 方法,没有头部信息,响应只包含 HTML 文档。
- HTTP/1.0:引入了多种请求方法、状态码、头部字段等。
- HTTP/1.1:支持持久连接、流水线处理、Host 头部字段等,广泛应用于现代 Web。
- HTTP/2:引入了新的二进制格式,多路复用、头部压缩等,提升了性能。
- HTTP/3:基于 UDP 实现,提供更快的传输速度和更好的性能。