python web渗透测试学习2Web应用交互1HTTP基础
Web应用交互
- HTTP协议基础
- HTTP请求
- requests
- 分析HTTP响应
HTTP协议基础
超文本传输协议(HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。
2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论[2],于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。
通常,由HTTP客户端发起请求,创建到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
版本
超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。在 RFC 2145 中描述了HTTP版本号的用法。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。
HTTP/0.9
已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
HTTP/1.1
持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:
- 缓存处理
- 带宽优化及网络连接的使用
- 错误通知的管理
- 消息在网络中的发送
- 互联网地址的维护
- 安全性及完整性
HTTP/2
当前版本,于2015年5月作为互联网标准正式发布。
HTTP是无状态的,服务器和客户端只有请求时知道对方,为此很容易发动攻击。所有的通信是明文,易受截取和篡改。
image.png1994年引入了HTTPS以增强安全性。 HTTPS是基于SSL(Secure Socket Layer)或TLS(Transport Layer Security)的HTTP。
HTTPS在不安全的网络上创建安全通道,免受窃听者和中间人攻击。
在HTTP中,方法指示要对所选资源执行的操作,也称为HTTP动词。 HTTP / 1.0定义了三种方法:
- HEAD:只返回标题和状态代码而不是内容
- GET:这是用于检索给定URI的标准方法
- POST:向服务器提交内容,表单数据,文件等的方法,
HTTP / 1.1引入了以下方法:
- OPTIONS:这为目标资源提供了通信选项
- PUT:此请求存储由给定URI标识的资源
- DELETE:请求服务器删除Request-URI所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
- PATCH:用于将局部修改应用到资源。
按照惯例,HEAD,GET,OPTIONS和TRACE是安全的,它们仅用于信息检索,不应更改服务器状态。POST,PUT,DELETE和PATCH等方法则可能更改服务器状态。
可爱的python测试开发库 请在github上点赞,谢谢!
python中文库文档汇总
接口自动化性能测试线上培训大纲
python测试开发自动化测试数据分析人工智能自学每周一练
[雪峰磁针石博客]python3标准库-中文版
更多内容请关注 雪峰磁针石:简书
-
技术支持qq群: 144081101(后期会录制视频存在该群群文件) 591302926 567351477 钉钉免费群:21745728
-
道家技术-手相手诊看相中医等钉钉群21734177 qq群:391441566 184175668 338228106 看手相、面相、舌相、抽签、体质识别。服务费50元每人次起。请联系钉钉或者微信pythontesting
HTTP头的常见内容:
User-agent用户代理:通知服务器操作系统,浏览器和插件等信息。
Accept-encoding:浏览器支持的编码,通常是GZip或Deflate。会压缩内容以减少每次传输的带宽时间。
Referer:它包含referer URL,一般为来源页面。
Cookie:如果浏览器有该站点的Cookie,则会将其添加到Cookie头。还有服务器端标头,由web服务器设置。
Cache-Control:缓存指令。
Location::用于重定向。301或302响应,服务器必须发送。
Set-Cookie:在用户的浏览器中设置cookie。
WWW-Authenticate:请求认证。当浏览器看到此标头时,它将打开登录名窗口要求用户名和密码。
比如访问https://www.jianshu.com/p/77b013a2a556的HTTP头:
image.png$ telnet www.so.com 80
Trying 125.88.193.243...
Connected to so.qss-lb.com.
Escape character is '^]'.
GET /help/help_1_1.html HTTP/1.0
HTTP/1.1 200 OK
Server: openresty
Date: Mon, 16 Jul 2018 08:30:24 GMT
Content-Type: text/html
...