web基础——HTTP协议
Posted GZCCCTF
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web基础——HTTP协议相关的知识,希望对你有一定的参考价值。
HTTP协议是HyperText Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传输协议。
HTTP基于TCP/IP通信协议传输数据。
超文本简单说就是不只是文本,可以是音频、视频等。
HTTP协议工作于C/S架构上,Client客户端和Server服务器,浏览器作为客户端发送URL请求,服务器作为接受端响应请求。
http://www.gzcc.cn:80/usedate/xs_main.aspx?number=2018&id=666#ding
一个完整的URL包括几个部分:
1.协议部分:上面的URL中“http:”就代表网页使用的是HTTP协议。在互联网中可以使用多种协议,如HTTP、FTP、SMTP等等。在“HTTP:”后面的“//”为分隔符。
2.域名部分:例子中www.gzcc.cn即域名,域名部分也可使用IP,如http://59.42.106.13:80/……
3.端口部分:跟在域名部分的后面,使用“:”符号分隔域名和端口,80即端口。端口不是必须要写,不写HTTP协议默认是80端口(HTTPS协议默认是443端口),如果网站搭建时使用的不是80端口,就必须加上正确的端口。
4.虚拟目录部分:从第一个“/”开始到最后一个“/”之间都是虚拟目录部分,例子中的虚拟目录是“/usedate/”。虚拟目录不是URL的必须部分,如果资源不在该目录下,就不需要访问该目录。
5.文件名部分:从域名的最后一个“/”开始到“?”为止,是文件名部分;如果没有“?”,则从域名的最后一个“/”开始到“#”为止,是文件名部分;如果没有“?”和“#”,那么从域名的最后一个“/”开始到结束,都是文件名部分。例子中“xs_main.aspx”是文件名。文件名不是URL的必须部分,如果省略则使用搭建网站时设置的默认文件。
6.参数部分:从“?”开始到"#"之间的部分为参数部分。参数与文件名之间使用“?”分隔,参数可以有多个参数,参数之间使用“&”分隔。在本例子中的参数为“number=2018&id=666”。
7.锚部分:从“#”作为分隔符开始到最后,都是锚部分。本例子中“ding”为锚部分
HTTP请求消息Request
客户端向服务器发送http请求时会发送一个请求包,请求包由四个部分组成:请求行、请求头部、空行、数据。
使用burp抓到的请求包如下图:
第一部分:请求行,用来说明请求的类型,要访问的资源,所使用的HTTP版本。
第二部分:请求头部,用来说明服务器要使用到的附加信息。
第三部分:空行,请求头后面的空行是必须要的。
第四部分:请求数据也叫主体,可以添加任意的其它数据。
HTTP响应消息
一般情况下,服务器就收到并正确处理客户端发过来的请求包后,就会返回一个HTTP响应消息,HTTP响应由四个部分组成:状态行、消息报头、空行、响应正文。
浏览器由于使用的内核不同,造成在某个浏览器开发适配的网站在另一个浏览器打开错误,所以每个浏览器一般都配有开发者工具,让开发者在浏览器上调试。按键盘的F12就出来了,有些电脑F12键被设置为其它功能,可以鼠标右键后,选择“检查”(谷歌浏览器),“查看元素”(火狐浏览器),如下图,打开该页面后到“network”,此时里面是空的,刷新一下就有文件了。左边的红框内是发出请求后响应接收到的全部文件。右边的红框是查看某文件的信息,选择某个文件之后右边就显示了,“Headers”是响应文件的头部(已经被浏览器设置为某种格式显示了),包含状态行和消息报头。
如下图为正常的某个响应包:
“HTTP/1.1”为协议版本,“200”为状态码,“OK”为状态码描述符。
“sucess”为响应正文。
HTTP状态码
状态码由三位数字组成,第一个数字定义了响应的类别,共分为五种类别:
1XX:通知。在与HTTP服务器沟通时使用。
2XX:成功。表明操作成功了。
3XX:重定向。表明客户端需要做些额外工作才能得到所需要的资源,通常用于GET请求。他们通常告诉客户端需要向另一个URI发送GET请求,才能得到所需的表示。那个URI就包含在Location响应报头里。
4XX:客户端错误。可能是认证信息错误,也可能是格式或HTTP库有问题,客户端要自行改正。
5XX:服务端错误。此时服务器处于不能执行客户端请求的状态,此时客户端应稍后重试。
常见状态码:
200状态码:表示请求已成功,请求所希望的响应头或数据体将随此响应返回
202状态码:服务器已接受请求,但尚未处理
401状态码:请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403状态码:服务器已经理解请求,但是拒绝执行它。
404状态码:请求失败,请求所希望得到的资源未被在服务器上发现。
500状态码:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法:GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
此处只简单介绍GET和POST:
发送之后抓的包如下图:
GET和POST还有很多的区别,此处不介绍了,感兴趣可以自己百度
Cookie
HTTP协议是无状态的,客户端请求资源->服务器验证身份->服务器返回请求结果,当客户端第二次请求时,服务器又得验证身份,这就是无状态的表现。这样会加大服务器和整个网络的开销,因此出现了cookie。
客户端第一次请求资源时,服务器验证完身份之后就给客户端分发一段文本信息(cookie),客户端收到这段信息后就保存到本地,当第二次或以后继续访问该网站时,就把该段文本信息放进请求包的请求头部中,服务器收到之后请求包之后就可以只验证该文本信息(cookie)。
cookie有许多属性项,Expires(过期时间)、Path(设置cookie的生成路径)、Domain(生成该cookie的域名)等等。cookie的有效时间可以定义,可设置具体时间。
Cookie实战篇
1.访问网址,不能成功
2.原因是没有提供足够信息给服务器验证身份。比如说访问某些资源时需要账号和密码才能访问,但是当前访问没有这些信息,所以服务器拒绝访问
3.访问同一个域名(jwxw.gzcc.cn)的另一个网页,因为第一次访问,此时请求头中没有cookie信息,但是有账号和密码作为验证身份依据
3.服务器验证完后,向客户端发送cookie,客户端查看本地存储的cookie
4.再次访问之前的网站时,由于两次访问的都是同一个域名,本地存储了该域名的cookie,所以就把该cookie放入请求头中
5.服务器设置了cookie也能作为身份依据,所以能成功访问该网页
HTTPS
HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
https请求同样可以被抓包,但是抓的效果不太好,并且数据主体中不是明文,而是加密之后的
广州商学院网络攻防协会
文案|钟晓航
编辑|钟晓航
摄影|钟晓航
初审|吴创杰
复审|施伟康
终审|袁学倩
以上是关于web基础——HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章