1.1 http协议
HTTP(HyperText Transfer Protocol)即超文本传输协议, 是一种详细规定了浏览器和万维网服务器之间相互通信的规则, 是万维网交换信息的基础, 允许将HTML(超文本标记语言)文档从Web服务器传送到Web浏览器。借助浏览器可以快速发起一次HTTP请求,如果不借助浏览器应该怎样发起HTTP请求呢?其实可以借助很多工具来发起HTTP请求,例如,在Linux系统中的curl命令。严格地说,浏览器也属于HTTP工具的一种。
HTTP协议目前最新版的版本是1.1,HTTP是一种无状态的协议; 无状态是指Web浏览器与Web服务器之间不需要建立持久的连接; HTTP遵循请求(Request)/应答(Response)模型,Web浏览器向Web服务器发送请求,然后Web服务器处理请求并返回适当的应答。默认端口:tcp 80
1.2 http 之 URL
统一资源定位符(Uniform Resource Locator,URL)也称网页地址,是一种特殊类型的统一资源标识符(Uniform Resource Identifier ,URI),用来标识互联网某一处资源的地址。
URL 的标准格式如下:协议:// 服务器域名(ip)[:端口]/[ 路径]/[?查询] (http://www.ctfs-wiki.com/SQLi/sqli.php?id=1)涉及5个部分。
(1) 协议 :在INTERNET 中可以使用多种协议,例如:http,https,ftp等.本例的是http。http的“://”
是分隔符。
(2)服务器域名:该URL的服务器域名是 www.ctfs-wiki.com,也可以使用ip地址来表示。
(3)端口:在服务器域名后面的就是端口,例如:
端口不是一个URL必需的部分,如果省略,将采用默认端口。上图使用的端口是8088.http协议的默认端口是80。
(4)路径:是在端口后面有零个或多个斜线(/)隔开的字符串,一般用来标识主机上的一个目录或者文件地址。本例的的路径为:SQLi/sqli.php
(5)查询:从“?”开始的部分为查询。本例的查询是id =1。id为参数 ,1为参数值。
1.3 http 请求与响应
HTTP请求包括三部分:
请求行(请求方法)
请求头(消息报头)
和请求正文
下面是HTTP请求的一个例子。
POST /login.php HTTP/1.1 //请求行
HOST:www.test.com //请求头
User-Agent(用户代理): Mozilla/5.0 (compatible; MSIE 10.0) //空白行,代表请求头结束 Username=admin&password=admin //请求正文
下面是HTTP请求头的一些内容:
Accept: text/html,image/*(浏览器可以接收的类型)
Accept-Charset: ISO-8859-1(浏览器可以接收的编码类型)
Accept-Encoding: gzip,compress(浏览器可以接收压缩编码类型)
Accept-Language: en-us,zh-cn(浏览器可以接收的语言和国家类型)
Host: www.test.com:80(浏览器请求的主机和端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某个页面缓存时间)
Referer: http://www.test.com/index.jsp(请求来自于哪个页面)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)(浏览器相关信息)
Cookie:(浏览器暂存服务器发送的信息)
Connection: close(1.0)/Keep-Alive(1.1)(HTTP请求的版本的特点)
Date: Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)
与HTTP请求对应的是HTTP响应,HTTP响应也由三部分内容组成:
响应行、响应头(消息报头)和响应正文(消息主题)
下面是一个经典的HTTP响应:
HTTP/1.1 200 OK //响应行
Date:Thu,28 Feb 2015 07:36:47 GMT //响应头
Server:BWS/1.0 Content-Length:4199
Content-Type:text/html;charset=utf-8 Content-Encoding:gzip SetCookie:H_PS_PSSID=2022_1438_1944_1788;path=/;domain=.test.com
Connection:Keep-Alive //空白行代表响应头结束
<head><title>Index.html</title></head> //响应正文
1.4http 状态码
HTTP协议中的状态码由三位 数字组成,第一位数字定位了响应的类型 状态码位于HTTP响应中的第一行中,如: HTTP/1.1 200 OK
常见的状态码:
1.5 http 请求方法
http 1.0 定义了3 个请求方法 :get、head和post方法。
http 1.1 新增了5个请求方法:put、delete、conne、options和trace方法。
- get 请求指定的页面信息,并且返回实体主体
- head 与get 请求类似,但是只返回响应行和头,不返回响应正文
- post 向指定资源提交数据以处理请求(例如,提交表单或者上传文件),数据被包含在请求体中,post请求可能会导致新的资源的建立和/或已有资源的修改
- put 从客户端向服务器传送数据并进行存储和替换
- delete 请求删除服务器指定的页面
- connect http1.1 协议中预留给能够将连接改为管道方式的代理服务器
- options 允许客户端查看服务器的性能
- trace 回显服务器收到的请求,主要用于测试或诊断。
head 方法经常被用来测试超文本链接的有效性、可访问性和最近的改变。攻击者编写扫描工具时,就常用此方法,因为只测试资源是否存在,而不用返回消息主题,所以速度一定是最快的。一个经典的HTTP HEAD请求如下:
HEAD /index.php HTTP/1.1
HOST:www.test.com
GET方法用于获取请求页面的指定消息(以实体的格式)。如果请求资源为动态脚本(除HTML),那么返回文本是Web容器解析后的HTML源代码,而不是源文件。例如请求index.jsp,那么返回的不是index.jsp的源文件,而是经过解析后的HTML代码。
如下HTTP请求: GET /index.php?id=1 HTTP/1.1 HOST:www.test.com
PUT方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据,作为指定资源的最新修改版。如果请求指定的资源不存在,将会创建这个资源,且数据位请求正文,请求如下: PUT /input.txt HOST:www.test.com Content-Length:6 abcd
这段HTTP PUT请求将会在主机根目录下创建input.txt,内容为abcd。通常情况下,服务器都会关闭PUT方法,因为它会为服务器建立文件,属于危险的方法之一。
OPTIONS方法是用于请求获得由URL标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。HTTP OPTIONS请求如下: OPTIONS /HTTP1.1 HOST:www.test.com HTTP/1.1 200 OK Allow:OPTIONS,TRACE,GET,HEAD,POST Server:Microsoft-IIS/7
DELETE方法用于请求源服务器删除请求的指定资源。服务器一般都会关闭此方法,因为客户端可以进行删除文件操作,属于危险方法之一。
TRACE方法被用于激发一个远程的应用层的请求消息回路,也就是说,回显服务器收到的请求。TRACE方法允许客户端去了解数据被请求链的另一端接收的情况,并且利用那些数据信息去测试或诊断,但此方法非常少见。
在实际使用中最常用的是post和get方法。
post和get 方法的区别
POST方法也与GET方法相似,但最大的区别在于,GET方法没有请求内容,而POST是有请求内容的。POST请求最多用于向服务器发送大量的数据。GET虽然也能发送数据,但是有大小(长度)的限制,POST没有长度限制,并且GET请求会将发送的数据显示在浏览器端,而POST则不会,所以安全性相对来说高一点。 例如,上传文件、提交留言等,只要是向服务器传输大量的数据,通常都会使用POST请求(登录一般也是post请求)。