HTTP协议解析(个人申明,此为个人学习的笔记,可能摘录自他人的文章,而非原创)

 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请求)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值