Braid信息安全博客 - Web安全|代码审计|安全开发|Java|php|python

【安全开发】 HTTP协议中的状态码详解

0x00 简介

  HTTP状态码,第一反应是200、302、403、404和500这些常见的,但如果是做涉及到网络爬虫这样的安全工具开发,还是需要了解其它状态码的。像之前我用JavaFX写了几个安全相关的工具(详情参考:http://www.cnbraid.com/2016/09/13/javafx/),里面提到的御剑扫描器就会遇到很多种http状态码,所以本文对状态码进行详细的实例讲解。

0x01 状态码分类

  HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码。随着协议的发展,HTTP规范中会定义更多的状态码。

状态码 已定义范围 分类
1XX 100-101 信息提示
2XX 200-206 成功
3XX 300-305 重定向
4XX 400-415 客户端错误
5XX 500-505 服务器错误

0x02 成功状态码(2XX)

204 No Content(没有内容)

返回的Response中只有一些Header和一个状态行, 没有实体的主题内容(没有response body)
204状态码的作用在于:
  1. 在不获取资源的情况下了解资源的情况(比如判断其类型)
  2. 通过查看Response中的状态码, 看看某个对象是否存在
  3. 通过查看Header, 测试资源是否被修改了。
实例:
先打开Fiddler, 然后启动浏览器访问ditu.google.com, 你会捕获到很多204

206 Partial Content(部分内容)

206状态码代表服务器已经成功处理了部分GET请求(只有GET方式的request, web服务器才可能返回206)
应用场景:
  1. FlashGet, 迅雷或者HTTP下载工具都是使用206状态码来实现断点续传
  2. 将一个大文档分解为多个下载段同时下载 比如,在线看视频
实例:
一些流媒体技术比如在线视频,可以边看边下载,就是使用206来实现的。
  打开Chrome浏览器按F12开启调试模式,然后用浏览器打开爱奇艺视频中的纪念长征胜利80周年,你就会在下方区域中就能看到一堆的206
  1. 浏览器发送一个Get请求,其中header中包含Range: bytes=0-8191. (意思就是请求得到0-8191这个范围的数据)。
  2. Web服务器返回一个206的Response,header中包含Content-length为8192,即刚才请求的数据。

0x03 重定向状态码(3XX)

301 Moved Permanently(永久移除)

301,Moved Permanently(永久移除),Response中包含一个Location URL,说明资源现在所处的位置。
实例:
打开Chrome浏览器按F12开启调试模式,然后用浏览器打开http://duoyifood.com.cn/admin
  1. Web服务器返回Response 301,Location=http://duoyifood.com.cn/admin/ (告诉客户端我们的资源位于这里)
  2. 浏览器客户端会自动再发送一个Request去访问http://duoyifood.com.cn/admin/

这里提下,上面浏览器客户端自动再次请求http://duoyifood.com.cn/admin/所返回的状态码跟第一次请求没有任何关系,可能是200、302也可能是403如下:

可以看到上面301之后是302,然后我们访问http://duoyifood.com.cn/images发现301后是403了

0x04 客户端错误状态码(4XX)

有时客户端会发送一些服务器无法处理的东西,比如格式错误的Request,或者最常见的是,请求一个不存在的URL。

0x05 服务器错误状态码(5XX)

有时候客户端发送了一条有效Request, Web服务器自身却出错了。 可能是Web服务器运行出错了, 或者网站都挂了。 5XX就是用来描述服务器错误的。

参考来源:
http://kb.cnblogs.com/page/168720

本文由HackBraid整理总结,原文链接:http://www.cnbraid.com/categories/编程开发/statuscode.html,如需转载请联系作者。