JavaEE--HTTP协议

HTTP协议的基本格式

HTTP协议是典型的“一问一答”模式的协议,即请求和响应一一对应。为了进一步理解HTTP协议的工作过程以及理解HTTP协议报文格式,我们需要用到抓包工具,这里我们以Fiddler为例。

1.使用Fiddler进行抓包  

使用Fiddler能够将网络上传输的HTTP数据获取到并且显示出来,其本质上是一个代理程序。在我们访问百度时,Fiddler的左侧就会出现很多数据。

这些数据是浏览器在打开百度时给百度发送的HTTP/HTTPS请求数据,可以看到在访问百度时,往往不是只发送一个请求,而是发送很多个请求。在图中,我们还能看到不同颜色的请求数据,通常蓝色表示的是HTML数据,黑色表示的是普通数据,当然,还会有其他的颜色,这里我们不做过多的介绍。那么既然数据已经显示出来了,我们怎么去查看它具体的请求和响应呢?

只需要选中对应的数据,并选择Raw(显示HTTP请求的原始数据),右侧就会显示出请求和响应,上框中的是请求的详情,下框中的是响应的详情。

注:1.如果字体太小看不清楚,可以点击请求或者响应右下角的View in Notepad按钮,就可以调用记事本来显示信息  2.在响应数据中,可能会存在一些乱码(HTTP把响应数据压缩后再返回),需要点击响应中顶上的Response body is encoded.Click to decode.按钮,就可以把响应数据解压缩

2.请求

一个HTTP请求报文,可以分为四个部分:

• 首行:包含请求的方法,请求的URL以及版本号

• 请求头(Header):包含若干行数据,本质上是一个“键值对”结构,每一行是一个键值对,使用冒号分割

• 空行:最后一个Header后面存在一个空行,作为结尾的标识

• 正文(body):正文是可选的,可能有,可能没有

2.1 URL基本格式

 • 协议方案名:描述了URL接下来要做什么,常见的有http和https,也有其他的类型

 • 登录信息:现在的网站的身份认证一般不采用URL进行,可以省略

 • 服务器地址:标识要访问的服务器是哪一个,地址可以是IP地址或者域名

 • 服务器端口号:可以省略,浏览器会设置默认的端口号,如果是HTTP协议,端口号为80,如果是HTTPS协议,端口号为443

 • 带层次的文件路径:标识要访问服务器的哪一个资源

 • 查询字符串(query string):能够通过参数,把客户端想要传给服务器的数据发送过去,查询字符串也是一个键值对结构,使用&分割键值对,使用=分割键和值,在查询字符串中,一些特殊符号(?,+,=等等)可能会使URL的解析出现问题,所以当值中包含这些特殊符号时,需要对特殊符号进行转义(取该符号原始编码的十六进制,前面加上%,例如+→%2B),中文同样需要进行转义

 • 片段标识符:区分页面中的不同部分的目录或者导航

2.2 请求的方法

方法说明支持的HTTP协议版本
GET获取资源1.0,1.1
POST传输实体主体

1.0,1.1

PUT传输文件1.0,1.1

HEAD

获得报文首部

1.0,1.1

DELETE删除文件1.0,1.1
OPTIONS询问支持的方法

1.1

TRACE追踪路径1.1

CONNECT

要求用隧道协议连接代理1.1
LINK建立和资源之间的连接1.0
UNLINK断开连接关系1.0

PUT:用于给服务器提交数据,与POST类似

DELETE:和GET类似,通常没有正文,使用查询字符串传输数据

GET和POST的区别:

1.GET是从服务器获取某个数据,POST是往服务器发送或者提交某个数据

2.GET通常不会搭配正文,通过查询字符串传输数据,POST通常不搭配查询字符串,通过正文传输数据(不是绝对的,GET可以有正文,POST也可以有查询字符串)

3.服务器对于GET请求的设计通常是“幂等”的,对POST请求的设计通常不要求“幂等”(同样也是不绝对的,“幂等”简单来说就是当许多人在浏览器中重复搜索同一个关键词时,搜索结果相同)

4.GET请求的结果可以被缓存(当一个网站通过GET获取图片时,浏览器就可以缓存这些图片,下次访问时就可以直接从缓存中读取),可以被浏览器收藏夹收藏,POST一般不行(同样也是不绝对的)

2.3 请求头

HOST:请求对应的主机的IP和端口

Content-Length:描述正文body的长度(图中的请求没有正文,所以没有这条数据)

Content-Type:body的数据类型(没有正文,同样没有这条数据)

User-Agent(UA):表示浏览器/操作系统的属性

Refer:表示当前的页面是从哪里跳转过来的

Cookie(键值对结构):浏览器提供给网页的一种能够持久化存储数据的机制,浏览器会针对不同网站保存对应的不同的Cookie,Cookie中的数据都是来自于服务器,当第一次访问某一个网站时,此时对应的Cookie本来是空的,在访问之后,网站的服务器会返回一些HTTP请求,在HTTP请求中会有Set-Cookie这样的数据,把一些键值对结构的数据保存到Cookie中,后续浏览器再访问该网站时,就会在请求头中,把之前保存在Cookie中的这些键值对给带入进去并发回给服务器

大部分Cookie中有一个特殊的键值对,用于标识用户的身份信息,即SessionID,那么它有什么作用呢?我们以网站的登录过程为例来简单了解一下。

3.响应

一个HTTP响应报文,也可以分为四个部分:

 • 首行:包含版本号,状态码以及状态码描述

 • 响应头(Header):包含若干行数据,与请求头的结构相同

 • 空行:最后一个Header后面存在一个空行,作为结尾的标识

 • 正文(body):可选的,可能有,可能没有

3.1 状态码

状态码描述了此次HTTP请求是否成功以及当请求失败,显示出失败的原因

1) 200 OK:最常见的状态码,表示访问成功

2) 404 NOt Found:客户端请求的资源在服务器中并不存在

3) 403 Forbidden:客户端权限不足,被禁止访问

4) 405 Method Not Allowed:请求中使用的方法,服务器不支持

5) 500 Internal Server Error:服务器内部发生错误

6) 504 GateWay Timeout:服务器访问超时

7) 302 Move Temporarily:临时重定向,访问某个地址时,访问的是旧的地址但自动跳转到了新的地址上,旧地址是否要重定向以及重定向到哪里,都是可变的,每次访问旧地址,需要旧地址访问服务器,根据获取到的响应的Location属性进行跳转

8) 301 Move Permanently:永久重定向,访问的旧地址和跳转的新地址之间的映射关系固定,后续访问旧地址都会跳转到新地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值