http协议详解<一>

写在前面:感谢米安网,感谢task分享,感谢Assassin_CHN分享


http协议是一个渗透测试人员或者开发人员必须要懂的协议,我们访问网站也必须要用到http协议。

1.http简介

  http(Hyper Text Transfer Protool超文本传输协议),一种详细规定了浏览器和万维网服务器之间互相通信的规则,是万维网交换信息的基础,允许将HTML(超文本标记语言)文档从web服务器传送到web浏览器。

  也就是说我们访问网站必须要用到http协议。

2.使用firebug和curl观察http协议

  firebug是一款非常好用的网页调试工具,可以查看http请求;

  curl是一个利用url语法规定来传输文件和数据的工具,支持很多协议,如http、FTP、Telnet等,使用curl可以很清楚的看到所使用的协议。

2.1 firebug

首先打开Mozilla Firefox(或Google Chrome),添加firebug组件

               wKioL1aAxq6TnMuVAACjASgAt8M634.png

然后访问网站,以http://www.moonsos.com/为例,右击鼠标,选择“使用firebug审查元素”

                   wKioL1aAxufjNqqSAACncAll9vI639.png

出现如下界面:

wKioL1aAxwXQxxs9AAGdlMGWUGA543.png

然后选择“网络”,就可以看到请求信息

wKioL1aAyOfjYI1zAAIlPQ9TwcY925.png

备注:直接右击页面,选择“审查元素”-->选择“网络”也可以看到请求的详细信息。


    首次打开firebug没有显示请求信息,我们在URL框中回车后,会看到三个GET请求,说明浏览器向服务器发送了三次请求

wKioL1aAysrxiu8OAAHRJu7u4Qc103.png

点击任意一个请求,在响应头信息中可以看到请求的详细信息


2.2 curl

curl也可以在windows上安装curl.exe工具。效果都是一样的。

[root@yvonne ~]# curl -I www.moonsos.com
HTTP/1.1 200 OK      
Server: Apache/2.2.25 (Win32) PHP/5.3.5
Connection: keep-alive
Date: Mon, 28 Dec 2015 13:41:58 GMT
Last-Modified: Mon, 28 Dec 2015 13:40:00 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 35764
X-Powered-By: PHP/5.3.5
Set-Cookie: safedog-flow-item=0B04B99E0C1B1CFD0D0CCCB472D82967; expires=Thur, 3-Feb-2152 16:53:17 GMT; domain=moonsos.com; path=/
X-Daa-Tunnel: hop_count=1
X-Cache-Lookup: Hit From Upstream
X-Cache-Lookup: Hit From Upstream


3.http请求的详解

  3.1firebug中的http报文信息

wKiom1aA6rzhA4QyAAHKRJvLJkc994.png


HTTP请求首部常用首部:

首部

类型

描述

Date

通用

提供日期和时间标志,说明报文是什么时候创建的

Content-Length

实体

报文中实体主体的字节大小。如果进行了gzip压缩,这个大小就是压缩后的大小。客户端通过它确定报文截尾

Accept

请求

客户端通知服务器可以接收哪些媒体类型

Content-Type

实体

报文中对象的媒体类型

Cache-Control

通用

 “缓存首部”

Connection

通用

Connectionclose响应结束之后,连接会被关闭。不支持持久连接的HTTP/1.1应用程序要在所有请求和响应中插入Connectionclose

Server

响应

识别服务器软件

Set-Cookie

响应

设置服务器产生的ID

 

HTTP请求其他首部

首部

类型

描述

Expect:100-continue

请求

客户端告知服务器它们需求某种行为。

Transfer-Encoding:chunk

通用

使用分块传输

User-Agent

请求

用户的浏览器软件

Host

请求

请求资源所在的服务器。(Apache中按Host区分虚拟主机)

Location

响应

令客户端重定向至URL

Vary

响应

服务端通知客户端,在服务端的协商中会使用哪些来自客户端的首部。它的值是一个首部列表,服务器会去查看这些首部,以确定什么内容作为响应发回给客户端。

 

3.2 http协议是无状态的,客户端(浏览器)发起request请求,服务器返回response响应,然后建立连接。

         wKiom1aBRAvAxBfgAABEt_QTHPM880.png


http协议request请求包括三个部分:请求头(请求方法)、请求行(消息报头)、请求正文。

http协议response响应包括三个部分:响应头、响应行(消息消息报头)、响应正文(消息主题)。


3.3 常用的http请求方法:

GET 请求获取由request-url标识的资源
POST 在request-url所标识的资源后附加新的数据
HEAD 请求获取由request-url所标识资源的响应消息报头
TRACE
请求服务器会送收到的请求信息,主要用于测试或诊断
PUT 请求服务器存储一个资源,并用request-url作为其标识
DELETE
请求服务器删除由request-url所标识的资源
OPTIONS 请求查询服务器性能,或查询与服务器相关的选项和需求


3.4  http请求常见返回状态码:

1xx 临时响应

返回码

说明

100Continue

请求者应当继续提出请求。  服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

101:Switching Protocols

请求者已要求服务器切换协议,服务器已确认并准备切换。

 2xx 成功

返回码

说明

200OK

服务器已成功处理了请求。

206Partial Content

服务器成功处理了部分 GET 请求。

 3xx 重定向

返回码

说明

301:Moved Permanently

请求的网页已永久移动到新位置

302Found

服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。只在当次请求中生效。

303See Other

请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。

304Not Modified

自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改  过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。

305Use Proxy

请求者只能使用代理访问请求的网页。  如果服务器返回此响应,还表示请求者应使用代理。

307:Temporary Redirect

服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。  此代码与响应 GET HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置

 4xx 请求错误

返回码

说明

400Bad Request

服务器不理解请求的语法。服务器没有收到GET

401Unauthorized

请求要求身份验证。  对于需要登录的网页,服务器可能返回此响应。

403Forbidden

服务器拒绝请求。

404Not Found

服务器找不到请求的任何信息。

405Method Not Allowed

禁用请求中指定的方法。

406Not Acceptable

无法使用请求的内容特性响应请求的网页。

407Proxy  Authentication Required

此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。

411Length Required

服务器不接受不含有效内容长度标头字段的请求。

413Request Entity Too  Large

服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

414Request-URI Too  Large

请求的 URI(通常为网址)过长,服务器无法处理。

415Unsupported Media  Type

请求的格式不受请求页面的支持。

416Requested range  not satisfiable

如果页面无法提供请求的范围,则服务器会返回此状态代码。

417Expectation Failed

服务器未满足期望请求标头字段的要求。(Expect

 5xx 服务器错误

返回码

说明

500Internal Server  Error

服务器遇到错误,无法完成请求。

502Bad Gateway

服务器充当网关或代理,从上游服务器收到无效响应。

503Service  Unavailable

服务器目前无法使用(由于超载或停机维护)。  通常,这只是暂时状态

504Gateway Timeout

服务器充当网关或代理,但没有及时从上游服务器收到请求。

505HTTP Version Not  Supported

服务器不支持请求中所用的 HTTP 协议版本。

 

4.手工模拟http请求

 4.1 通过Telnet模拟http请求

    windows默认不支持Telnet,需要开启Telnet服务,如下图:

    wKiom1aBU9HD6IrTAAIEg5lz61g503.png


现在就可以开始模拟http的请求了,是不是有点小兴奋�d(o)�d呢O(∩_∩)O~~

这里我先写完操作步骤,然后再一步一步的详细讲解

首先建议在notepad记事本里写下要请求的内容

  GET /index.html HTTP/1.1

  HOST: www.moonsos.com

  wKiom1aBV-vwOvWlAAAHwgjwHpI481.png

然后cmd打开命令dos界面,输入要请求的网站域名和端口

  telnet www.moonsos.com 80

  wKiom1aBWPWyTaKbAAAbwRLUrDY965.png

回车后按 'CTRL+]',然后继续回车,将记事本中写好的内容复制到命令行里

  备注:这里的两步如果长时间就会自动遗失对主机的连接

         wKioL1aBWTGSBTNhAAAT-LyEn8o109.png

将记事本中的内容复制进去后,连着两次回车,就可以看到GET到的内容了。

         wKiom1aBWSyxlmoTAAANPhapGZc764.png

结果:

wKiom1aBWZeiVrhUAABC7xu2fA0803.png

这里是GET请求,换做POST或HEAD也是一样的。只要将请求方法换做POST或HEAD就好。

wKiom1aBW9ii4Ay-AABTtaVJBa0576.png


wKiom1aBXQewRm1RAABZMn1FuHo601.png

小结通过Telnet模拟http请求:

1.telnet www.moonsos.com 80

2.'CTRL+]'

3.回车Enter

4.输入请求,两次回车Enter


4.2 curl.exe[windows工具]或curl[linux命令]

[root@yvonne ~]# curl -I www.moonsos.com

HTTP/1.1 200 OK

Server: Apache/2.2.25 (Win32) PHP/5.3.5

Connection: keep-alive

Date: Mon, 28 Dec 2015 14:23:51 GMT

Last-Modified: Mon, 28 Dec 2015 14:20:00 GMT

Content-Type: text/html; charset=utf-8

Content-Length: 35764

X-Powered-By: PHP/5.3.5

Set-Cookie: safedog-flow-item=0B04B99E0C1B1CFD0D0CCCB472D82967; expires=Thur, 3-Feb-2152 17:35:11 GMT; domain=moonsos.com; path=/

X-Daa-Tunnel: hop_count=1

X-Cache-Lookup: Hit From Upstream

X-Cache-Lookup: Hit From Upstream


你可能感兴趣的:(http,浏览器,Google,web服务器,firefox)