HTTP状态码(HTTP Status Code)是一种表示网页服务器响应状态的三位数字编码。通过这些数字,可以简化状态的表达。状态码有几十种。
其中首位数字为1-5。根据这5个数字,状态码可以分为5类。1开头的表示请求正在处理;2开头请求已经成功处理;3开头表示重定向;4开头表示请求错误;5开头表示服务器错误。
200
在嗅探抓包过程中,常见的有两种200和304。这两个状态码都关系到能否获取重要信息。当客户第一次请求服务器资源,服务器成功返回资源,这时状态码为200。所以,状态码为200的数据包往往包含用户从服务器获取的数据。
状态码200:请求已成功,请求所希望的响应头或数据体将随此响应返回。即返回的数据为全量的数据,如果文件不通过GZIP压缩的话,文件是多大,则要有多大传输量。
304
每个资源请求完成后,通常会被缓存在客户端,并会记录资源的有效时间和修改时间。当客户再次请求该资源,客户端首先从缓存中查找该资源。如果该资源存在,并且在有效期,则不请求服务器,就不会产生对应的请求数据包。
如果不在有效期,客户端会请求服务器,重新获取。服务器会判断修改时间,如果没有修改过,就会返回状态码304,告诉客户端该资源仍然有效,客户端会直接使用缓存的资源。针对304的响应,渗透人员可以分析对应的请求包,获取资源路径。如果该资源不限制访问,就可以直接请求获取。否则,就需要进行Cookie劫持,进行获取。
状态码304:客户端和服务器端只需要传输很少的数据量来做文件的校验,如果文件没有修改过,则不需要返回全量的数据。
但发生了客户端强制刷新,如ctrl+f5这种情况下,所有的缓存策略就会失效,服务器端都会返回200;在客户端非强制刷新,如点击刷新按钮或按f5的情况下,服务器端会根据request头中:If-Modified-Since字段的时间与文件的实际修改时间进行比较,如果修改时间比If-Modified-Since时间要新,则服务器会认为文件已经修改过了,向客户端返回全量的数据,客户端本地的缓存失效,状态码为200。如果修改时间比If-Modified-Since时间要旧,则服务器会认为文件并未修改过,并且只会向客户端写回头文件,不返回文件数据,客户端使用本地缓存,状态码为304。
原文地址:https://blog.csdn.net/qq_39403733/article/details/88748634