内容概述:

  该篇主要内容概述

  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 

在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的图片,用浏览器打开此文件即可。

http协议之基础概念篇(1)的更多相关文章

  1. DNA拷贝数变异CNV检测——基础概念篇

    DNA拷贝数变异CNV检测——基础概念篇   一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...

  2. lua学习之基础概念篇

    基础概念 程序块 (chunk) 定义 lua 中的每一个源代码文件或在交互模式(Cmd)中输入的一行代码都称之为程序块 一个程序块就是一连串语句或者命令 lua 中连续的语句不需要分隔符,但为了可读 ...

  3. (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇

    本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...

  4. 【Kafka入门】Kafka入门第一篇:基础概念篇

    Kafka简介 Kafka是一个消息系统服务框架,它以提交日志的形式存储消息,并且消息的存储是分布式的,为了提供并行性和容错保障,消息的存储是分区冗余形式存在的. Kafka的架构 Kafka中包含以 ...

  5. XMPP协议相关基础概念(Strophe学习笔记)

    相关资料: XMPP官网http://xmpp.org/xmpp-software/libraries/ nginx的转发配置http://mineral.iteye.com/blog/448260 ...

  6. 函数响应式编程(FRP)—基础概念篇

    原文出处:http://ios.jobbole.com/86815/. 一函数响应式编程 说到函数响应式编程,就不得不提到函数式编程,他们俩有什么关系呢?今天我们就详细的解析一下他们的关系. 现在下面 ...

  7. Win32多线程编程(1) — 基础概念篇

      内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Serv ...

  8. (一)github之基础概念篇

    1.github: 一项为开发者提供git仓库的托管服务, 开发者间共享代码的场所.github上公开的软件源代码全都由git进行管理. 2.git: 开发者将源代码存入名为git仓库的资料库中,而g ...

  9. haproxy小结(一)基础概念篇

    HAProxy是法国人Willy Tarreau个人开发的一个开源软件,目标是应对客户端10000以上的同时连接,为后端应用服务器.数据库服务器提供高性能的负载均衡服务.HAproxy可以实现基于TC ...

随机推荐

  1. 生产制造追溯系统-IQC来料检验

    前言 相信大家都知道,任何一家工厂都有自己的仓库,用来存储采购回来的物料,那么在供应商将我们采购的物料送到工厂之后,我们都需要一个检验动作,也就是今天要说的===>IQC来料检验,这个检验动作是 ...

  2. Linux 系统监控.诊断工具之 IO wait

    1. 常用组合方式有如下几种: 用vmstat.sar.iostat检测是否是CPU瓶颈 用free.vmstat检测是否是内存瓶颈 用iostat.dmesg 检测是否是磁盘I/O瓶颈 用netst ...

  3. php源码zend_do_begin_namespace函数详解

    version:5.6.21 file:Zend/zend_compile.c line:7055-7152 void zend_do_begin_namespace(const znode *nam ...

  4. 解读OC中的load和initialize

    在 Objective-C 中,NSObject 是绝大多数类的基类.而在 NSObject 中有两个类方法 load 和 initialize,那这两个方法是在什么时机被调用呢?父类.Categor ...

  5. 多线程(C++)临界区Critical Sections

    一 .Critical Sections(功能与Mutex相同,保证某一时刻只有一个线程能够访问共享资源,但是不是内核对象,所以访问速度比Mutex快,但是没有等待超时的功能,所以有可能导致死锁,使用 ...

  6. IOS8 UIAlertController 弹框

    本文转载至 http://blog.csdn.net/jinkaiouyang/article/details/35551769 IOS8中,Apple将UIActionSheet和UIAlertVi ...

  7. c#4.5新语法--自动属性和隐式类型

    1.自动属性    自动属性是c#中属性定义的两种形式的一种:传统属性定义.自动属性.    1.1 传统属性定义        private int _age;        public int ...

  8. HttpURLConnection 接收网络数据出现乱码问题

    由于接收的数据经过gZip处理过,所以在接受的时候也要处理,并且加上编码格式(没有会出现部分数据乱码): 具体代码实现如下: URL ul = new URL(url); HttpURLConnect ...

  9. httpd 隐藏文件

    问题情况, 因磁盘空间问题,使用rsync将 php工作目录下文件copy到新盘中后,出现 php服务很多目录访问返回 404,路径找不到,其实文件都存在,而且路径都是对的 解决思路. 根目录下 有个 ...

  10. top命令按内存和cpu排序

    目录 按进程的CPU使用率排序 按进程的内存使用率排序 按进程的CPU使用率排序 运行top命令后,键入大写P. 有两种途径: a) 打开大写键盘的情况下,直接按P键 b) 未打开大写键盘的情况下,S ...