zoukankan      html  css  js  c++  java
  • http协议详解<一>

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://7826443.blog.51cto.com/7816443/1729227

    写在前面:感谢米安网,感谢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工具。效果都是一样的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [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

    通用

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

    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 临时响应

    返回码

    说明

    100:Continue

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

    101:Switching Protocols

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

     2xx 成功

    返回码

    说明

    200:OK

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

    206:Partial Content

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

     3xx 重定向

    返回码

    说明

    301:Moved Permanently

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

    302:Found

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

    303:See Other

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

    304:Not Modified

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

    305:Use Proxy

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

    307:Temporary Redirect

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

     4xx 请求错误

    返回码

    说明

    400:Bad Request

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

    401:Unauthorized

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

    403:Forbidden

    服务器拒绝请求。

    404:Not Found

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

    405:Method Not Allowed

    禁用请求中指定的方法。

    406:Not Acceptable

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

    407:Proxy  Authentication Required

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

    411:Length Required

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

    413:Request Entity Too  Large

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

    414:Request-URI Too  Large

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

    415:Unsupported Media  Type

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

    416:Requested range  not satisfiable

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

    417:Expectation Failed

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

     5xx 服务器错误

    返回码

    说明

    500:Internal Server  Error

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

    502:Bad Gateway

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

    503:Service  Unavailable

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

    504:Gateway Timeout

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

    505:HTTP Version Not  Supported

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

    4.手工模拟http请求

     4.1 通过Telnet模拟http请求

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

        wKiom1aBU9HD6IrTAAIEg5lz61g503.png

    现在就可以开始模拟http的请求了,是不是有点小兴奋ヾ(o)ヾ呢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

  • 相关阅读:
    (一)SpringCloud Alibaba Nacos服务注册和配置中心:Nacos简介
    (八)SpringCloud初级篇——Eureka服务注册与发现:服务发现Discovery
    (七)SpringCloud初级篇——Eureka服务注册与发现:actuator微服务信息完善
    (六)SpringCloud初级篇——Eureka服务注册与发现:集群Eureka构建步骤
    Windows系统修改Hosts文件
    (五)SpringCloud初级篇——Eureka服务注册与发现:单机Eureka构建步骤
    centos7 安装zookeeper
    热部署Devtools
    【阅读笔记】《C程序员 从校园到职场》第三章 程序的样式(版式和注释)
    【阅读笔记】《C程序员 从校园到职场》第二章 学校到职场
  • 原文地址:https://www.cnblogs.com/0to9/p/5104404.html
Copyright © 2011-2022 走看看