上周实验中进行了课程实验用wireshark抓包了http协议,收获许多,准备开启我的第一篇博客文章。
HTTP(HyperText Transfer Protocol,超文本传输协议)是Web系统最核心的内容,是Web服务器和客户端直接进行数据传输的规则。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。可以使浏览器更加高效,使网络传输减少。不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及首先显示(如文本先于图形)等。HTTP是一个应用层协议,有请求和响应构成,是一个标准的客户端服务器模型。HTTP具有以下几个特点:
HTTP请求信息由3部分组成:
(1)请求方法URI协议/版本
(2) 请求头(Request Header)
(3) 请求正文
请求方法URI协议/版本:请求的第一行是"方法URI协议/版本"
例如:GET/sample.jsp HTTP/1.1 其中"GET"代表请求方法,"/sample.jsp"表示URI,"HTTP/1.1代表协议和协议的版本。
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送"*"的请求来测试服务器的功能性。
HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET:向特定的资源发出请求。注意:get方法不应当被用于产生“副作用”的操作中。例如在Web APP中,其中一个原因是GET可能会被网站蜘蛛等随意访问。
POST:向指定资源提交数据进行处理请求(比如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或者诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
请求头:
- Accept:[表示浏览器可以接受文本,网页图片等]
- Accept-Charaset: [表示接受字符编码]
- Accept-Encoding:[可以接受格式压缩后数据]
- Accept-Language:[浏览器支持的语言为中文]
- Host:[浏览器要找的主机]
- IF-MODIFIED-Since:[文件在缓存中且指明文件时间]
- Referer:[指明来源]
- User-Agent:[本机浏览器内核]
- Connection:close/Keep-Alive [保持链接,即发完数据后不关闭链接]
- Date:[浏览器发送数据的请求时间]
请求正文: 请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中包含客户提交的查询字符串信息:
HTTP请求信息由3部分组成::
(1)响应首行;
(2)响应头信息;
(3)响应正文。
响应首行:包含协议版本,响应状态码,对状态码的解释。
例如:分析”HTTP/1.1 200 OK”
其中HTTP/1.1:为协议版本。200 :为响应状态码,此表示响应成功。OK :为解释响应状态码200是响应成功。
200 请求成功,浏览器把响应回来的信息显示在浏览器端。
404 客户端出错,在浏览器端请求一个不存在的资源时会出现404状态码。
405 客户端错误的一种,表示当前的请求方式不支持。如:服务器端只对GET请求做了处理,而客户端的请求是post方式的,这个时候会出现405状态码。
500 服务器端错误,如:服务器端代码出现空指针等异常,浏览器就会收到服务器发送的500状态码。
302 表示重定向。如:浏览器访问一个资源,服务器响应给浏览器一个302的状态码,并且通过响应头Location发送了一个新的url,告诉浏览器去请求这个url。这就是重定向。
304 第一次访问一个资源后,浏览器会将该资源缓存到本地,第二次再访问该资源时,若该资源没有发生改变,则服务器响应给浏览器304状态码,告诉浏览器使用本地缓存的资源。
响应头信息:与请求头信息类似
-Server:服务器告诉浏览器,当前响应的服务类型和版本。
-Content-Type:服务器告诉浏览器响应内容的类型和字符编码。如:值为text/html;charset=utf-8。说明响应信息的类型是文本类型中的html,使用的字符编码是utf-8。
-Content-Length:服务器告诉浏览器,响应内容的长度字节数。
-Date:表示是服务器是响应回浏览器的时间,注意该时间是按照格林尼治标准时间(GMT)来计算。
响应正文:空行连接响应头和响应体。响应正文即为返回资源内容。浏览器可以直接识别响应正文html文件。
本实验用windows7,wireshark,IE浏览器进行实验操作。
实验1
HTTP GET/response交互:
(1)清空缓存DNS高速缓存,确保Web服务器域名到IP地址映射是从网络请求的。在cmd窗口输入:ipconfig/flushdns 后按回车。
(2)启动Wireshark分组俘获器,开始Wreshark分组俘获。
(3)在浏览器地址栏中前往网址:http:// www.cqu.edu.cn/。
(4)单击测览器中的“刷新”按钮。
(5)停止Wireshark分组俘获,在显示过滤筛选说明处输入“http”显示捕获到的HTTP报文。
(1)对请求报文分析:
“GET”:向特定的资源发出请求。
”HOST”首部在HTTP1.1版本中是必须的,描述了URL中的主机,在这里是http:// www.cqu.edu.cn/。
”USER-AGENT”首部显示了web服务器浏览器和本机windows系统。
Accept包括:Accept、 Accept-Language 、Accept-Encoding。
Connection首部描述了有关TCP连接的信息,通过此连接发送HTTP请求和响应,表明在发送请求之后连接是否保持活动状态及保持多久大多数HTTP1.1连接是持久的,意思是在每次请求后不关闭TCP连接,而保持该连接以接受从同一台服务器发来的多个请求。
(2)对响应报文进行分析
响应发送”HTTP/1.1 200 ok" ,状态码200表示响应成功,用HTTP1.1版本发送网页。
Cache-control首部,用于描述是否将数据的副本存储或高速缓存起来,此处为no-store 表示所有内容不会存在缓存 或internet临时文件中。
Content-length首部描述了数据长度为1676字节
Date首部表示了数据发送时间为:2020.5.19 07:04:42 其中GMT表示格林尼治标准时间。
此处补充Cache-control的相关字段信息:
实验2
HTTP条件 GET/response交互
1)启动浏览器,清空浏览器的缓存。
(2)启动Wireshark分组俘获器,开始Wreshark分组俘获。
(3)在浏览器地址栏中前往网址: http://gaia.cs.umass.edu/wireshark-labs/ HTTP-wireshark-file2.html
你的浏览器中将显示一个的非常简单的HTML文件。
(4)单击测览器中的“刷新”按钮。
(5)停止Wireshark分组俘获,在显示过滤筛选说明处输入“http”显示捕获到的HTTP报文。
实验3
获取长文件
(1)启动浏览器,将浏览器的缓存清空。
(2)启动Wireshark分组俘获器,开始Wireshark分组俘获。
(3)在浏览器地址栏中输入如下网址:http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file3.html
(4)停止Wireshark分组俘获,在显示过滤筛选说明处输入“http”。
实验4
嵌有对象的HTML文档
(1)启动浏览器,将浏览器的缓存清空。
(2)启动Wireshark分组俘获器。开始Wireshark分组俘获。
(3)在浏览器地址栏中输入如下网址:http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html
(4)停止Wireshark分组俘获,在显示过滤筛选说明处输入“http"。
实验5
HTTP认证
(1)启动浏览器,将浏览器的缓存清空。
(2)启动Wireshark分组俘获器。开始Wireshark分组俘获。
(3)在浏览器地址栏中输入如下网址:http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html
(4)停止Wireshark分组俘获,在显示过滤筛选说明处输入“http”。
(1)你的浏览器运行的是HTTP1.0,还是HTTP1. 1 ?你所访问的服务器所运行的HTTP版本号是多少?
浏览器运行的是HTTP1.1 访问的服务器运行的是HTTP1.1
(2)你的浏览器向服务器指出它能接收何种语言版本的对象?
可以接受简体中文
(3)你的计算机的IP地址是多少?服务器的IP地址是多少?
计算机地址:.....
服务器地址:202.202.1.3
(4)从服务器向你的浏览器返回的状态代码是多少?
200 OK
(5)你从服务器上所获取的HTML文件的最后修改时间是多少?
在2020年4月5日 02:34:44
(6) 返回到你的浏览器的内容一共多少字节?
4498字节
(7) 分析你的浏览器向服务器发出的第一个HTTP GET请求的内容,在该请求报文中,是否有一行是: IF-MODIFIED-SINCE?
没有
(8)分析服务器响应报文的内容,服务器是否明确返回了文件的内容?如何获知?
明确返回了
(9)分析你的浏览器向服务器发出的第二个“HTTP GET”请求,在该请求报文中是否有一行是:IF -MODIFIED- SINCE?如果有,在该首部行后面跟着的信息是什么?
有,是最后一次的修改时间。
(10)服务器对第二个HTTP GET请求的响应中的HTTP状态代码是多少?服务器是否明确返回了文件的内容?请解释。
304状态码表示:服务器没有明确返回文件内容。原因:浏览器端缓存页面最后修改时间与服务器端时间一致,返回304状态码,客户端接到之后,就直接把本地缓存文件显示到浏览器中。
(11 )你的浏览器一共发出了多少个HTTP GET请求?
总共四个,分别为序号17,46,61,102
(12 )承载这一个HTTP响应报文一共需要多少个data-containing TCP报文段?
需要四个data-containing TCP报文段。
(13)与这个HTTPGET请求相对应的响应损文的状态代码和状态短语是什么?
为200 OK
(14)在被传送的数据中一共有多少个HTTP状态行与TCP-induced”continuation"有关?
一个
(15)你的浏览器一共发出了多少个和打开的网址相关的HTTP GET请求?这些请求被发送到的目的地的IP地址是多少?
发送了三个和打开的网址相关的HTTP GET请求,目的IP 为:128.119.245.12
(16)浏览器在下载这两个图片时,是串行下载还是并行下载?请解释。
并行。两个图片是连续请求,不需要等第一个请求得到回复后才继续第二次请求。存在不需要等第一个请求得到回复后才继续第二次请求的情况,说明是并行的。
(17)对于浏览器发出的最初的HTTP GET请求,服务器的响应是什么(状态代码和状态短语)?
响应是:401 Unauthorized