精华内容
下载资源
问答
  • 文章目录报文结构HTTP 请求报文的请求行请求方法GET/HEADPOST/PUT其他方法URIURI 的格式URI 的编码HTTP 响应报文的状态行状态码HTTP 请求、响应头部字段 HTTP 协议再规范文档里详细定义了报文的格式,规定了组成部分...


    HTTP 协议再规范文档里详细定义了报文的格式,规定了组成部分,解析规则,还有处理策略,所以可以在 TCP/IP 层之上实现丰富灵活的功能,例如连接控制、缓存管理、数据编码、内容协商

    报文结构

    HTTP 协议是一个”纯文本“的协议,在实际传输的数据前要附加一些头数据,不过头数据都是ASCII码的文本,可以很容易地用肉眼阅读,不用借助程序解析也能够看懂

    HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:

    • 起始行(start line)描述请求或响应的基本信息
    • 头部字段集合(header)使用 key-value 形式更详细说明报文
    • 消息正文(entity)实际传输的数据,不一定是纯文本,可以是图片、视频等二进制数据

    其中前两部分起始行和头部字段经常合称为”请求头“或”响应头“,消息正文又称为”实体“,但与”header“对应,很多时候就直接称为”body“

    HTTP协议规定报文必须有header,但可以没有body,而且在header之后必须要有一个“空行”,也就是“CRLF”,十六机制的“0D0A”

    所以,一个完整的HTTP报文就像下图的这样,注意在header和body之间有一个“空行”
    在这里插入图片描述
    接下来看上一篇提到的获取的 GET 请求报文信息
    在这里插入图片描述
    在这个浏览器发出的请求报文里,第一行“GET / HTTP/1.1”就是请求行,而后面的“Host”“Connection”等等都属于header,报文的最后是一个空白行结束,没有body

    其实浏览器发送GET请求的时HTTP报文经常是只有header而没body。,虽然HTTP协议对header的大小没有做限制,但各个Web服务器都不允许过大的请求头,因为头部太大可能会占用大量的服务器资源,影响运行效率

    HTTP 请求报文的请求行

    请求报文里的起始行也就是请求行(request line),简要描述了客户端想要如何操作服务器端的资源

    请求行由三部分构成:

    • 请求方法:是一个动词,如GET/POST,表示对资源的操作
    • 请求目标:通常是一个URI,标记了请求方法要操作的资源
    • 版本号:表示报文使用的HTTP协议版本

    这三个部分通常使用空格(space)来分隔,最后要用CRLF换行表示结束
    在这里插入图片描述
    还是用Wireshark抓包的数据来举例:

    GET / HTTP/1.1
    

    在这个请求行里,“GET”是请求方法,“/”是请求标,“HTTP/1.1”是版本号,把这三部分连起来,意思就是“服务器你好,我想获取网站根目录下的默认文件,我用的协议版本号是1.1

    请求方法

    蒂姆·伯纳斯-李最初设想的是要用HTTP协议构建一个超链接文档系统,使用URI来定位这些文档,也就是资源。那么,该怎么在协议里操作这些资源呢?

    所以,就出现了“请求方法”。实际含义就是客户端发出了一个“动作指令”,要求服务器端对URI定位的资源执行这个动作

    HTTP/1.1规定了八种方法,单词都必须是大写的形式:

    • GET:获取资源,可理解为读取或下载数据
    • HEAD:获取资源的元信息
    • POST:向资源提交数据,相当于写入或上传数据
    • PUT:类似 POST
    • DELETE:删除资源
    • CONNECT:建立特殊的连接隧道
    • OPTIONS:列出可对资源实行的方法
    • TRACE:追踪请求-响应的传输路径

    在这里插入图片描述
    有点像对文件或数据库的“增删改查”操作,只不过这些动作操作的目标不是本地资源,而是远程服务器上的资源,所以只能由客户端“请求”或者“指示”服务器来完成

    既然请求方法是一个“指示”,那么客户端自然就没有决定权,服务器掌控着所有资源,也就有绝对的决策权力。它收到HTTP请求报文后,看到里面的请求方法,可以执行也可以拒绝,或者改变动作的含义,毕竟HTTP是一个“协议”,两边都要“商量着来”

    比如,发起了一个GET请求,想获取“/orders”这个文件,但这个文件保密级别比较高,不是谁都能看的,服务器就可以有如下的几种响应方式:

    • 假装这个文件不存在,直接返回一个404 Not found报文
    • 稍微友好一点,明确告诉你有这个文件,但不允许访问,返回一个403 Forbidden
    • 再宽松一些,返回405 Method Not Allowed,然后用Allow头告诉你可以用HEAD方法获取文件的元信息

    举几个个比较常用的方法说明:

    GET/HEAD

    请求从服务器获取资源,这个资源既可以是静态的文本、页面、图片、视频,也可以是由PHP、Java动态生成的页面或者其他格式的数据

    GET方法虽然基本动作比较简单,但搭配URI和其他头字段就能实现对资源更精细操作,例如,在URI后使用“#”,可以在获取页面后直接定位到某个标签所在的位置;使用If-Modified-Since字段就变成了“有条件的请求”,仅当资源被修改时才会执行获取动作;使用Range字段就是“范围请求”,只获取资源的一部分数据

    HEAD方法与GET方法类似,也是请求从服务器获取资源,服务器的处理机制也是一样的,但服务器不会返回请求的实体数据,只传回响应头,就是资源的“元信息”。可以看做是GET方法的一个“简化版”或者“轻量版”。因为它的响应头与GET完全相同,所以可以用在很多并不真正需要资源的场合,避免传输body数据的浪费

    比如,想要检查一个文件是否存在,只要发个HEAD请求就可以了,没有必要用GET把整个文件都取下来。

    再比如,要检查文件是否有最新版本,同样也应该用HEAD,服务器会在响应头里把文件的修改时间传回来

    POST/PUT

    GET和HEAD方法是从服务器获取数据,而POST和PUT方法则是相反操作,向URI指定的资源提交数据,数据就放在报文的body里

    比如,上论坛灌水,敲了一堆字后点击“发帖”按钮,浏览器就执行了一次POST请求,把你的文字放进报文的body里,然后拼好POST请求头,通过TCP协议发给服务器。

    又比如,上购物网站,看到了一件心仪的商品,点击“加入购物车”,这时也会有POST请求,浏览器会把商品ID发给服务器,服务器再把ID写入你的购物车相关的数据库记录

    PUT的作用与POST类似,也可以向服务器提交数据,但与POST存在微妙的不同,通常POST表示的是“新建”“create”的含义,而PUT则是“修改”“update”的含义

    在实际应用中,PUT用到的比较少。而且,因为它与POST的语义、功能太过近似,有的服务器甚至就直接禁止使用PUT方法,只用POST方法上传数据

    其他方法

    DELETE方法指示服务器删除资源,因为这个动作危险性太大,所以通常服务器不会执行真正的删除操作,而是对资源做一个删除标记。当然,更多的时候服务器就直接不处理DELETE请求

    CONNECT是一个比较特殊的方法,要求服务器为客户端和另一台远程服务器建立一条特殊的连接隧道,这时Web服务器在中间充当了代理的角色

    OPTIONS方法要求服务器列出可对资源实行的操作方法,在响应头的Allow字段里返回。它的功能很有限,用处也不大,有的服务器(例如Nginx)干脆就没有实现对它的支持

    TRACE方法多用于对HTTP链路的测试或诊断,可以显示出请求-响应的传输路径。它的本意是好的,但存在漏洞,会泄漏网站的信息,所以Web服务器通常也是禁止使用

    URI

    URI,也就是统一资源标识符(Uniform Resource Identifier)包含有URL和URN两个部分,在HTTP世界里用的网址实际上是URL,即统一资源定位符(Uniform Resource Locator)。但因为URL实在是太普及了,所以常常把这两者简单地视为相等

    URI 的格式

    URI本质上是一个字符串,这个字符串的作用是唯一地标记资源的位置或者名字,它不仅能够标记万维网的资源,也可以标记其他的,如邮件系统、本地文件系统等任意资源。而“资源”既可以是存在磁盘上的静态文本、页面数据,也可以是由Java、PHP提供的动态服务

    下面的这张图显示了URI最常用的形式,由scheme、host:port、path和query四个部分组成,但有的部分可以视情况省略
    在这里插入图片描述

    • scheme:“协议名”,表示资源应该使用哪种协议访问,浏览器通过你的应用程序看到URI里的scheme,就知道下一步该怎么走了,会调用相应的HTTP或者HTTPS下层API。在scheme之后,必须是三个特定的字符 : / / ,把scheme和后面的部分分开
    • host:port,即主机名加端口号,表示资源所在主机,主机名可以是IP地址或者域名的形式,必须要有,否则浏览器就会找不到服务器。但端口号有时可以省略,浏览器等客户端会依据scheme使用默认的端口号,例如HTTP的默认端口号是80,HTTPS的默认端口号是443
    • Path,有了协议名和主机地址、端口号,再加上后面标记资源所在目录,浏览器就可以连接服务器访问资源。URI里path采用了类似文件系统“目录”“路径”的表示方式,因为早期互联网上的计算机多是UNIX系统,所以采用了UNIX的“/”风格。URI的path部分必须以“/”开始
    http://nginx.org
    协议名 http
    主机名 nginx.org
    端口号省略,对于 http 协议默认 80
    路径部分也被省略,默认就是一个“/”,表示根目录
    	
    http://www.chrono.com:8080/11-1
    主机名 www.chrono.com 
    端口号 8080
    路径是 /11-1
    
    HTTP协议标准文档RFC7230的URI
    https://tools.ietf.org/html/rfc7230
    主机名 tools.ietf.org
    路径是 /html/rfc7230
    
    file:///D:/http_study/www/
    协议名 file,表示这是本地文件
    三个斜杠里的前两个属于URI特殊分隔符 ://
    主机名被省略,file类型URI的“特例”,它允许省略主机名,默认是本机localhost
    路径是 /D:/http_study/www/
    
    但对于HTTP或HTTPS这样的网络通信协议
    主机名是绝对不能省略的,会导致浏览器无法找到服务器
    
    • 查询参数:URI后面还有一个“query”部分,它在path之后,用一个“?”开始,但不包含“?”,表示对资源附加的额外要求。

      查询参数query有一套自己的格式,是多个“key=value”的字符串,这些KV值用字 符“&”连接,浏览器和客户端都可以按照这个格式把长串的查询参数解析成可理解的字典或关联数组形式

      例如:获取商品图片,但想要一个32×32的缩略图版本;获取商品列表,但要按某种规则做分页和排序;跳转页面,但想要标记跳转前的原始页面

    URI的完整格式
    在这里插入图片描述
    第一个多出的部分是协议名之后、主机名之前的身份信息“user:passwd@”,表示登录主机时的用户名和密码,但现在已经不推荐使用这种形式了(RFC7230),因为它把敏感信息以明文形式暴露出来,存在严重的安全隐患

    第二个多出的部分是查询参数后的片段标识符“#fragment”,它是URI所定位的资源内部的一个“锚点”或者说是“标签”,浏览器可以在获取资源后直接跳转到它指示的位置。

    但片段标识符仅能由浏览器这样的客户端使用,服务器是看不到的。也就是说,浏览器永远不会把带“#fragment”的URI发送给服务器,服务器也永远不会用这种方式去处理资源的片段

    URI 的编码

    在URI里只能使用ASCII码。对于ASCII码以外的字符集和特殊字符做一个特殊的操作,把它们转换成与URI语义不冲突的形式。这在RFC规范里称为“escape”和“unescape”,俗称“转义”

    HTTP 响应报文的状态行

    看完了请求行,我们再看响应报文里的起始行,在这里它不叫“响应行”,而是叫“状态行”(status line),意思是服务器响应的状态

    比起请求行来说,状态行要简单一些,同样也是由三部分构成:

    • 版本号:表示报文使用的HTTP协议版本
    • 状态码:三个数字,表示处理的结果,比如200是成功,500是服务器错误
    • 原因:对状态码的一个解释说明

    在这里插入图片描述
    看一下之前 Wireshark 抓包里的响应报文,状态行是:

    HTTP/1.1 200 OK
    

    意思就是:“浏览器你好,我已经处理完了你的请求,这个报文使用的协议版本号是1.1,状态码是200,一切OK。”

    另一个“GET /favicon.ico HTTP/1.1”的响应报文状态行是:

    HTTP/1.1 404 Not Found
    

    意思是:抱歉啊浏览器,刚才你的请求收到了,但我没找到你要的资源,错误代码是404

    状态码

    它是一个十进制数字,表示服务器对请求的处理结果。客户端可以依据代码适时转换处理状态,例如继续发送请求、切换协议,重定向跳转等,有那么点TCP状态转换的意思

    目前RFC标准里规定的状态码是三位数,所以取值范围就是从000到999。RFC标准把状态码分成了五类,用数字的第一位表示分类,而0-99不用,由000-999变成了100~599

    这五类具体含义:

    • 1××:提示信息,表示目前是协议处理的中间状态,还需要后续的操作
    • 2××:成功,报文已经收到并被正确处理
    • 3××:重定向,资源位置发生变动,需要客户端重新发送请求
    • 4××:客户端错误,请求报文有误,服务器无法处理
    • 5××:服务器错误,服务器在处理请求时内部发生了错误

    接下来逐个解释:

    • 1××类状态码属于提示信息,是协议处理的中间状态,实际能够用到的时候少。“101 Switching Protocols”。它的意思是客户端使用Upgrade头字段,要求在HTTP协议的基础上改成其他的协议继续通信,比如WebSocket。而如果服务器也同意变更协议,就会发送状态码101,但这之后的数据传输就不会再使用HTTP了

    • 2××类状态码表示服务器收到并成功处理了客户端的请求,这也是客户端最愿意看到的状态码

      200 OK 是最常见的成功状态码,表示一切正常,服务器如客户端所期望的那样返回了处理结果,如果是非HEAD请求,通常在响应头后都会有body数据

      204 No Content 是另一个很常见的成功状态码,它的含义与“200 OK”基本相同,但响应头后没有body数据。所以对于Web服务器来说

      206 Partial Content 是HTTP分块下载或断点续传的基础,在客户端发送“范围请求”、要求获取资源的部分数据时出现,它与200一样,也是服务器成功处理了请求,但body里的数据不是资源的全部,而是其中的一部分。他还会伴随着头字段“Content-Range”,表示响应报文里body数据的具体范围,供客户端确认,例如“Content-Range: bytes 0-99/2000”,意思是此次获取的是总计2000个字节的前100个字节

    • 3××类状态码表示客户端请求的资源发生了变动,客户端必须用新的URI重新发送请求获取资源,也就是通常所说的“重定向”

      301 Moved Permanently俗称“永久重定向,含义是此次请求的资源已经不存在了,需要改用改用新的URI再次访问

      302 Found “临时重定向,意思是请求的资源还在,但需要暂时用另一个URI来访问

      比如,你的网站升级到了HTTPS,原来的HTTP不打算用了,这就是“永久”的,所以要配置301跳转,把所有的HTTP流量都切换到HTTPS

      再比如,今天夜里网站后台要系统维护,服务暂时不可用,这就属于“临时”的,可以配置成302跳转,把流量临时切换到一个静态通知页面,浏览器看到这个302就知道这只是暂时的情况,不会做缓存优化,第二天还会访问原来的地址

      304 Not Modified 表示资源未修改,用于缓存控制。它不具有通常的跳转含义,但可以理解成“重定向已到缓存的文件”(即“缓存重定向)

      关于 HTTP 重定向和跳转

    • 4××类状态码表示客户端发送的请求报文有误,服务器无法处理

      400 Bad Request 是一个通用的错误码,表示请求报文有错误,但具体是数据格式错误、缺少请求头还是URI超长它没有明确说,只是一个笼统的错误,客户端看到400只会是“一头雾水”“不知所措”。所以,在开发Web应用时应当尽量避免给客户端返回400,而是要用其他更有明确含义的状态码。

      403 Forbidden 实际上不是客户端的请求出错,而是表示服务器禁止访问资源。原因可能多种多样,例如信息敏感、法律禁止等,如果服务器友好一点,可以在body里详细说明拒绝请求的原因,不过现实中通常都是直接给一个“闭门羹”。

      404 Not Found 可能是我们最常看见也是最不愿意看到的一个状态码,它的原意是资源在本服务器上未找到,所以无法提供给客户端。但现在已经被“用滥了”,只要服务器“不高兴”就可以给出个404,而我们也无从得知后面到底是真的未找到,还是有什么别的原因,某种程度上它比403还要令人讨厌。

    • 5××类状态码表示客户端请求报文正确,但服务器在处理时内部发生了错误,无法返回应有的响应数据,是服务器端的“错误码”

      500 Internal Server Error 与400类似,也是一个通用的错误码,服务器究竟发生了什么错误我们是不知道的。不过对于服务器来说这应该算是好事,通常不应该把服务器内部的详细信息,例如出错的函数调用栈告诉外界。虽然不利于调试,但能够防止黑客的窥探或者分析

      501 Not Implemented 表示客户端请求的功能还不支持,这个错误码比500要“温和”一些,和“即将开业,敬请期待”的意思差不多,不过具体什么时候“开业”就不好说

      502 Bad Gateway 通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误,但具体的错误原因也是不知道的

      503 Service Unavailable 表示服务器当前很忙,暂时无法响应服务,我们上网时有时候遇到的“网络服务正忙,请稍后重试”的提示信息就是状态码503。是一个“临时”的状态,很可能过几秒钟后服务器就不那么忙了,可以继续提供服务,所以503响应报文里通常还会有一个“Retry-After”字段,指示客户端可以在多久以后再次尝试发送请求

    HTTP 请求、响应头部字段

    请求头和响应头的结构是基本一样的,唯一的区别是起始行

    请求行或状态行再加上头部字段集合就构成了HTTP报文里完整的请求头或响应头,对比两个示意图:

    在这里插入图片描述

    在这里插入图片描述

    头部字段是key-value的形式,key和value之间用 :分隔,最后用CRLF换行表示字段结束。比如在“Host:127.0.0.1”这一行里key就是“Host”,value就是“127.0.0.1”

    HTTP头字段非常灵活,不仅可以使用标准里的Host、Connection等已有头,也可以任意添加自定义头,这就给HTTP协议带来了无限的扩展可能。不过使用头字段需要注意下面几点:

    • 字段名不区分大小写,例如 Host 也可以写成 host ,但首字母大写的可读性更好
    • 字段名里不允许出现空格,可以使用连字符 - ,但不能使用下划线 _ 。例如,test-name是合法的字段名,而 test name 和 test_name是不正确的
    • 字段名后面必须紧接着:不能有空格,而:后的字段值前可以有多个空格
    • 字段的顺序是没有意义的,可以任意排列不影响语义
    • 字段原则上不能重复,除非这个字段本身的语义允许,例如Set-Cookie

    常用头字段

    HTTP协议规定了非常多的头部字段,实现各种各样的功能,但基本上可以分为四大类:

    • 通用字段:在请求头和响应头里都可以出现
    • 请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件
    • 响应字段:仅能出现在响应头里,补充说明响应报文的信息
    • 实体字段:它实际上属于通用字段,但专门描述body的额外信息

    几个最基本的头字段:

    • Date 通用字段,通常出现在响应头里,表示HTTP报文创建的时间,客户端可以使用这个时间再搭配其他字段决定缓存策略

    • Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)

    • Host 请求字段 告诉服务器这个请求应该由哪个主机来处理,当一台计算机上托管了多个虚拟主机的时候,服务器端就需要用Host字段来选择,有点像是一个简单的“路由重定向”

      例如在127.0.0.1上有三个虚拟机:www.chrono.com、www.metroid.net 和 origin.io 那么当使用域名的方式访问时,就必须要用Host字段来区分这三个IP相同但域名不同的网站,否则服务器就会找不到合适的虚拟主机,无法处理

    • User-Agent 请求字段,发送请求的浏览器类型、操作系统等信息

    • Accept 请求字段,客户端可识别内容类型列表,用于指定客户端接收哪些类型信息

    • Server 响应字段,只能出现在响应头里。它告诉客户端当前正在提供Web服务的软件名称和版本号,例如“Server: openresty/1.15.8.1”,即使用的是OpenResty 1.15.8.1

      Server字段也不是必须要出现的,因为这会把服务器的一部分信息暴露给外界,如果这个版本恰好存在 bug,那么黑客就有可能利用bug攻陷服务器。所以,有的网站响应头里要么没有这个字段,要么就给出一个完全无关的描述信息

      比如GitHub,它的Server字段里就看不出是使用了Apache还是Nginx,只是显示为“GitHub.com”
      在这里插入图片描述

    • 实体字段 Content-Length,它表示报文里body的长度,也就是请求头或响应头空行后面数据的长度。服务器看到这个字段,就知道了后续有多少数据,可以直接接收。如果没有这个字段,那么body就是不定长的,需要使用chunked方式分段传输

    • 实体字段 Content-Type发送给接收者实体正文媒体类型HTTP COntent-Type 对照表

    • Expires ,实体报头给出响应过期的日期和时间

    展开全文
  • 基于wireshark的HTTP请求报文分析

    千次阅读 2020-04-24 10:16:12
    -请求请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1 方法字段就是HTTP使用的请求方法,比如常见的GET/POST 其中HTTP协议版本有两种:...

    HTTP请求
    一个HTTP请求由四个部分组成:请求行、请求头部、空行、请求数据。
    -请求行
    请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1

    方法字段就是HTTP使用的请求方法,比如常见的GET/POST

    其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:

    HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。

    -请求头部
    HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。

    常见的请求头字段含义:

    Accept: 浏览器可接受的MIME类型。

    Accept-Charset:浏览器可接受的字符集。

    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

    Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

    Content-Length:表示请求消息正文的长度。

    Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

    If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答。

    Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)。包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

    User-Agent:User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

    Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。

    Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。

    From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

    Connection:处理完这次请求后是否断开连接还是继续保持连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

    Range:Range头域可以请求实体的一个或者多个子范围。例如,

    表示头500个字节:bytes=0-499

    表示第二个500字节:bytes=500-999

    表示最后500个字节:bytes=-500

    表示500字节以后的范围:bytes=500-

    第一个和最后一个字节:bytes=0-0,-1

    同时指定几个范围:bytes=500-600,601-999

    但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。

    UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

    -空行
    它的作用是通过一个空行,告诉服务器请求头部到此为止。
    -请求数据
    若方法字段是GET,则此项为空,没有数据

    若方法字段是POST,则通常来说此处放置的就是要提交的数据

    比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。

    响应报文
    响应报文由三部分组成:响应行、响应头、空行、响应体
    -响应行
    响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK

    其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。

    //常见状态码:

    100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。

    200~299:表示成功接收请求并已完成整个处理过程。常用200

    300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)

    400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)

    500~599:服务器端出现错误,常用500

    更详细的状态码信息
    -响应头
    响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

    设置HTTP响应头往往和状态码结合起来。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,……等等许多其他任务。

    常见的响应头字段含义:

    Allow:服务器支持哪些请求方法(如GET、POST等)。

    Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

    Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。

    Content- Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置 Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

    Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。

    Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。

    Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

    Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

    Refresh:告诉浏览器隔多久刷新一次,以秒计。

    Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。

    Set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。

    Transfer-Encoding:告诉浏览器数据的传送格式。

    WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\”“)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问。

    注:设置应答头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。和设置状态代码相似,设置应答头应该在发送任何文档内容之前进行。

    setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头,前者避免了把Java时间转换为GMT时间字符串的麻烦,后者则避免了把整数转换为字符串的麻烦。

    HttpServletResponse还提供了许多设置

    setContentType:设置Content-Type头。大多数Servlet都要用到这个方法。

    setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。

    addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。
    -空行
    -响应体
    响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

    HTTP头域
    HTTP的头域包括通用头,请求头,响应头和实体头四个部分。前面讲解了请求头和响应头,接下来看看通用头和实体头(这里可能和前面介绍的请求头、响应头有重复)。
    -通用头
    通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个通用头域。

    常见通用头含义:

    Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

    Public指示响应可被任何缓存区缓存。 Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。 no-cache指示请求或响应消息不能缓存 no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

    Date:表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

    Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
    -实体头
    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。

    常见实体头含义:

    Content-Encoding: 服务器通过这个头告诉浏览器数据的压缩格式。

    Content-Length: 服务器通过这个头告诉浏览器回送数据的长度。

    Content-Disposition:告诉浏览器以下载方式打开数据。

    Content-Type:服务器通过这个头告诉浏览器回送数据的类型。Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型。

    Content-Range:用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

    例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234,如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。

    Last-Modified:指定服务器上保存内容的最后修订时间。

    ETag:缓存相关的头

    Expires:告诉浏览器把回送的资源缓存多长时间 -1或0则是不缓存

    其中三种禁止浏览器缓存的头字段:

    Expires:-1或0

    Cache-Control:no-cache

    Pragma:no-cache

    POST/GET区别
    Http定义了与服务器交互的不同方法,最基本的方法有4种:GET、POST、PUT、DELETE。

    而HTTP中的 GET,POST,PUT,DELETE 就对应着对URL资源的 查,改,增,删 4个操作。所以说:GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

    主要区分一下get和post
    -提交数据形式
    GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),会直接展现在地址栏中,以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5 %A5%BD。

    如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,

    得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

    而POST方法则会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数
    -提交数据大小
    get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响:比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

    post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的处理能力。

    所以大小的限制还是得受各个web服务器配置的不同而影响。
    -提交数据安全
    POST比GET方式的安全性要高

    通过GET提交数据,用户名和密码将明文出现在URL上,因为一下几个原因get方式安全性会比post弱:

    (1)登录页面有可能被浏览器缓存

    (2)其他人查看浏览器的历史纪录,那么别人就可 以拿到你的账号和密码了

    (3)当遇上跨站的攻击时,安全性的表现更差了

    展开全文
  • 首先,抓取报文前,需要对Wireshark配置TLS通讯密钥,否则抓取不到,因为信息加密了,具体步骤可参考: https://blog.csdn.net/Enderman_xiaohei/article/details/99441895 Wireshark抓包结果如下 Frame 是...

    本文基于Wireshark抓取https报文, 分析POST报文

    首先,抓取报文前,需要对Wireshark配置TLS通讯密钥,否则抓取不到,因为信息加密了,具体步骤可参考:

    https://blog.csdn.net/Enderman_xiaohei/article/details/99441895

    Wireshark抓包结果如下

    Frame 是wireshark自己定义的

    Ethernet II, 数据链路层, 以太网

    Internet Protocol, 网络层, IP层

    Transmission Control Protocol, TCP层

    [6 Reassembled TCP Segments]  TCP层接收到上层的数据后拆包

    Transport Layer Security     TLS层,加密层

    [2 Reassembled TLS segments]        这个是加密握手信息, 需要在WireShark配置密钥文件才能捕获到,这里的密钥是随机生成的

    Hypertext Transfer Protocol       HTTP层

    Line-based text data: text/plain   #数据# POST请求数据

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 使用Wireshark抓取HTTP报文

    千次阅读 2019-02-25 19:35:12
    最近在学习计算机网络知识,学习过程中使用抓包工具Wireshark抓取网络数据包,来辅助理解网络协议。 Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包...

    转:http://www.imooc.com/article/74915?block_id=tuijian_wz

     

    前言

    最近在学习计算机网络知识,学习过程中使用抓包工具Wireshark抓取网络数据包,来辅助理解网络协议。

    Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

    目录

    文章目录

    基本使用

    下载地址https://www.wireshark.org/

    支持系统:Windows、macOS

    基本使用

    基本使用

    主要功能区

    主要功能区:

    1. 显示过滤器
    2. 抓获的封包列表
    3. 封包详细信息
    4. 封包16进制数据

    抓取HTTP报文

    抓取http报文-目录

    1.开启捕捉任务

    2.浏览器访问http://www.lizhengyang.cn/

    3.停止捕捉任务

    4.设置显示过滤条件

    开启捕捉任务后,封包列表可能会出现很多无用的数据包,设置显示过滤器过滤掉冗余数据。

    如下图,在显示过滤器中输入:http and ip.addr == 39.107.127.222 (IP地址替换为目标网站的IP)

    按回车键,只剩下两个数据包:请求包、响应包。

    设置过滤条件

    5.查看HTTP报文

    在任意数据包上点击右键:追踪流–>HTTP流

    弹出窗口就是完整的HTTP报文,红色字体为HTTP请求报文,蓝色字体为HTTP响应报文

    查看HTTP报文

    过滤器

    如果不设置过滤器,会抓取很多杂乱冗余的数据,以至于很难找到自己需要的部分。使用过滤器可以帮助我们精准找到需要的信息。

    过滤器分两种:

    • 捕捉过滤器。只捕捉符合过滤规则的封包,其它数据不会存在封包列表中。在捕捉前设置。
    • 显示过滤器。用来过滤抓取后的结果,可以随意更改过滤规则。

    注意:两种过滤器的规则语法是不一样的,不要混淆。

    捕捉过滤器

    捕捉过滤器的语法与其它使用Lipcap(Linux)或者Winpcap(Windows)库开发的软件一样,比如著名的TCPdump。捕捉过滤器必须在开始捕捉前设置完毕,这一点跟显示过滤器是不同的。

    设置捕捉过滤器的步骤是:
    - 工具栏 -> 捕捉 -> 选项
    - WLAN -> 捕捉过滤器中输入规则
    - 点击开始(Start)进行捕捉

    设置捕捉过滤器

    过滤公式

    语法: Protocol Direction Host(s) Value Logical Operations Other expression
    例子: tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128

    Protocol(协议):

    可能的值: etherfddiiparprarpdecnetlatscamoprcmopdltcp

    如果没有特别指明是什么协议,则默认使用所有支持的协议。

    Direction(方向):

    可能的值: srcdstsrc and dstsrc or dst

    如果没有特别指明来源或目的地,则默认使用 “src or dst” 作为关键字。

    例如,host 10.2.2.2src or dst host 10.2.2.2是一样的

    Host(s)

    可能的值: netporthostportrange

    如果没有指定此值,则默认使用"host"关键字。

    例如,src 10.1.1.1src host 10.1.1.1`相同。

    Logical Operations(逻辑运算):

    可能的值:notandor

    否(not)具有最高的优先级。或(or)和与(and)具有相同的优先级,运算时从左至右进行。

    例如

    • not tcp port 3128 and tcp port 23(not tcp port 3128) and tcp port23相同。
    • not tcp port 3128 and tcp port 23not (tcp port 3128 and tcp port23)不同。

    案例

    //显示目的TCP端口为3128的封包。
    tcp dst port 3128
    
    //显示来源IP地址为10.1.1.1的封包。
    ip src host 10.1.1.1
    
    //显示目的或来源IP地址为10.1.2.3的封包。
    host 10.1.2.3
    
    //显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
    src portrange 2000-2500
    
    //显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
    not imcp
    
    //显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
    src host 10.7.2.12 and not dst net 10.200.0.0/16
    
    //显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包。
    (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
    
    //显示目的TCP端口为3128的封包。
    tcp dst port 3128`
    
    //显示来源IP地址为10.1.1.1的封包。
    ip src host 10.1.1.1
    
    //显示目的或来源IP地址为10.1.2.3的封包。
    host 10.1.2.3
    
    //显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
    src portrange 2000-2500
    
    //显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
    not imcp
    
    //显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
    src host 10.7.2.12 and not dst net 10.200.0.0/16
    
    

    显示过滤器

    刚才抓取HTTP报文使用的就是显示过滤器。

    过滤公式

    语法:Protocol.String 1.String 2ComparisonoperatorValueLogicalOperationsOtherexpression
    例子:http request uri==“/index”xorip.dst != 10.4.5.6

    看到这里有是不是有点蒙,每个符号都认识,但为啥要这样组合呢?

    不要怕,这个公式不需要记住,熟悉一下公式的结构即可,因为Wireshark中可已通过表达式工具来动态生成规则。

    动态生成过滤规则

    点击“表达式”

    表达式

    弹出“显示过滤器表达式”窗口

    滤器表达式窗口

    上图圈住的五个模块对应着五个步骤:

    第一步:搜索网络协议

    第二步:选择协议(Protocol)

    可以使用tcp、ip、udp等位于OSI模型第2至7层的协议。点击协议列表,可以选择需要参与过滤的协议。

    举例:http.request.uri (http请求中的uri)

    其中http为协议,request.uri是协议的子类,通过 .连接。Wireshark的官网提供了对各种 协议以及它们子类的说明

    第三步:选择比较运算符(Comparison operators)

    英文写法:C语言写法:含义:
    eq==等于
    ne!=不等于
    gt>大于
    lt<小于
    ge>=大于等于
    le<=小于等于
    containscontains包含
    matchesmatches正则表达式匹配
    inin在指定集中

    第四步:选择比较的值

    第五步:校验规则是否合法

    以上的每一步操作都会在下方输入框自动生成过滤规则,合法的规则显示绿色背景,不合法的规则显示红色背景。

    校验完成点击ok,显示过滤器规则设置完成。

    多个过滤条件

    若需要通过过个条件筛选数据,比如:只显示80端口和8080端口的封包。就要用到逻辑运算符(Logical expressions),把多个条件连接。

    英文写法:C语言写法:含义:
    and&&逻辑与
    or||逻辑或
    xor^^逻辑异或
    not!逻辑非

    被程序员们熟知的逻辑异或是一种排除性的或。当其被用在过滤器的两个条件之间时,只有当且仅当其中的一个条件满足时,这样的结果才会被显示在屏幕上。
    举个例子:

    //只有当目的TCP端口为80或者来源于端口1025(但又不能同时满足这两点)时,这样的封包才会被显示。
    tcp.dstport 80 xor tcp.dstport 1025
    

    案例

    //显示HTTP或UDP议封包
     http || udp
    
    //显示来源或目的IP地址为10.1.1.1的封包
    ip.addr == 10.1.1.1
    
    //显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。换句话说,显示的封包将会为:
    //来源IP:除了10.1.2.3以外任意;目的IP:任意
    //以及
    //来源IP:任意;目的IP:除了10.4.5.6以外任意
    `ip.src != 10.1.2.3 or ip.dst != 10.4.5.6` 
    
    //显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。换句话说,显示的封包将会为:来源IP:除了10.1.2.3以外任意;同时须满足,目的IP:除了10.4.5.6以外任意 
    ip.src != 10.1.2.3 and ip.dst != 10.4.5.6
    
    //显示来源或目的TCP端口号为25的封包
    tcp.port == 25
    
    //显示目的TCP端口号为25的封包 
    tcp.dstport == 25
    
    //显示包含TCP标志的封包
    tcp.flags    
    
    //显示包含TCP SYN标志的封包
    tcp.flags.syn == 0x02`
    
    //显示HTPP域名中包含'baidu'的封包
    http.host contains "baidu"
    
    

    结束语

    至此,Wireshark的基本功能和使用方法已经介绍完了。如果有错误的地方恳请留言指出。

    参考资料

    https://wiki.wireshark.org/DisplayFilters

    https://wiki.wireshark.org/CaptureFilters

    http://openmaniak.com/cn/wireshark.php

    展开全文
  • Wireshark(前称Ethereal)是一个免费的网络报文分析软件。网络报文分析软件的功能是抓取网络报文,并逐层显示报文中各字段取值。网络报文分析软件有个形象的名字“嗅探工具”,像一只猎狗,忠实地守候在接口旁,...
  • WireShark抓包报文结构分析

    千次阅读 2020-07-19 21:06:47
    为了解报文结构,我就把上次抓的Telnet的报文拿出来分析了一下。具体如下: 物理链路层中数据用电信号传输,对应0和1,一个信号为1 bit;报文中为16进制(0x表示),一个占4位(bit),一组占8 bit。 最外层...
  • wireshark被称为报文分析界的一哥,本文着眼于使用层次的,抛砖引玉,介绍一下wireshark在批量增删改查方面的应用。
  • 2. 安装好wiresshark后的目录(**/**/Wireshark)下创建一个 lua 文件夹。把root3.0放在当前文件夹下 并解压 3. 在wiresshark目录下 init.lua 文件目录添加上一行 dofile(DATA_DIR.."lua/robotV3_0/robot.lua"&#...
  • WireShark捕获报文理解TCP协议

    万次阅读 2017-08-27 18:11:34
    •RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包; •SYN:表示同步序号,用来建立连接。 •FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,...
  • 使用wireshark分析tcp报文

    万次阅读 2019-05-12 19:21:12
    首先抓取了一个简单的http请求报文, 选取其中的一次完整请求,追踪tcp流: 可以在报文中看到tcp的3次握手,以及http 的request 和 response ,还有tcp的4次断开。 另外整个封包列表的面板中也有显示,编号,时间戳...
  • HTTP报文格式及WireShark抓包分析

    千次阅读 2019-01-19 16:40:22
    HTTP请求报文格式 在这个请求格式之中空行是必不可少的一行。空行之后是请求实体。一个具体的HTTP请求报文格式如下: GET /su?wd=www.&amp;action=opensearch&amp;ie=UTF-8 HTTP/1.1 Host: suggestion...
  • wireshark 分析HTTP报文

    千次阅读 2019-06-04 16:50:42
    过滤http报文: 选中第7帧,右键追踪流--》HTTP流,查看详细信息,红色部分为请求报文,蓝色部分为响应报文: 之后 可以分析请求报文和响应报文。 ...
  • FTP协议解析之Wireshark报文分析

    千次阅读 2021-02-27 21:40:14
    FTP是客户端-服务器协议,客户端将请求文件,而本地或远程服务器将提供该文件。我们熟知的FTP客户端:WinSCP、WS FTP、FileZilla等都是使用文件传输协议,它是一种标准的Internet 协议。用于通过TCP / IP 连接在...
  • 打开主页面能看到很多报文,但是从这么多报文中筛选我们需要的某个类型的报文,就需要用到表达式功能,比如下面,只让列表显示Pairing相关的内容: 首先点击“表达式…” 然后输入首先在下面搜索的范围,比如...
  • wireshark抓包分析http报文

    千次阅读 2018-06-18 16:58:52
    应该可以看懂,我们这里主要研究hypertext transfer protocal 其中它由以下几个部分组成请求行+请求头+空白行+body(请求体)请求体如下实际上request格式如下那么响应报文是怎样的呢其格式为这里我们看一下body信息...
  • WireShark捕获TCP和HTTP报文并分析

    千次阅读 2021-01-26 23:33:29
    制作简单的web页面2、使用Wireshark捕获与web服务器的交互过程的步骤2.1在阿里云服务器中打开XAMPP,点击start按钮,启动Apache服务2.2打开本机wireshark,选择WLAN网卡2.3打开浏览器输入39.102.89.87,打开web...
  • 黑色:报文错误(TCP解析错误、重传、乱序、丢包、重复响应) Bad TCP:TCP解析错误,通常为重传、乱序、丢包、重复响应 HSRP State Change:HSRP(热备份协议),表示状态非active和standby Spanning Tree Topology...
  • wireshark——Http报文分析

    千次阅读 2014-09-29 14:46:48
    通过使用 wireshark
  • 一、Wireshark介绍1、Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样,Wireshark也使用pcapnetwork library来...
  • 文章目录报文分析笔记---常见wireshark报文标记Fragmented IP protocolPacket size limited during captureTCP Previous segment not capturedTCP ACKed unseen segmentTCP Out-of-OrderTCP Dup ACKTCP Fast ...
  •      当你使用tcpdump或是Wireshark进行HTTP抓包分析处理的时候,首先需要你对HTTP报文格式结构有一个大概的了解,在 HTTP协议之报文格式 一文中,对HTTP的请求与响应报文格式作了一个简要的描述,这对你快速...
  • http请求报文和响应报文

    万次阅读 多人点赞 2018-12-11 13:42:30
    http请求报文和响应报文 前言 http协议是一个应用层协议,其报文分为请求报文和响应报文 当客户端请求一个网页时,会先通过http协议将请求的内容封装在http请求报文之中,服务器收到该请求报文后根据协议规范进行...
  • 点击上方“中兴开发者社区”,关注我们每天读一篇一线开发者原创好文本文简单说明一下基于wireshark的大报文的按需切割方法,主要说明的是如何将一个很大的报文按照需求变成一个较小的报文。通常从外场采集回来的报文...
  • TCP: 版本:4 服务类型:5 总长度:0034 标识:43 13 标志+片偏移:40 00 生存时间:80 协议:06 首部校验和:804d 原地址:c0 a8 c7 dd 目的地址:8c cd 22 10 ...发送端MAC地址:...
  • 抓包采用wireshark,提取特征时,要对session进行过滤,找到关键的stream,这里总结了wireshark过滤的基本语法,供自己以后参考。(脑子记不住东西) wireshark进行过滤时,按照过滤的语法可分为协议过滤和内容过滤...
  • 文章目录一、HTTP头部信息分类二、HTTP请求头和响应头... ...这些十六进制的数字经过浏览器或者专用工具比如wireshark的翻译,可以得到HTTP的报文结构。 2.HTTP的请求报文包括:请求行(request line)、请求头部(head...
  • 重定向报文 转发报文 iframe报文 ... charset=UTF-8" pageEncoding="UTF-8"%> Insert title here 删除学生或老师信息 演示效果 抓包wireshark 请求操作 请求报文 TCP层信息 双方端口共4个字节 回应信息 追踪http流
  • 实验部分 Windows Server 2008 IP:192.168.1.103 Windows Server 2008 → \rightarrow →开始 → \rightarrow →控制面板 → \rightarrow →程序 → \...暂未分析 Conclusion 对Win7-1的请求报错,暂未分析报错原因
  • 三、HTTP请求报文格式

    千次阅读 2021-01-20 14:05:10
    一、HTTP的请求报文的格式 一个HTTP的请求报文的通用格式如下: 请求行 请求行中的方法和其大致作用如下表 请求行中的URL表示请求资源的路径和名称,版本字段是当前HTTP的版本 首部行 首部行中包含一些...
  • 使用wireshark分析tcp/ip报文报文

    千次阅读 2017-01-22 17:34:00
    以太网报文的结构如下: 其中,以太网的帧头: 14 Bytes:MAC目的地址48bit(6B),MAC源地址48bit(6B),Type域2B,一共14B。 IP头部: TCP头部:   ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,056
精华内容 4,022
关键字:

wireshark请求报文