HTTP协议(5)HTTP请求和响应
2018-11-22 07:10
489 查看
之前曾介绍过,所有的HTTP通信都被构造成一对HTTP请求和HTTP响应,HTTP协议的请求与响应报文都是由“首部header”和“主体body”两部分组成的。其中主体部分是请求和响应的数据,首部部分则规定了请求和响应的内容格式。
1.HTTP请求
对于HTTP请求报文,主要由三部分组成:请求行、请求头、请求正文。在请求头和请求正文之间一般会有两个空行进行间隔。
下图是用Burpsuite截获的请求报文。
HTTP请求报文的第一行即为请求行,这个报文的请求行就是“GET / HTTP/1.1”。
请求行由三部分组成:
- 第一部分“GET”,表明该请求是采用GET方法;
- 第二部分“/”,表明请求访问的页面,“/”是指网站根目录,也就是要访问网站的首页。它结合请求头的Host字段可以组成一个完整的请求URL:“×××w.51cto.com/”
- 第三部分“HTTP1.1”,表明所使用的HTTP协议版本,目前所使用的都是HTTP1.1版本。
对于这个报文,由于采用的是GET方法,因而没有请求正文。从第二行直至最后一行,都属于是请求头(也被称为消息头),服务端据此获取客户端的信息。我们应当熟知请求头中的内容,这在后面会详细介绍。
请求正文是可选的,它最常出现在POST请求方法中。比如打开一个用户登录页面,此时拦截到的HTTP请求就包含完整的三个组成部分。
2.HTTP响应
HTTP响应报文总体上也是由三部分组成:响应行、响应头、响应正文。
下图是响应报文。
- HTTP响应的第一行为响应行,其中有HTTP版本(HTTP/1.1)、状态码(200)以及消息“OK”。
- 第二行至末尾的空白行为响应头,由服务器向客户端发送。
- 响应头之后是响应正文,是由服务器向客户端发送的HTML数据。
响应报文中的状态码和响应头都比较重要,这个在后面也会详细介绍。
3.例题:你必须让他停下
BugKu http://123.206.87.240:8002/web12/
打开网页之后,发现页面在不停地刷新。查看源码,可以发现是通过一段Javascript的脚本来实现页面刷新的。
根据页面中的提示“Stop at panda ! u will get flag”,再观察到页面每刷新一次,<img>标签中src属性所指定的图片来源也在随之变化,因而可以推测,当显示到指定的图片时,就应该会出现flag。但是flag是通过a标签来输出的,a标签又加了一个style="display:none"的属性,也就是让a标签的内容不在页面上显示。所以即使刷新到合适的图片,在页面上也看不到flag,而只能通过源码查看。
明白了原理之后,接下来就很简单了。我们可以在Burpsuite中通过Repeater模块反复发送HTTP请求,每次所返回的HTTP响应也应该是在不断变化的,而且还可以直接看到响应的源码。果然当显示到10.jpg时,flag就出来了。
相关文章推荐
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
- Servlet(10)Http协议、HTTP请求和响应头及其详解(文件下载)
- Http协议:HTTP请求和响应
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
- HttpURLConnection从客户端向服务器发送Http请求以及服务器响应全过程解析
- JAVA发送HTTP请求,返回HTTP响应内容,实例及应用
- 第一部分:HTTP协议之请求和响应
- HTTP1.1协议常用请求头和响应头内容--精简版
- http协议 - 浅谈ETag http响应Last-Modified和ETag
- http协议中各个响应状态200_301_404_500等返回值含义快速一览
- Http协议基础之HTTP响应首部字段
- HTTP协议(二)响应状态码
- python通过get方式,post方式,delete,put发送http请求和接收http响应
- HTTP基础:URL格式、 HTTP请求、响应、消息
- HTTP基础:URL格式、 HTTP请求、响应、消息
- python通过get方式,post方式发送http请求和接收http响应-urllib urllib2
- HTTP协议的请求和响应学习
- HTTP协议中request报文请求方法和状态响应码
- http协议、http事务、URL、http请求的方式、响应码信息、http1.0和1.1区别