HTTP

1. 无状态协议

HTTP是一种不保存状态,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存,协议对于发送过的请求或响应都不做持久化处理,为了实现期望的保持状态功能(比如浏览商品详情无需重复登录),引入了Cookie技术,使用Cookie技术能够在一定程度上进行自定义状态管理

2. HTTP Request

HTTP Request的几种类型

TRACE

TRACE方式是让Web服务器端将之前的请求通信返回给客户端的方法,发送请求时,会在Max-Forwards头部字段中填入数值,并且在每经过一个服务器端时就会将该值减1,当该数值刚好减到0时,就会停止传输,最后接收到请求的服务器则会返回状态码200 OK的响应

可以通过TRACE 方法查询发送出去的请求是怎么被加工和纂改的,一般用来确认连接过程中发生的一系列操作

HEAD方法和GET方法一样,只是不返回报文主体部分,用于确认URL的有效性及资源更新的日期时间等

OPTION

OPTIONS方法用来查询针对URI指定的资源支持的方法

3. 报文格式

以下是通过curl -v获取到的HTTP报文格式

1
2
3
4
5
6
7
8
9
10
$ curl -v 127.0.0.1:8080/test
> GET /test HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/8.1.2
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 5
< Date: Mon, 02 Oct 2023 04:13:50 GMT

整个报文分为请求体和响应体,首行中包含了HTTP的请求方法,请求对象以及使用的HTTP版本,第二行标明了Host表示请求资源所在的主机,User-Agent则用来表示用户代理,即向服务器发送请求的浏览器类型,此处由于是使用命令行的方式进行请求,因此User-Agent的值为curl/8.1.2,其中Accept*/*则表示客户端愿意接受任何格式的响应

响应体大致分为三个部分:状态行、首部行和响应实体,其中Content-Length主要表示的是发送/接收对象的字节数