注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

那些星星点点的微芒,终会成为燃烧生命的熊熊之光

 
 
 
 
 

日志

 
 

HTTP各种头详解  

2012-12-18 17:33:11|  分类: 学习在路上 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近在看Web技术宝典(第二版的哦,据说第二版比第一版增加了30%的内容。看了看,确实如此。推荐下~),今天把HTTP协议基础记录下。在这里有份超详细超详细的RFC文档,有兴趣的童鞋可观摩下:点击这里下载(如果有童鞋觉得那份超详细的文档不够深入的话,推荐<HTTP权威指南>一书)。

本文主要内容有HTTP请求、HTTP响应,包括HTTP请求和响应消息头以及几个常见的字符编码(状态码这里就不写出来了,我觉得比较难区分的还是他们:301、302...)。

 

HTTP请求

例:

GET /app/pop/bws/popup?from_forum=xxx&position=0&_=xxx HTTP/1.1 
Host: tieba.baidu.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0 
Accept: */* Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 Connection: keep-alive 
X-Requested-With: XMLHttpRequest 
Referer: http://tieba.baidu.com/p/2009178006 
Cookie: BAIDUID=*******马赛克****:FG=1;


每个HTTP请求的第一行都由3个以空格间隔的项目组成。

1.      一个说明HTTP方法的动词。最常用的方法是GET,它的主要作用是从Web服务获取一个资料,GET请求没有消息主题,因此在消息头后的空白行中没有其他数据。

2.    所请求的URL。该URL通常由所请求的资料名称,以及一个包含客户端向该资源提交的参数的可选查询字符串组成。在该URL中,查询字符串以?字符标识。

3.    使用HTTP的版本。因特网上常用的HTTP版本有1.0和1.1,多数浏览器默认使用1.1.这两个版本的规范之见存在一些差异,然而,当攻击Web应用程序时,渗透测试员可能遇到的唯一差别是1.1版本必须使用Host请求头。


请求消息头

1.    Accept 用于高速服务器,客户端愿意接受哪些内容。例:图像类型、办公文档格式等。

2.    Accept – Encoding 告诉服务器,客户端愿意接受哪些内容编码。

3.    DNT为"Do not track"(禁止追踪)为了保护个人隐私万维网联盟W3C提出的最新解决网络隐私问题的草案之一。可在浏览器设置中开启该项。

4.    Authorization 用于为一种内置HTTP身份验证向服务器提交证书。

5.    Cookie 用于向服务器提交它以前发布的cookie。

6.    HOST 用于指定出现在所请求的完整URL中的主机名称。

7.    If – Modified – Since 用于说明浏览器最后一次收到所请求的资源的时间(如果自那以后资源没有发生变化,服务器姐姐会发出一个带状码304的响应,指出客户端使用资源的缓存副本)。

8.    If - None – Match 用于指定一个实体标签(实体标签是一个说明消息主体内容的标识符)。放最后一次收到请求的资源时,浏览器提交服务器发布的实体标签,服务器可以使用实体标签来确定浏览器是否使用资源的缓存副本。

9.    Origin 用于跨域Ajax请求中,用于指示提出请求的域。

10.  X-Requested-With:XMLHttpRequest  为Null时,为传统同步请求;为 XMLHttpRequest时,为Ajax(异步)请求。

11.  Referer 用于提出当前请求的上一个URL。

12.  User – Agent 提供与浏览器或生成请求的其他客户端软件有关的信息。

 

关于请求实例的其他要点:

1.    Referer 消息透用于表示发出请求的原始URL(例如,因为用于单击页面上的一个链接)。在最原始的规范中,这个消息头存在拼写错误,并且这个错误一直被保留了下来。

2.    User – Agent 消息头提供与浏览器或其他生成请求的客户端软件有关的信息(由于历史原因,大多数浏览器中都包含Mozilla前缀,这是因为最占支配地位的Netscape浏览器使用了User – Agent字符串,而其他浏览器也希望让Web站点相信他们与这种标准兼容。与计算领域历史上的许多怪异现象一样,这种现象变得很普遍,及时当前版本的Internet Explorer也保留了这一做法)。

3.     Host 消息头用于指定出现在呗访问的完整URL中的主机名称。如果几个Web站点以相同的一台服务器为主机,就需要使用Host消息头,因为请求第一行中的URL内通常并不包含主机名。

4.    Cookie 消息头用于提交服务器向客户端发布的其他参数。



HTTP响应

例:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
X-Powered-By: PHP/5.2.10 
Content-Type: text/html;charset=UTF-8 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Date: Tue, 18 Dec 2012 04:00:38 
GMT Server: lighttpd 
Content-Length: 3669


每个HTTP响应的第一行跟HTTP请求一样由3个以空格间隔的项目组成。

1.    表示所使用HTTP的版本。

2.    表示请求结果的数字状态码。

3.    一段文本形式的“原因短语”,进一步说明响应状态,这个短语中可包含任何值,当前浏览器不将其用于任何目的。

 

响应消息头

1.    Access – Control – Allow – Origin 用于指示可否通过跨域请求获取访问资源。

2.    Cache – Control 用于向浏览器传送缓存指令(例:no – cache)。

3.    Etag 用于指定一个实体标签,客户端可在将来的请求中提交这个标签符,获得和If None – Match消息头中相同的资源,通知服务器浏览器当前缓存中保存的是哪个版本的资源。

4.    Expires 用于想浏览器说明消息主体内容的有效时间。在这个时间之前,浏览器可以使用这个资源的缓存副本。

5.    Location 用于在重定向响应(状态码以3开头的响应)中说明重定向的目标。

6.    Pragma 向浏览器传送缓存指令(例:no – cache)。

7.    Server 所使用的Web服务器软件的相关信息。

8.    Set – Cookie 向浏览器发布cookie,浏览器会在随后的请求中将其返回给服务器。

9.    WWW– Authenticate 用在带401状态码的响应中,提供与服务器所支持的身份验证类型有关的信息。

10.  X – Frame – Options 指示浏览器框架是否及如何加载当前响应。


        Vary头标

1.    Vary:Accept-Encoding 如果客户端的Accept-Encoding变化时,使用相应的缓存。

2.    Vary:Host,Accept-Encoding 如果客户端的Host或Accept-Encoding变化时,使用相应的缓存。

 

响应实例中的其他一些要点:

1.    Server 消息头中包含一个旗标,致命所使用的Web服务器软件。有时还包括其他信息,如所安装的模块和服务器操作系统。有时其中包含的信息可能不准确。

2.    Set – Cookie 消息头想浏览器发送另一个cookie,它将在随后向服务器发送的请求中由cookie消息头返回。

3.    Pragma 消息头只是浏览器不要将响应保存在缓存中。

4.    Expires 消息头指出响应内容已经过期,因为不应保存在缓存中。当返回动态内容时常常会发送这些指令,以确保浏览器随时获得最新内容,几乎所有的HTTP响应在消息头后的空白行下面都包含消息主体。

5.    Content – Type 消息头表示这个消息主体中包含一个HTML文档。

6.    Content – Length 消息头规定消息主体的字节长度。

 

HTTP方法

除了GET和POST方法以外,HTTP协议还处置许多其他因特殊目的而建立的方法

1.    HEAD 这个方法与GET方法类似。不同之处在于服务器不会再其下个月中返回消息主体。服务器返回的消息头应与对应GET请求返回的消息相同。因此,这种方法可用于检查某一资料在向其提交Get请求是否存在。

2.    TRACE 这种方法主要用于诊断。这种方法用于检测服客户端与服务器之见是否存在任何操纵请求的代理服务器。

3.    OPTIONS 这种方法要求服务器报告对某一特殊资料有效的HTTP方法。服务器通常返回一个包含Allow消息头的响应,并在其中列出所有有效的方法。

4.    PUT 这个方法试图使用包含在请求主体中的内容向服务器上传指定的资源。如果激活这个方法,渗透测试员就可以利用它来攻击应用程序。例:通过上传任意一段脚本并在服务器上执行该脚本来攻击应用程序。

5.    DELETE 删除指定的资源。

6.    COPY 将指定的资源复制到Destination消息头指定的位置。

7.    MOVE 将指定的资源移动到Destination消息头指定的位置。

8.    SEARCH 在目录路径中搜索资源。

9.    PROPFIND 获取与指定资源有关的信息,如作者、大小与内容类型。

例:

OPTIONS /public/ HTTP 1.0

Host: abc.com

 

HTTP/1.1  200 OK

connection: close

Date: Sun,  10  Apr  2011  15:56:27  GMT

Server: Microsoft-IIS/7.0

MicrosoftofficeWebServer: 5.0_Pub

X-Powered-By: ASP.NET

MS-Author-Via: MS-FP/4.0,DAV

Content-Length: 0

Accept-Ranges: none

DASL: <DAVsql>

DAV: 1,2

Public: OPTIONS,TRACE,GET,HEAD,DELETE,PUT,POST,COPY,MOVE,MKCOL,PROPFIN

D,PROPPATCH,LOCK,UNLOCK,SEARCH

Allow: OPTIONS,TRACE,GET,HEAD,COPY,PROPFIND,SEARCH,LOCK,UNLOCK

Cache-Control: private


这个响应之处,上面列出的几个强大的方法可以再目录中使用,实际上,使用这些方法需要通过身份验证,或取决于其他限制。

其中,PUT方法特别危险。如果能够上传Web跟目录中的任意文件,就可以再服务器上创建将有服务器模块执行的后门脚本,从而完全控制应用程序,甚至是Web服务器本身。如果PUT方法存在且被激活,可通过以下方式证实:

PUT /public/test.txt  HTTP/1.1

Host: abc.com

Content-Length: 4

 

test

 

HTTP/1.1  201  Created

...


Cookie

1.    Expires 用于设定cookie的有效时间,这样会使浏览器将cookie保存在永久性的存储器中,在随后的浏览器会话中重复利用,直到到期时间为止。如果没有设定这个属性,那么cookie金庸在当前浏览器会话中。

2.    domain 指定cookie的有效域。这个域必须和收到cookie的域相同。或者是它的父域。

3.    path 用于指定cookie的有效URL路径。

4.    secure 如果设置该属性,仅在HTTPS请求中提交cookie。

5.    HttpOnly 设置这个属性,将无法通过客户端JavaSctipt直接访问cookie。

 

PS:

常见的URL编码

1.    %3d代表=;

2.    %25代表%;

3.    %20代表空格;

4.    %0a代表新行;

5.    %00代表空字节。

 

Unicode编码

1.    %u2215代表/;

2.    %u00e9代表é;

3.    %e2%89%a0代表(!=);

 

HTML编码

1.    &quot代表”;

2.    &apos代表’;

3.    &amp代表&;

4.    &lt代表<;

5.    &gt代表>;

6.    &#34;

 

  评论这张
 
阅读(145)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017