什么是HTTP协议?
HTTP(Hyper Text Transfer Protocol)<超文本传输协议>的缩写.是用于从WWW服务器传输超文本到本地浏览器的传输协议.HTTP是一个基于TCP的应用层协议,由请求和响应构成,是一个标准的个客户端和服务器模型.
主要是用来规定用户端和服务器的数据传输格式。
HTTP协议是基于请求与响应模式的、无状态、应用层的协议。
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
获取HTTP报文
这里我使用了Fiddler抓包工具
- 打开Fiddle
- 任意选择一条HTTP请求
- 右键选择save->selected
- Sessions->as test**
- 任意命名保存
- 用记事本查看文件
HTTP协议包括请求和响应两部分
http请求报文
http请求报文四个部分组成:请求行、请求头部、空行、请求数据。
1. 请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如GET /data/info.html HTTP/1.1
- 方法字段就是HTTP使用的请求方法,比如常见的GET/POST
请求方法 | 备注 |
---|---|
GET | 请求资源 |
POST | 提交资源 |
Head | 获取响应头 |
PUT | 替换资源 |
DELETE | 删除资源 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
-
HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别: HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。
-
URL(Uniform ResourceLocator):统一资源定位符,用于描述网上的资源
2. 请求头部
HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。
常见的请求头字段含义:
请求头字段名称 | 含义 |
---|---|
Accept | 浏览器可接受的MIME类型,如:image / jpg / html |
Accept-Encoding | 浏览器能够进行解码的数据编码方式,比如gzip |
Accept-Charset | 客户端可接受的字符集,如gb2312、iso-8859-1 |
Accept-Language | 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到, |
Authorization | 授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中 |
Content-Length | 表示请求消息正文的长度 |
Host | 客户机通过这个头告诉服务器,想访问的主机名 |
If-Modified-Since | 客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答 |
Referer | 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)。包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 |
User-Agent | User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。 |
Cookie | 客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一 |
Pragma | 指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。 |
From | 请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 |
Connection | 处理完这次请求后是否断开连接还是继续保持连接。 |
Range | Range头域可以请求实体的一个或者多个子范围 |
UA-Pixels,UA-Color,UA-OS,UA-CPU | :由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。 |
3. 空行
通过一空行,告诉服务器请求头部到此为止
4. 请求数据
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”,
password字段为123456,那么这里的请求数据就是
user=admin&password=123456,使用&来连接各个字段。
HTTP响应报文
同样的,HTTP响应报文也由三部分组成:响应行、响应头、空行、响应体
1.响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
常见状态码(Status Code)
状态码 | 含义 |
---|---|
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。 |
200~299 | 表示成功接收请求并已完成整个处理过程。常用200 |
300~399 | 为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存) |
400~499 | 客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够) |
500~599 | 服务器端出现错误,常用500 |
2.响应头
响应报文头,也是由多个属性组成;
响应头也是用键值对k:v
服务器通过响应头来控制浏览器的行为,不同的头浏览器操作不同
响应头 | 描述 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-Cookie | 种Cookie |
Last-Modified | 资源最后修改时间 |
Content-type | 响应类型的字符集 |
Content-length | 内容长度 |
Connection | 如keep-Alive,表示tcp连接不关闭,不会永久保持连接,服务可设置 |
Location | 指明重定向的位置,新的URL地址,如304情况 |
3.响应体
服务器返回给客户端的文本信息。