摘要:

    本文简单介绍了Web应用层协议理论知识,详细讲述了HTTP请求报文和响应报文各个字段含义,并从Wireshark俘获分组中选取HTTP相关报文进行分析。

一、概述

    Web的应用层协议是超文本传输协议HTTP,HTTP协议由两部分程序实现:客户机程序、服务器程序,协议定义了这些报文的格式以及客户机和服务器如何进行报文交换的。Web服务器用于存储Web对象,每个对象由URL寻址,Web客户机通常指浏览器。浏览器向服务器发出对Web页中所包含对象的HTTP请求报文,服务器接受请求并用包含这些对象的HTTP响应报文进行响应。Web页是由对象组成,对象简单来说就是文件(如图形文件、Java小程序、声音剪辑文件),这些文件通过一个URL地址寻址。Web页通常含有一个基本的HTML文件和几个引用对象。

    HTTP报文有两种:请求报文、响应报文。

二、HTTP请求报文

2.1 请求报文

整个报文段内容是普通ASCII文本,各个字段靠空格或者回车换行符隔开,如下图:

图1 HTTP请求报文格式

方法

表1 HTTP请求报文方法[1]

方法

说明

GET

请求获取URL所标识的资源

POST

在URL所标识的资源后附加新的数据

HEAD

请求获取由URL所标识的资源的响应消息报头,常用于故障跟踪

PUT

请求服务器存储一个资源,并用URL作为其标识

DELETE

请求服务器删除URL所标识的资源

TRACE

请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT

保留将来使用

OPTIONS

请求查询服务器的性能,或者查询与资源相关的选项和需求

    使用GET方法时实体主体为空。客户机有时候需要提交表单(如搜索关键词),有两种方法可以做到这一点:其一,使用POST方法,实体主体包含表单字段的值;其二,用GET方法,此时表单的字段与原URL形成新的URL。

    注:HTTP/1.0规约仅有三种方法:GET、POST、HEAD。

URL

    对象由统一资料定位器URL标识,URL由3部分组成(如http://www.baidu.com/index.html):协议(http)、存放对象服务器主机名(www.baidu.com)、对象的路径名(/index.html)。

版本

    目前有HTTP/1.0、HTTP/1.1,后者兼容前者。HTTP/1.0仅支持非持续连接,即每个TCP连接在服务器返回对象后关闭,HTTP/1.1支持持续连接,即服务器在发送响应后保持该TCP连接。早期,Web页面通常只包含HTML文件,用非持续连接就够了。如今,一个Web页面包含许多对象,用非持续连接开销太大了(TCP建立的三次握手),因此持续连接更合适。

首部行

    给服务器发送首部行旨在服务器为不同类型的客户机发送相同对象的不同版本,常用的首部行见表2。

表2 HTTP请求报文常用首部行

字段名

User-Agent

关于浏览器和它的平台信息

Accept

客户机能处理的页面类型

Accept-Charset

客户机可以接受的字符集

Aceept-Encoding

客户机能处理的页面编码方法

Accept-Language

客户机能处理的自然语言

Host

服务器的DNS名字

Authorization

证明客户端有权查看某个资源

Cookie

将一个以前设置的cookie送回给服务器

实体数据

    实体数据是报文的主体,即所请求的对象本身。

2.2 实例分析

图2 HTTP请求报文实例

三、HTTP响应报文

3.1 报文格式

图3 HTTP响应报文格式

版本

    服务器使用的协议版本。

状态编码、短语

    状态编码码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值[1]:

表3 HTTP响应报文响应类别及值

类别

1xx

指示信息--表示请求已接收,继续处理

2xx

成功--表示请求已被成功接收、理解、接受

3xx

重定向--要完成请求必须进行更进一步的操作

4xx

客户端错误--请求有语法错误或请求无法实现

5xx

服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

表4 HTTP响应报文常用代码

编码

短语

说明

200

OK

客户端请求成功

400

Bad Request

客户端请求有语法错误,不能被服务器所理解

401

Unauthorized

请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403

Forbidden

服务器收到请求,但是拒绝提供服务

404

Not Found

请求资源不存在

500

Internal Server Error

服务器发生不可预期的错误

503

Server Unavailable

服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

首部行

    常用的HTTP响应报文首部行见下表:

表5 响应报文常用首部行字段

字段名

Date

消息被发送时的日期和时间

Server

关于服务器信息

Content-Encoding

内容是如何被编码的(如gzip)

Content-Length

以字节计算的页面长度

Content-Type

页面的MIME类型

Last-Modified

页面最后被修改的时间和日期

Location

指标客户将请求发送到别处的命令

Accept-Ranges

服务器将接受指定请求的字节范围

Set-Cookie

服务器希望客户保存一份cookie

实体数据

    实体数据是报文的主体,即所请求的对象本身。

3.2 报文实例

图2 HTTP响应报文实例

至此,服务器返回用户所请求的文件:-)

 

参考资料:

[1] 博文《HTTP协议详解

[2] Andrew S.Tanenbaum.计算机网络[M].

[3] 《计算机网络--自顶向下方法与Internet特色》[M].

 HTTP请求报文格式.rar

from:http://blog.chinaunix.net/uid-9112803-id-3212057.html

结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议的更多相关文章

  1. 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议

    摘要:     本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS      ...

  2. 结合Wireshark捕获分组深入理解TCP/IP协议栈

    摘要:     本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈.   一.俘获分组 1.1 准 ...

  3. 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

    摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述     TCP是面向连接的可靠 ...

  4. 结合Wireshark捕获分组深入理解TCP/IP协议之以太网帧

    摘要:     本文摘抄并整理了以太网相关理论知识,包括CSMA/CD协议机制及工作.LAN互连,详细分析了Ethernet II帧格式,最后给出Ethernet II帧实例. 一.以太网[1] 1. ...

  5. 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议

    摘要:     本文简单介绍了网络层理论知识,详细讲解了IP数据报各个字段,并从Wireshark俘获分组中选取IP数据报进行分析,也阐述了分组和分片的区别.   一.IPv4数据报     网络层是 ...

  6. 理解TCP/IP协议栈之HTTP2.0

    1 前言 前面写了10多篇关于Redis底层实现.工程架构.实际应用的文章,感兴趣的读者可以进行阅读,如有问题欢迎交流: 1.Redis面试热点之底层实现篇-12.Redis面试热点之底层实现篇-23 ...

  7. 面试热点|理解TCP/IP传输层拥塞控制算法

    0x00.前言 通过本文你将了解到以下内容: 拥塞控制概念以及其背景 流量控制和拥塞控制的区别与联系 拥塞控制主要过程详解 伙伴们认真学习一下,让offer来得更猛烈些吧! 0x01.TCP/IP协议 ...

  8. 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...

  9. 深入浅出理解 TCP/IP 协议 (一)

    文章转自:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入 ...

随机推荐

  1. Solr 定义

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  2. C#使用一般处理程序(ashx)中session

    .ashx中引用 session必须 using System.Web.SessionState ,继承IReadOnlySessionState/IRequiresSessionState IRea ...

  3. Datatable foeach 遍历

    //1.创建 datatable DataTable dt = new DataTable("dtDemo");//可以给表创建一个名字,datatable //2.给表加个列名: ...

  4. Spring模块作用

    0.模块整理 Spring模块整理(http://www.kuqin.com/shuoit/20150805/347434.html) 模块名 作用 资料 aop  spring的面向切面编程,提供A ...

  5. ping---测试主机之间网络的连通性

    ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 选项 -d:使用Socke ...

  6. ios学习之旅---c语言函数

    1.函数的概述 C源程序是由函数组成的. 尽管在前面各章的程序中大都仅仅有一个主函数main(),但有用程序往往由多个 函数组成. 函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能. C语 ...

  7. 【基础练习】【线性DP】codevs2622 数字序列(最大连续子序列和)题解

    版权信息 转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看 这道题目本质就是朴素的最大连续子序列和 直接上题目和代码 题目描写叙述 Descr ...

  8. Linux-清除rootpassword

    1.Linux进入单用户模式,通常选择内核按e 最后加入single,按b进入单用户. 2.清除/etc/shadow中root这一行第一个:符号和第二个:符号之间内容. 3.正常启动,passwd ...

  9. Restlet 学习笔记

    摘要:网络上对 restlet 的评判褒贬不一,有的说框架封装的很好,很有弹性,有的说 rest 架构风格本身是一种简单的风格,restlet 过设计以使编程过于复杂,其实我倒不觉得 restlet ...

  10. 洛谷 P2384 最短路

    洛谷 P2384 最短路 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你10000000000000000000000000000 ...