1. HTTP协议用于客户端和服务器端之间的通信
- 客户端:请求访问文本或图像等资源的一端
- 服务端:提供资源响应的一端
在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定有一端是客户端,另一端则是服务器端。
两台计算机作为客户端和服务端的的角色可能会互换。
HTTP协议能够明确区分哪端是客户端,哪端是服务端。
2. 通过请求和响应的交换达成通信
- HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。
GET /index.htm HTTP/1.1
Host: hackr.jp
-
G
E
T
GET
GET表示请求访问服务器的类型,称为
m
e
t
h
o
d
method
method
-
/
i
n
d
e
x
.
h
t
m
/index.htm
/index.htm指明了请求访问的资源对象,也叫做请求
U
R
I
(
r
e
q
u
e
s
t
?
U
R
I
)
URI(request-URI)
URI(request?URI)
-
H
T
T
P
/
1.1
HTTP/1.1
HTTP/1.1,即
H
T
T
P
HTTP
HTTP的版本号,用来提示客户端使用的
H
T
T
P
HTTP
HTTP协议功能
综合来看,访求访问某台
H
T
T
P
HTTP
HTTP服务器上的
/
i
n
d
e
x
.
h
t
m
/index.htm
/index.htm页面资源
HTTP/1.1 200 OK
Date: Fri, 31 Dec 2021 10:10:10 GMT
Content-Length: 362
Content-Type: text/html
<html>
...
-
200
200
200
O
K
OK
OK,状态码和
r
e
a
s
o
n
?
p
h
r
a
s
e
reason-phrase
reason?phrase
-
D
a
t
e
Date
Date 创建响应的日期时间,是
h
e
a
d
e
r
header
header
f
i
e
l
d
field
field内的一个属性
3. HTTP是不保存状态(stateless)的协议
H
T
T
P
HTTP
HTTP协议自身不具备保存之前发送过的请求或响应的功能
4. 请求URL定位资源
H
T
T
P
HTTP
HTTP协议使用
U
R
L
URL
URL定位互联网上的资源。因为
U
R
L
URL
URL的特定功能,在互联网上任意位置的资源都能访问到。
-
U
R
I
URI
URI为完整的请求
U
R
I
URI
URI
GET http://hackr.jp/index.htm HTTP/1.1
- 在首部字段
H
o
s
t
Host
Host中写明网络域名或
I
P
IP
IP地址
GET /index.htm HTTP/1.1
Host: hackr.jp
- 查询
H
T
T
P
HTTP
HTTP服务器端支持的
H
T
T
P
HTTP
HTTP方法种类
OPTIONS * HTTP/1.1
5. 告知服务器意图的HTTP方法
GET /index.html HTTP/1.1
Host: www.hackr.jp
返回
i
n
d
e
x
.
h
t
m
l
index.html
index.html的页面资源
GET /index.html HTTP/1.1
Host: www.hackr.jp
If-Modified-Since: Fri, 31 Dec 2021 12:00:00 GMT
POST /submit.cgi HTTP/1.1
Host: www.hackr.jp
Content-Length: 1560
返回submit.cgi接受数据的处理结果
PUT /example.html HTTP/1.1
Host: www.hackr.jp
Content-Type: text/html
Content-Length: 1560
返回状态码204 No Content(请求执行成功,但无数据返回)
HEAD /index.html HTTP/1.1
Host: www.hackr.jp
返回index.html有关的响应首部
-
D
E
L
E
T
E
DELETE
DELETE 删除文件
DELETE /example.html HTTP/1.1
Host: www.hackr.jp
返回状态码204 No Content 该html已从该服务器上删除
-
O
P
T
I
O
N
S
OPTIONS
OPTIONS 询问支持的方法
OPTIONS * HTTP/1.1
Host: www.hackr.jp
HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS
-
T
R
A
C
E
TRACE
TRACE 追踪路径
TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法
TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 1024
TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2
-
C
O
N
N
E
C
T
CONNECT
CONNECT 要求用隧道协议连接代理
使用SSL和TLS协议把通信内容加密后经网络隧道传输
CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host: proxy.hackr.jp
HTTP/1.1 200 OK
6. 使用方法下达命令
方法的作用在于,可以指定请求的资源按期望产生某种行为。方法名用大写字母。
7. 持久连接节省通信量
7.1 持久连接
特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态
7.2 管线化
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。这样就能够做到同时并行发送多个请求。
8. 使用Cookie的状态管理
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务器端发送的响应报文内的一个叫作Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
GET /reader/ HTTP/1.1
Host: hackr.jp
HTTP/1.1 200 OK
Date: Fri, 12 Dec 2021 11:30:00 GMT
Server: Apache
<Set-Cookie: ...>
Content-Type: text/plain; charset=UTF-8
GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724
参考资料:《图解HTTP》
|