zoukankan      html  css  js  c++  java
  • http协议之基础概念篇(1)

    内容概述:

      该篇主要内容概述

      a.http相关术语解析

      b.http的基本原理与工作流程

      c.相关工具的使用(Wireshark)

    作用介绍

      绝大多数的web开发,都是构建在http协议之上的。

      HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地
    浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文
    本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

      HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个基于请
    求/响应模式的,无状态的协议。

     无状态指的是:

    1)协议对于事务处理没有记忆能力【事物处理】【记忆能力】

    2)对同一个url请求没有上下文关系【上下文关系】

    3)每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,

      也不会直接影响后面的请求应答情况【无直接联系】【受直接影响】

    4)服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器【状态】

    在TCP/IP协议栈中的位置

    HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常
    说的HTTPS。如下图所示:

    TLS:Transport Layer Security
    SSL: Secure Socket Layer

    默认端口

    默认HTTP的端口号为80,HTTPS的端口号为443。

    HTTP的请求响应模型

    HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:

      这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
    HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

    工作流程

    一次HTTP1.0操作称为一个事务,其工作过程可分为四步:

    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP工作开始。            (客户机连接请求发起
    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本
    号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。                   (连接建立,请求资源
    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或
    错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。                (服务器响应请求
    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。  (一次请求完成,断开连接

      

      如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用
    户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了

    MIME

      MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种
    应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定
    一些客户端自定义的文件名,以及一些媒体文件打开方式。

      它是一个互联网标准,扩展了电子邮件标准,使其能够支持:
    非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;
    包含非ASCII字符的头信息(Header information)。

    URL

      HTTP URL (URL是一种特殊类型的URI,Uniform Resoure Locator:统一资源定位器,包含了用于查找某个资
    源的足够的信息, URI(Uniform Resource Identifiers, URI))的格式如下:

    http://host[":"port][abs_path]

      http表示要通过HTTP协议来定位网络资源;
      host表示合法的Internet主机域名或者IP地址;
      port指定一个端口号,为空则使用缺省端口80;
      abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

    使用Wireshark抓TCP、http包

      首先说几个最常用的关键字,“eq” 和 “==”等同,可以使用 “and” 表示并且,“or”表示或者。“!" 和 "not” 都表示
    取反。
    1、针对wireshark最常用的自然是针对IP地址的过滤。其中有几种情况:
    1)对源地址为192.168.0.1的包的过滤,即抓取源地址满足要求的包。
      表达式为:ip.src == 192.168.0.1
    2)对目的地址为192.168.0.1的包的过滤,即抓取目的地址满足要求的包。
      表达式为:ip.dst == 192.168.0.1
    3)对源或者目的地址为192.168.0.1的包的过滤,即抓取满足源或者目的地址的ip地址是192.168.0.1的包。
      表达式为:ip.addr == 192.168.0.1,或者 ip.src == 192.168.0.1 or ip.dst == 192.168.0.1
    4)要排除以上的数据包,我们只需要将其用括号囊括,然后使用 "!" 即可。
      表达式为:!(表达式)
      

    2、针对协议的过滤
    1)仅仅需要捕获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可。
      表达式为:http
    2)需要捕获多种协议的数据包,也只需对协议进行逻辑组合即可。
      表达式为:http or telnet (多种协议加上逻辑符号的组合即可)
    3)排除某种协议的数据包
      表达式为:not arp !tcp

    3、针对端口的过滤(视协议而定)

    http://host[":"port][abs_path]
    1)捕获某一端口的数据包
      表达式为:tcp.port == 80
    2)捕获多端口的数据包,可以使用and来连接,下面是捕获高端口的表达式
      表达式为:udp.port >= 2048

    4、针对长度和内容的过滤
    (1)针对长度的过虑(这里的长度指定的是数据段的长度)
      表达式为:udp.length < 30 http.content_length <=20
    (2)针对数据包内容的过滤
      表达式为:http.request.uri matches "vipscu" (匹配http请求中含有vipscu字段的请求信息)

    ubuntu/Debian上安装wireshark.

    sudo apt‐get install wireshark

    nc命令来查看浏览器发出的http包(在liunx下还可以使用)

    nc ‐l ‐p 8888

    在linux下打开一个8888端口,然后在浏览器上输入ip:8888就可以接受到http get请求。

    多文本网页

    <html>
    <body>
    <img src="123.png">
    <p><font color='red' size='40'>helloworld</font></p>
    </body>
    </html>

      将此代码粘贴到一个txt文档中去,后缀名改为html,同级目录,准备一张名为123.png的图片,用浏览器打开此文件即可。

  • 相关阅读:
    第一阶段冲刺第三天
    C语言printf函数求值顺序
    计算文件的MD5值
    SWFUpload后台取数据
    swfupload的使用方式
    文件上传的几种方式
    自定义缓存
    发邮件
    生成验证码
    将序列化成json格式后日期(毫秒数)转成日期格式
  • 原文地址:https://www.cnblogs.com/wangkeqin/p/9265584.html
Copyright © 2011-2022 走看看