这是我参与「第四届青训营 」笔记创作活动的第2天
HTTP报文
Hyper Text Transfer Protocal
超文本传输协议
下文中的图解来自《图解HTTP》
HTTP报文
客户端:发送请求报文
服务端:返回响应报文
-
HTTP报文
-
报文首部
- 请求行:请求报文
- 状态行:响应报文
- 各种首部字段
-
空行
-
报文主体
-
方法
-
GET
-
POST
-
PUT
-
DELETE
-
HEAD
-
CONNECT
-
OPTIONS
-
TRACH
-
PATCH
-
安全方法:不会修改服务器数据
- GET, HEAD, OPTIONS
-
幂等方法:执行多次的效果是一样的
- GET HEAD, OPTIONS, PUT, DELETE
HTTP状态码
状态码类别
常见的14个状态码
2XX 成功
-
200 OK
- 正常处理
-
204 No Content
- 服务器请求处理成功,但没有实体的主体部分返回
-
206 Partial Content
- 客户端进行范围请求,服务端返回指定范围的实体内容
3XX 重定向
-
301 Moved Permanently
- 永久重定向,请求的资源已被分配了新的URI,需要按照Location收录字段提示的URI重新访问
-
302 Found
- 临时重定向
-
303 See Other
- 资源存在另一个URI,应该使用GET方法定向获取
-
304 Not Modified
- 服务端允许请求访问资源,但为满足条件
-
307 Temporary Redirect
- 临时重定向
4XX 客户端错误
-
400 Bad Request
- 请求报文中存在语法错误
-
401 Unauthorized
- 需要验证或验证失败
-
403 Forbidden
- 请求被服务器拒绝
-
404 Not Found
- 服务器上没有对应的资源
5XX 服务器错误
-
500 Internal Server Error
- 服务器在执行请求时发生错误
-
503 Service Unavailable
- 服务器处于超载或停机维护,暂时无法处理请求
Web服务器
HTTP1.1允许一台HTTP服务器搭建多个Web站点。
-
代理
- 接收客户端请求,转发给服务器
- 接收服务器响应,转发给客户端
-
网关
- 转发其他服务器通信数据的服务器,可以进行非HTTP协议
-
隧道
- 隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双 方通信连接的应用程序。
HTTP报文首部
请求报文
- 方法
- URI
- HTTP版本
- HTTP首部字段
GET / HTTP/1.1
Host: hacker.jp
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/⇒ 20100101 Firefox/13.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,⇒ */*; q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT
If-None-Match: "45bae1-16a-46d776ac"
Cache-Control: max-age=0
响应报文
- HTTP版本
- 状态码
- 原因短句
- HTTP首部字段
HTTP/1.1 304 Not Modified
Date: Thu, 07 Jun 2012 07:21:36 GMT
Server: Apache
Connection: close
Etag: "45bae1-16a-46d776ac"
4种首部字段类型
- 通用首部字段
- 请求首部字段
- 响应首部字段
- 实体首部字段