目录
HTTP全称Hyper Text Transfer Protocol,即超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
1. 基于TCP协议,面向连接,安全
2. 基于请求-响应模型,一次请求对应一次响应
3. HTTP协议是无状态的协议,对于事物处理没有记忆能力,每次请求-响应都是独立的
缺点:多次请求之间不能共享数据
优点:速度快
例如:
POST /test HTTP/1.1
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 41
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Origin: null
Pragma: no-cache
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
{"username":"艾伦","password":"123abc"}
POST /test HTTP/1.1
请求数据的第一行,包含请求方式、资源路径、协议。
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 41
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Origin: null
Pragma: no-cache
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
从第二行开始,格式为key: value。
常见的请求头:
请求头 | 含义 |
Host | 请求的主机名 |
User-Agent | 浏览器的版本 |
Accept | 浏览器能接收的资源类型 |
Accept-Language | 浏览器偏好的语言 |
Accept-Encoding | 浏览器支持的压缩类型 |
Content-Type | 请求主体的数据类型 |
Content-Length | 请求主体的大小,单位:字节 |
{"username":"艾伦","password":"123abc"}
请求体和请求头之间有一个空行,请求体用于存放请求参数。
GET请求和DELETE请求没有请求体,请求参数在请求行中。POST请求和PUT请求有请求体,请求参数在请求体中。
例如:
HTTP/1.1 200
Access-control-Allow-Origin: null
Access-Control-Allow-Methods: GET,POST,OPTIONS,PUT,DELETE,PATCH
Content-Type: application/json
Content-Length: 41
Date: Mon, 18 Dec 2023 10:50:20 GMT
Keep-Alive: timeout=60
Connection: keep-alive
{"username":"艾伦","password":"123abc"}
HTTP/1.1 200
响应数据的第一行,包含协议、状态码。
Access-control-Allow-Origin: null
Access-Control-Allow-Methods: GET,POST,OPTIONS,PUT,DELETE,PATCH
Content-Type: application/json
Content-Length: 41
Date: Mon, 18 Dec 2023 10:50:20 GMT
Keep-Alive: timeout=60
Connection: keep-alive
从第二行开始,格式为key: value。
{"username":"艾伦","password":"123abc"}
响应体和响应头之间有一个空行,响应体用于存放响应数据。
状态码类型:
类型 | 含义 |
1xx | 响应中:临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果请求已经完成则忽略。 |
2xx | 成功:表示请求已经被成功接收,处理已完成。 |
3xx | 重定向:重定向到其他地方,让客户端再发起一次请求以完成整个处理。 |
4xx | 客户端错误:处理发生错误,责任在客户端。例如,请求了不存在的资源、客户端未被授权、禁止访问等。 |
5xx | 服务器错误:处理发生错误,责任在服务端。例如,程序抛出异常等。 |
常见的响应头:
响应头 | 含义 |
Content-Type | 响应内容的类型 |
Content-Length | 响应内容的长度 |
Content-Encoding | 响应压缩算法 |
Cache-Control | 客户端缓存方式 |
Set-Cookie | 为当前域设置Cookie |
HTTP请求对象:HttpServletRequest
HTTP响应对象:HttpServletResponse