文档库 最新最全的文档下载
当前位置:文档库 › 教你利用HTTP host头攻击的技术

教你利用HTTP host头攻击的技术

教你利用HTTP host头攻击的技术
教你利用HTTP host头攻击的技术

利用HTTP host 头攻击的技术

2014-04-10 我来说两句 作者:龙臣

收藏 我要投稿

from:https://www.wendangku.net/doc/0b15539197.html,/2013/05/practical-http-host-header-at

tacks.html

0x00 背景

一般通用web 程序是如果想知道网站域名不是一件简单的事情,如果用一个固

定的URI 来作为域名会有各种麻烦。开发人员一般是依赖HTTP Host header (比如

在php 里是_SERVER["HTTP_HOST"] ),而这个header 很多情况下是靠不住的。而

很多应用是直接把这个值不做html 编码便输出到了页面中,比如:

?

1 (Django, Gallery, others)

这样处理问题一般会很容易遭遇到两种常见的攻击:缓存污染和密码重置。缓

存污染是指攻击者通过控制一个缓存系统来将一个恶意站点的页面返回给用户。密

码重置这种攻击主要是因为发送给用户的内容是可以污染的,也就是说可以间接的

劫持邮件发送内容。

0x01 密码重置污染攻击

拿 Gallery 这个站来做例子。当我们进行密码重置的时候,网站会给我们发

送一个随机的key :

?

1 2 3 $user -> hash = random::hash() ;

$message -> confirm_url =

url::abs_site("password/do_reset?key=$user->hash") ;

当用户点击重置密码的链接时,肯定可以说明点的是自己的账户。

这个地方的漏洞是: url::abs_site 这一部分使用的Host header是来自用户重置密码的请求,那么攻击者可以通过一个受他控制的链接来污染密码重置的邮件。

?

1 2 3 4 > POST /password/reset HTTP/1.1 > Host: https://www.wendangku.net/doc/0b15539197.html,

> ...

> csrf=1e8d5c9bceb16667b1b330cc5fd48663&name=admin

这个漏洞在Django,Piwik 和Joomla中都存在,还有一些其他的应用,框架和类库。

当然这种攻击方式一定要能骗取用户点击访问这个受污染的链接,如果用户警觉了没有点击,那么攻击就会失败。当然你自己也可以配合一些社会工程学的方法来保证攻击的成功率。

还有一些情况,Host可能会被url编码后直接放到email的header里面造成header注入。通过这个,攻击者可以很容易的就能劫持用户的账户。

0x02 缓存污染

通过Host header来污染缓存的攻击方法最初是Carlos Beuno 在2008年提出来的。但是在现在的网络架构中,这种攻击还是比较困难的,因为现在的缓存设备都能够识别Host。比如对于下面的这两种情况他们绝对不会弄混淆:

2 > Host: https://www.wendangku.net/doc/0b15539197.html, > Host: https://www.wendangku.net/doc/0b15539197.html,

因此为了能使缓存能将污染后的response返回给用户,我们还必须让缓存服

务器看到的host header 和应用看到的host header 不一样。比如说对于Varnish (一个很有名的缓存服务软件),可以使用一个复制的Host header。Varnish是通过最先到达的请求的host header来辨别host的,而Apache则是看所有请求的host,Nginx则只是看最后一个请求的host。这就意味着你可以通过下面这个请求来欺骗Varnish达到污染的目的:

?

1 2 3 > GET / HTTP/1.1

> Host: https://www.wendangku.net/doc/0b15539197.html,

> Host: https://www.wendangku.net/doc/0b15539197.html,

应用本身的缓存也可能受到污染。比如Joomla就将取得的host值不经html

编码便写进任意页面,而它的缓存则对这些没有任何处理。比如可以通过下面的请

求来写入一个存储型的xss:

?

1 curl -H "Host: cow\"onerror='alert(1)'rel='stylesheet'" https://www.wendangku.net/doc/0b15539197.html,/

实际上的请求是这样的:

?

1 2 > GET / HTTP/1.1

> Host: cow"onerror='alert(1)'rel='stylesheet' 响应其实已经受到污染:

?

1

这时只需要浏览首页看是否有弹窗就知道缓存是否已经被污染了。

0x03 安全的配置

在这里我假设你可以通过任何类型的应用来发起一个http请求,而host

header也是可以任意编辑的。虽然在一个http请求里,host header是用来告诉

webserver该请求应该转发给哪个站点,但是事实上,这个header的作用或者说风

险并不止如此。

比如如果Apache接收到一个带有非法host header的请求,它会将此请求转发给在 httpd.conf 里定义的第一个虚拟主机。因此,Apache很有可能将带有任意host header的请求转发给应用。而Django已经意识到了这个缺陷,所以它建议用户另外建立一个默认的虚拟主机,用来接受这些带有非法host header的请求,以保证Django自己的应用不接受到这些请求。

不过可以通过X-Forwarded-Host 这个header就可以绕过。Django非常清楚缓存污染的风险,并且在2011年的9月份就通过默认禁用X-Forwarded-Host这个header来修复此问题。Mozilla却在https://www.wendangku.net/doc/0b15539197.html,站点忽视了此问题,我在2012年的4月发现了此问题:

?

1 2 3 > POST /en-US/firefox/user/pwreset HTTP/1.1

> Host: https://www.wendangku.net/doc/0b15539197.html,

> X-Forwarded-Host: https://www.wendangku.net/doc/0b15539197.html,

即使Django给出了补丁,但是依然存在风险。Webserver允许在host header

里面指定端口,但是它并不能通过端口来识别请求是对应的哪个虚拟主机。可以通过下面的方法来绕过:

?

1 2 > POST /en-US/firefox/user/pwreset HTTP/1.1 > Host: https://www.wendangku.net/doc/0b15539197.html,:@https://www.wendangku.net/doc/0b15539197.html,

这直接会导致生成一个密码重置链接:

https://https://www.wendangku.net/doc/0b15539197.html,:@https://www.wendangku.net/doc/0b15539197.html,/users/pwreset/3f6hp/3ab-9a e3db614fc0d0d036d4

当用户点击这个链接的时候就会发现,其实这个key已经被发送到https://www.wendangku.net/doc/0b15539197.html,这个站点了。在我报告了此问题后,Django又推出了一个补丁:https://https://www.wendangku.net/doc/0b15539197.html,/weblog/2012/oct/17/security/ 不幸的是,这个补丁只是简单的通过黑名单方式来简单的过滤掉了@和其他一些字符。而由于密码重置链接是以纯文本而不是html的方式发送的,所以此补丁只需要添加一个空格就可以绕过:

?

1 2 > POST /en-US/firefox/users/pwreset HTTP/1.1

> Host: https://www.wendangku.net/doc/0b15539197.html,: https://www.wendangku.net/doc/0b15539197.html,

Django的后续补丁规定了host header的端口部分只能是含有数字,以规避此问题。但是在RFC2616文档中规定了,如果请求URI是一个绝对的URI,那么host 是Request-URI的一部分。在请求中的任何Host header值必须被忽略。

也就是说,在Apache和Nginx(只要是遵守此文档的webserver)中,可以通过绝对uri向任意应用发送一个包含有任意host header的请求:

?

1 2 > POST https://https://www.wendangku.net/doc/0b15539197.html,/en-US/firefox/users/pwreset HTTP/1.1 > Host: https://www.wendangku.net/doc/0b15539197.html,

这个请求在SERVER_NAME里面的值是https://www.wendangku.net/doc/0b15539197.html,,而不是host里的

https://www.wendangku.net/doc/0b15539197.html,。应用可以通过使用SERVER_NAME而不是host header来规避此风险,但是如果没有配合特殊配置的webserver,这个风险依然存在。可以在这里

https://www.wendangku.net/doc/0b15539197.html,/questions/2297403/http-host-vs-server-name/2297 421#2297421看看 HTTP_HOST 和SERVER_NAME 的区别。Django官方在2013年的二月通过强制使用一个host白名单来修复了此问题。尽管如此,在很多其他的wen 应用上,这种攻击方式依然屡试不爽。

0x04 服务器方面需要做的

由于http请求的特点,host header的值其实是不可信的。唯一可信的只有SERVER_NAME,这个在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。建议两种方法同时使用。

Varnish很快会发布一个补丁。在官方补丁出来前,可以通过在配置文件里加入:

?

1 2 3 4 5 import std;

sub vcl_recv {

std.collect(req.http.host); }

来防护。

0x05 应用本身需要做的

解决这个问题其实是很困难的,因为没有完全自动化的方法来帮助站长识别哪些host 的值是值得信任的。虽然做起来有点麻烦,但是最安全的做法是:效仿Django的方法,在网站安装和初始化的时候,要求管理员提供一个可信任的域名白名单。如果这个实现起来比较困难,那至少也要保证使用SERVER_NAME而不是host header,并且鼓励用户使用安全配置做的比较好的站点

http协议正文

竭诚为您提供优质文档/双击可除 http协议正文 篇一:http协议 http协议详解 引言 http是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年 提出,经过几年的使用与发展,得到不断地完善和扩展。目前在www中使用的是http/1.0的第六版,http/1.1的规范 化工作正在进行之中,而且http-ng(nextgenerationofhttp)的建议已经提出。http协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有get、head、post。每种方 法规定了客户与服务器联系的类型不同。由于http协议简单,使得http服务器的程序规模小,因而通信速度很快。 3.灵活:http允许传输任意类型的数据对象。正在传输的类型由content-type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请

求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:http协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 一、http协议详解之uRl篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于tcp的连接方式,http1.1版本中给出一种持续连接的机制,绝大多数的web开发,都是构建在http协议之上的web应用。 httpuRl(uRl是一种特殊类型的uRi,包含了用于查找某个资源的足够的信息)的格式如下: http://host[":"port][abs_path] http表示要通过http协议来定位网络资源;host表示合法的internet主机域名或者ip地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的uRi;如果uRl中没有给出abs_path,那么当它作为请求uRi时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。eg: 1、输入:

http协议请求响应报文格式及状态码详解

HTTP协议报文格式 HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB 服务器端访问页面的过程和HTTP协议报文的格式。 基于HTTP协议的客户机访问包括4个过程,分别是建立TCP套接字连接、发送HTTP请求报文、接收HTTP应答报文和关闭TCP套接字连接: 1. 创建TCP套接字连接 客户端与WEB服务器创建TCP套接字连接,其中WEB端服务器的地址可以通过域名解析确定,WEB端的套接字侦听端口一般是80。 2. 发送HTTP请求报文 客户端向WEB服务端发送请求报文,HTTP协议的请求报文格式为: 请求消息= 请求行(实体头信息)CRLF[实体内容] 请求行= 方法URL HTTP版本号CRLF 方法= GET|HEAD|POST|扩展方法 URL = 协议名称+宿主名+目录与文件名 其中"CRLF"表示回车换行。 "请求行"中的"方法"描述了对指定资源执行的动作,常用的方法"GET"、"HEAD"和"POST"等3种,它们的含义如表15-8所示: 请求报文 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。 (1)请求行 请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。 HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。 GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾 与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据。 表15-8 HTTP请求方法

Http协议详解

引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。H TTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3.灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 一、HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种

持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:h ttp://host[":"port][abs_path]http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path 指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。e g:1、输入:https://www.wendangku.net/doc/0b15539197.html,浏览器自动转换成:https://www.wendangku.net/doc/0b15539197.html,/2、http:192.168.0.116:8080/index.jsp 二、HTTP协议详解之请求篇 http请求由三部分组成,分别是:请求行、消息报头、请求正文1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI 和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。 请求方法(所有方法全为大写)有多种,各个方法的解释如下:GET 请求获取Request-URI所标识的资源P OST 在

HTTP返回值状态码

HTTP 状态码知道哪些? 1. 临时响应 100——客户必须继续发出请求 101——客户要求服务器根据请求转换HTTP 协议版本 2. 成功 200——服务器成功返回网页 201——提示知道新文件的URL 202——接受和处理、但处理未完成。 203——返回信息不确定或不完整 204——请求收到,但返回信息为空。 205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件。206——服务器已经完成了部分用户的GET 请求 3. 重定向 300——请求的资源可在多处得到 301——删除请求数据 302——在其他地址发现了请求数据 303——建议客户访问其他URL 或访问方式 304——客户端已经执行了GET,但文件未变化。 305——请求的资源必须从服务器指定的地址得到 306——前一版本HTTP 中使用的代码,现行版本中不再使用。307——申明请求的资源临时性删除 4. 客户端错误 400——错误请求,如语法错误 401——请求授权失败 402——保留有效ChargeTo 头响应 403——请求不允许 404——请求的网页不存在 405——用户在Request-Line 字段定义的方法不允许 406——根据用户发送的Accept 拖,请求资源不可访问。407——类似401,用户必须首先在代理服务器上得到授权。 408——客户端没有在用户指定的饿时间内完成请求 409——对当前资源状态,请求不能完成。 410——服务器上不再有此资源且无进一步的参考地址 411——服务器拒绝用户定义的Content-Length 属性请求 412——一个或多个请求头字段在当前请求中错误 413——请求的资源大于服务器允许的大小 414——请求的资源URL 长于服务器允许的长度 415——请求资源不支持请求项目格式 416——请求中包含Range 请求头字段,在当前请求资源范围内没有range 指示值,请求也不包含If-Range 请求头字段。 417——服务器不满足请求Expect 头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求。 5. 服务器错误 500——服务器产生内部错误 501——服务器不支持请求的函数 502——服务器暂时不可用,有时是为了防止发生系统过载。 503——服务器超时过载或暂停维修 504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长。505——服务器不支持或拒绝支请求头中指定的HTTP 版本

实验六利用Wireshark分析协议HTTP

实验六利用W i r e s h a r k分析协议H T T P 一、实验目的 分析HTTP协议 二、实验环境 与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。 三、实验步骤 1、利用Wireshark俘获HTTP分组 (1)在进行跟踪之前,我们首先清空Web 浏览器的高速缓存来确保Web网页是从网络中获取的,而不是从高速缓冲中取得的。之后,还要在客户端清空DNS高速缓存,来确保Web服务器域名到IP地址的映射是从网络中请求。在WindowsXP机器上,可在命令提示行输入ipconfig/flushdns(清除DNS解析程序缓存)完成操作。 (2)启动Wireshark 分组俘获器。 (3)在Web 浏览器中输入:https://www.wendangku.net/doc/0b15539197.html, (4)停止分组俘获。 图1.1 利用Wireshark俘获的HTTP分组 在URL https://www.wendangku.net/doc/0b15539197.html,中,https://www.wendangku.net/doc/0b15539197.html,是一个具体的web 服务器的域名。最前面有两个DNS分组。第一个分组是将域名https://www.wendangku.net/doc/0b15539197.html,

转换成为对应的IP 地址的请求,第二个分组包含了转换的结果。这个转换是必要的,因为网络层协议——IP协议,是通过点分十进制来表示因特网主机的,而不是通过https://www.wendangku.net/doc/0b15539197.html,这样的域名。当输入URL http://https://www.wendangku.net/doc/0b15539197.html, 时,将要求Web服务器从主机https://www.wendangku.net/doc/0b15539197.html,上请求数据,但首先Web浏览器必须确定这个主机的IP地址。 随着转换的完成,Web浏览器与Web服务器建立一个TCP连接。最后,Web 浏览器使用已建立好的TCP连接来发送请求“GET/HTTP/1.1”。这个分组描述了要求的行为(“GET”)及文件(只写“/”是因为我们没有指定额外的文件名),还有所用到的协议的版本(“HTTP/1.1”)。 2、HTTP GET/response交互 (1)在协议框中,选择“GET/HTTP/1.1” 所在的分组会看到这个基本请求行后跟随着一系列额外的请求首部。在首部后的“\r\n”表示一个回车和换行,以此将该首部与下一个首部隔开。 “Host”首部在HTTP1.1版本中是必须的,它描述了URL中机器的域名,本例中是https://www.wendangku.net/doc/0b15539197.html,。这就允许了一个Web服务器在同一时间支持许多不同的域名。有了这个数不,Web服务器就可以区别客户试图连接哪一个Web服务器,并对每个客户响应不同的内容,这就是HTTP1.0到1.1版本的主要变化。 User-Agent首部描述了提出请求的Web浏览器及客户机器。 接下来是一系列的Accpet首部,包括Accept(接受)、Accept-Language (接受语言)、Accept-Encoding(接受编码)、Accept-Charset(接受字符集)。它们告诉Web服务器客户Web浏览器准备处理的数据类型。Web服务器可以将数据转变为不同的语言和格式。这些首部表明了客户的能力和偏好。 Keep-Alive及Connection首部描述了有关TCP连接的信息,通过此连接发送HTTP请求和响应。它表明在发送请求之后连接是否保持活动状态及保持多久。大多数HTTP1.1连接是持久的(persistent),意思是在每次请求后不关闭TCP 连接,而是保持该连接以接受从同一台服务器发来的多个请求。 (2)我们已经察看了由Web浏览器发送的请求,现在我们来观察Web服务器的回答。响应首先发送“HTTP/1.1 200 ok”,指明它开始使用HTTP1.1版本来发送网页。同样,在响应分组中,它后面也跟随着一些首部。最后,被请求的实际数据被发送。

http请求响应过程

http请求与响应过程 (1)请求方法URI协议/版本 请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1 以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。 根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1目前支持7种请求方法:GET、POST、HEAD、OPTIONS、 PUT、DELETE和TARCE。 GET 请求获取由Request-URI所标识的资源。 POST 在Request-URI所标识的资源后附加新的数据。 HEAD 请求获取由Request-URI所标识的资源的响应消息报头。 OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。 PUT 请求服务器存储一个资源,并用Request-URI作为其标识。 DELETE 请求服务器删除由Request-URI所标识的资源。 TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。

在Internet应用中,最常用的方法是GET和POST。 URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最 后,协议版本声明了通信过程中使用HTTP的版本。 (2)服务器响应状态码 状态代码: 状态代码由3位数字组成,表示请求是否被理解或被满足。 状态描述: 状态描述给出了关于状态代码的简短的文字描述。 状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。 第一个数字有五种可能的取值: - 1xx: 指示信息—表示请求已接收,继续处理。 - 2xx: 成功—表示请求已经被成功接收、理解、接受。 - 3xx: 重定向—要完成请求必须进行更进一步的操作。 - 4xx: 客户端错误—请求有语法错误或请求无法实现。 - 5xx: 服务器端错误—服务器未能实现合法的请求。

HTTP协议分析

攀枝花学院计算机网络工程实训报告 HTTP协议分析 学生姓名:杨玉刚 学生学号: 200710801075 院(系):计算机学院 年级专业: 07计本2版 指导教师:范胜波 二〇一〇年六月

攀枝花学院本科学生课程设计任务书

攀枝花学院计算机网络工程实训报告 摘要 HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。 通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符 关键词HTTP协议,客户端,服务器, HTTP的头域

攀枝花学院计算机网络实训报告 目录 摘要 (Ⅰ) 1 前言 (1) 1.1 http协议简述 (1) 2 需求分析 (2) 2.1 http协议通信过程 (2) 2.1.1 URL自动解析 (2) 2.1.2 获取IP,建立TCP连接 (2) 2.1.3客户端浏览器向服务器发出HTTP请求 (2) 2.1.4 Web服务器应答,并向浏览器发送数据 (2) 2.1.5 Web服务器关闭TCP连接 (3) 2.1 HTTP的头域 (3) 2.1.1通用头域 (3) 2.1.2请求消息 (4) 2.1.3响应消息 (5) 2.1.4实体信息 (6) 3 系统设计 (7) 3.1 HTTP Analyzer工具介绍 (8) 3.2分析访问浏览器和服务器通信的过程 (8) 4 系统分析 (12) 4.1 HTTP 请求消息 (12) 4.1 HTTP 响应消息 (13) 结论 (15) 参考文献 (16) 附录 (17)

HTTP协议解析

文章来源:网络转载点击数:1148 更新时间:2009-9-14 10:35:27 字体:[大中小] 收藏到: HTTP协议详解 掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在学习JSP开发中的某些知识就可以易如反掌了。 一,HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path] http 表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port 指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。eg: 1、输入:https://www.wendangku.net/doc/0b15539197.html, 浏览器自动转换成:https://www.wendangku.net/doc/0b15539197.html,/ 2、http:192.168.0.116:8080/index.jsp 二、HTTP协议详解之请求篇 http请求由三部分组成,分别是:请求行、消息报头、请求正文 1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP 协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。请求方法(所有方法全为大写)有多种,各个方法的解释如下: GET 请求获取Request-URI所标识的资源 POST 在Request-URI所标识的资源后附加新的数据 HEAD 请求获取由Request-URI所标识的资源的响应消息报头 PUT 请求服务器存储一个资源,并用Request-URI作为其标识 DELETE 请求服务器删除Request-URI所标识的资源 TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断 CONNECT 保留将来使用 OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求 应用举例: GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF) POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。 eg:POST /reg.jsp HTTP/ (CRLF) Accept:image/gif,image/x-xbit,... (CRLF) ...

HttpWatch HTTP协议分析指南(详解)

[原创]HttpWatch工具简介及使用技巧 一概述: HttpWatch强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出HttpWatch 是一款能够收集并显示页页深层信息的软件。它不用代理服务器或一些复杂的网络监控工具,就能够在显示网页同时显示网页请求和回应的日志信息。甚至可以显示浏览器缓存和IE之间的交换信息。集成在Internet Explorer工具栏。 二安装HttpWatch 略过^_^ 三基本功能介绍 启动Httpwatch 从IE的“查看”—“浏览器栏”—“HttpWatch”启动HttpWatch。如下图所示:

以下是HttpWatch程序界面 以下用登录我的邮箱https://www.wendangku.net/doc/0b15539197.html,例子来展示Httpwatch: 点击“Record”后,在IE打开需要录制的网址,https://www.wendangku.net/doc/0b15539197.html,,输入用户名,密码后完成登录操作

1.3.1 Overview(概要)表示选定某个信息显示其概要信息

如上图红框所示: URL:https://www.wendangku.net/doc/0b15539197.html,/external/closea_d.js Result:200 请求的URL是https://www.wendangku.net/doc/0b15539197.html,/external/closea_d.js ,返回的Htpp状态代码结果200,表示成功; Resync URL Browser requested refresh if changed - https://www.wendangku.net/doc/0b15539197.html,/external/closea_d.js

HTTP协议分析

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、H EAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活: HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接: 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 一、HTTP协议(URL)

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下: http: //host[": "port][abs_path] 二、HTTP协议的请求 http请求由三部分组成,分别是: 请求行、消息报头、请求正文 1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下: Method Request-URI HTTP-Version CRLF 其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。 请求方法(所有方法全为大写)有多种,各个方法的解释如下: GET 请求获取Request-URI所标识的资源 POST 在Request-URI所标识的资源后附加新的数据 HEAD 请求获取由Request-URI所标识的资源的响应消息报头 PUT 请求服务器存储一个资源,并用Request-URI作为其标识

http状态码定义(1)

附录1 状态码定义 表1HTTP协议定义状态码

表2WAPGW扩展状态码

1001---正常 1002---终端错误1003---服务端错误

HTTP 400 - 请求无效 HTTP 401.1 - 未授权:登录失败 HTTP 401.2 - 未授权:服务器配置问题导致登录失败 HTTP 401.3 - ACL 禁止访问资源 HTTP 401.4 - 未授权:授权被筛选器拒绝 HTTP 401.5 - 未授权:ISAPI 或CGI 授权失败 HTTP 403 - 禁止访问 HTTP 403 - 对Internet 服务管理器的访问仅限于Localhost HTTP 403.1 禁止访问:禁止可执行访问 HTTP 403.2 - 禁止访问:禁止读访问 HTTP 403.3 - 禁止访问:禁止写访问 HTTP 403.4 - 禁止访问:要求SSL HTTP 403.5 - 禁止访问:要求SSL 128 HTTP 403.6 - 禁止访问:IP 地址被拒绝 HTTP 403.7 - 禁止访问:要求客户证书 HTTP 403.8 - 禁止访问:禁止站点访问 HTTP 403.9 - 禁止访问:连接的用户过多 HTTP 403.10 - 禁止访问:配置无效 HTTP 403.11 - 禁止访问:密码更改 HTTP 403.12 - 禁止访问:映射器拒绝访问 HTTP 403.13 - 禁止访问:客户证书已被吊销 HTTP 403.15 - 禁止访问:客户访问许可过多 HTTP 403.16 - 禁止访问:客户证书不可信或者无效 HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效HTTP 404.1 - 无法找到Web 站点 HTTP 404- 无法找到文件 HTTP 405 - 资源被禁止 HTTP 406 - 无法接受 HTTP 407 - 要求代理身份验证 HTTP 410 - 永远不可用 HTTP 412 - 先决条件失败 HTTP 414 - 请求- URI 太长 HTTP 500 - 内部服务器错误 HTTP 500.100 - 内部服务器错误- ASP 错误 HTTP 500-11 服务器关闭 HTTP 500-12 应用程序重新启动 HTTP 500-13 - 服务器太忙 HTTP 500-14 - 应用程序无效 HTTP 500-15 - 不允许请求global.asa Error 501 - 未实现 HTTP 502 - 网关错误

HTTP协议详解之响应

HTTP协议详解之响应 1.什么是HTTP响应 当服务器收到浏览器的请求后,会发送响应消息给浏览器。一个完整的响应消息主要包括响应首行、响应头信息、空行和响应正文。其中,每个部分都代表了不同的含义。下面我们会围绕HTTP响应消息的每个组成部分进行详细分析。 2.HTTP响应消息分析 下面我们通过HttpWatch抓包工具,抓取一段响应信息,然后对该信息进行分析。 (1)创建web应用Example05,将该应用发布到Tomcat服务器,启动Tomcat服务器。在浏览器地址栏输入http://localhost:8080/Example05/index.jsp。使用HttpWatch进行抓包,抓取的响应消息,如例1-1所示: 例1-1响应消息 HTTP/1.1200OK Server:Apache-Coyote/1.1 Content-Type:text/html;charset=UTF-8 Content-Length:624 Date:Mon,03Nov201406:37:28GMT My JSP'index.jsp'starting page This is my JSP page.

HTTP协议状态码的含义

Http返回状态码: 2开头表示成功返回; 3开头表示请求被重定向; 4开头表示由于客户端造成的错误; 5开头表示由于服务端造成的错误。 "100" : Continue "101" : witching Protocols "200" : OK "201" : Created "202" : Accepted "203" : Non-Authoritative Information "204" : No Content "205" : Reset Content "206" : Partial Content "300" : Multiple Choices "301" : Moved Permanently "302" : Moved temporarily status code "303" : See Other "304" : Not Modified "305" : Use Proxy "307" : Temporary Redirect "400" : Bad Request "401" : Unauthorized "402" : Payment Required "403" : Forbidden "404" : Not Found "405" : Method Not Allowed "406" : Not Acceptable "407" : Proxy Authentication Required "408" : Request Time-out "409" : Conflict "410" : Gone "411" : Length Required "412" : Precondition Failed "413" : Request Entity Too Large "414" : Request-URI Too Large "415" : Unsupported Media Type "416" : Requested range not satisfiable "417" : Expectation Failed "500" : Internal Server Error "501" : Not Implemented "502" : Bad Gateway "503" : Service Unavailable "504" : Gateway Time-out "505" : HTTP Version not supported 1**:请求收到,继续处理 2**:操作成功收到,分析、接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完成 5**:服务器执行一个完全有效请求失败 100——客户必须继续发出请求 101——客户要求服务器根据请求转换 HTTP协议版本 200——交易成功 201——提示知道新文件的URL 202——接受和处理、但处理未完成 203——返回信息不确定或不完整 204——请求收到,但返回信息为空 205——服务器完成了请求,用户代理必 须复位当前已经浏览过的文件 206——服务器已经完成了部分用户的 GET请求 300——请求的资源可在多处得到 301——删除请求数据 302——在其他地址发现了请求数据 303——建议客户访问其他URL或访问方 式 304——客户端已经执行了GET,但文件 未变化 305——请求的资源必须从服务器指定的 地址得到 306——前一版本HTTP中使用的代码, 现行版本中不再使用 307——申明请求的资源临时性删除 4xx: Client Error使用者端(浏览器)错误 400——错误请求,如语法错误 401——请求授权失败 401.1 登入失败 401.2 因服务器设定问题造成登入失败 401.3 由于来源的ACL 问题而未授权 401.4 筛选器授权失败 401.5 ISAPI/CGI 应用程序授权失败 402——保留有效ChargeTo头响应 403——请求不允许 403.1 禁止执行存取 403.2 禁止读取存取 403.3 禁止写入存取 403.4 需要SSL 403.5 需要SSL 128 位加密 403.6 IP 地址被拒绝 403.7 需要客户端凭证 403.8 拒绝存取站台 403.9 太多的使用者 403.10 无效的设定 403.11 密码变更 403.12 对应程序拒绝存取 403.13 客户端凭证已撤销 403.14 目录清单被拒绝 403.15 超过客户端存取授权数 403.16 客户端凭证不被信任或者无效 403.17 客户端凭证已经过期或者无效 404——没有发现文件、查询或URL 405——用户在Request-Line字段定义 的方法不允许 406——请求资源不可访问 407——类似401,用户必须首先在代理 服务器上得到授权 408——客户端没有在用户指定的时间内 完成请求 409——对当前资源状态,请求不能完成 410——服务器上不再有此资源且无进一 步的参考地址 411——服务器拒绝用户定义的 Content-Length属性请求 412一个或多个请求头字段在当前请求中 错误 413请求的资源大于服务器允许的大小 414——请求的资源URL长于服务器允许 的长度 415——请求资源不支持请求项目格式 416——请求中包含Range请求头字段, 在当前请求资源范围内没有range指示 值,请求也不包含If-Range请求头字段 417——服务器不满足请求Expect头字 段指定的期望值,如果是代理服务器,可 能是下一级服务器不能满足请求 5xx: Server Error 服务器端错误讯息 错误码错误讯息说明 500——服务器产生内部错误 500.12 应用程序正在重新启动 500.13 服务器太忙碌 500.15 不允许Global.asa 的要求 500-100.asp ASP 错误 501——服务器不支持请求的函数 502——服务器暂时不可用,有时是为了 防止发生系统过载 503——服务器过载或暂停维修 504 关口过载,服务器使用另一个关口 或服务来响应用户,等待时间设定值较长 505——服务器不支持或拒绝支请求头中 指定的HTTP版本

http协议分析报告实例

HTTP协议分析 1 实验目的 分析HTTP协议报文首部格式,理解HTTP协议工作过程 2 实验内容 截获HTTP报文,分析HTTP协议报文首部格式,学习HTTP协议工作过程。 3 实验原理 超文本传送协议HTTP(HyperText Transfer Protocol),是万维网客户程序与万维网服务器程序之间的交互所要严格遵守的协议。HTTP是一个应用层协议,它使用TCP连接进行可靠的传送。对于万维网站点的访问要使用的HTTP协议。 HTTP的URL的一般形式是: http://<主机>:<端口>/<路径> WWW采用 B/S 结构,客户使用浏览器在 URL栏中输入 HTTP 请求,即输入对方服务器的地址,向 web 服务器提出请求。如访问师院的机构设置页面 https://www.wendangku.net/doc/0b15539197.html,/jigou/gljg.htm,具体的工作过程如下: (1) 浏览器分析指向页面的URL. (2) 浏览器向DNS请求解析https://www.wendangku.net/doc/0b15539197.html,的IP地址。 (3) 域名系统DNS解析出师院服务器的IP地址 (4) 浏览器与服务器建立TCP连接 (5) 浏览器发出取文件命令:GET /jigou/gljg.htm. (6) 服务器https://www.wendangku.net/doc/0b15539197.html,给出响应,将文件 gljg.htm发送给浏览器。 (7) TCP连接释放。 (8) 浏览器显示“北航机构设置”的页面。 服务器提供的默认端口号为80. 4 实验步骤 步骤 1 在计算机上打开wireshark软件,进行报文截获。 步骤 2 从浏览器上访问https://www.wendangku.net/doc/0b15539197.html,页面,具体操作为打开网页,浏览,关掉网页。 步骤 3 停止wireshark的报文截获,结果命名为http_学号,保存在本机或上 传至服务器目录下。

HTTP协议的状态码

对于Web编程人员来说,熟悉了解HTTP协议的状态码是很有必要的,很多时侯可能根据HTTP协议的状态码很快就能定位到错误信息!今天整理了一下所有HTTP状态码。 HTTP状态码(HTTP Status Code)是用来表示网页服务器HTTP 响应状态的3位数字代码。它由RFC 2616规范定义的,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。 HTTP/1.1定义的状态码值和对应的原因短语(Reason-Phrase)的例子。 1XX表示:消息 这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。 “100″ : Continue客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分. “101″ : witching Protocols 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade消息头中定义的那些协议。: 只有在切换新的协议更有好处的时候才应该采取类似措施. “102″: Processing由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。 2XX表示:成功 这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

http请求头和响应状态码

用于HTTP请求中的常用请求头字段 Accept:用于告诉服务器,客户机支持的数据类型 Accept-Charset:用于告诉服务器,客户机采用的编码格式 Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式 Accept-Language:客户机的语言环境 Host:客户机通过这个头告诉服务器,想访问的主机名 If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间 Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)User-Agent:客户机通过这个头告诉服务器,客户机的软件环境 Cookie:客户机通过这个头可以向服务器带数据 Connection:处理完这次请求后是否断开连接还是继续保持连接 Date:当前时间值 HTTP响应 状态行:用于描述服务器对请求的处理结果。 状态码:100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。 200~299:表示成功接收请求并已完成整个处理过程。常用200 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存) 400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够) 500~599:服务器端出现错误,常用500 多个响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

1、HTTP协议分析

开放式课题 实验报告 实验名称:基于Wireshark软件的HTTP协议分析 学号: 姓名: 指导教师:宫婧 指导单位:理学院

目录 实验目的..........................................................错误!未定义书签。 1) 掌握Wireshark软件使用方法............. 错误!未定义书签。 2)理解HTTP协议工作原理..................................... 错误!未定义书签。 实验任务.................................... 错误!未定义书签。 1) 抓取数据包........................... 错误!未定义书签。 2)分析数据包........................... 错误!未定义书签。实验环境.............................. 错误!未定义书签。软件介绍 (2) 1) wireshark软件简介 (2) 2) wireshark软件的应用 (2) 3) wireshark软件的价值 (2) 4) wireshark软件的操作简介 (3) HTTP协议详解............................... 错误!未定义书签。 1) HTTP协议基础概念....................... 错误!未定义书签。 2) HTTP协议工作流程....................... 错误!未定义书签。 3) HTTP协议请求响应信息 (6) HTTP请求报文信息....................................6 HTTP响应报文信息....................................7HTTP数据包分析 (8) 1)网络接口层信息 (10) 2)网络层信息 (11) 3)传输层信息 (12) 4)应用层信息 (13) 总结........................................ 错误!未定义书签。参考文献.. (14)

相关文档