1,什么是http报文?

上一节我们了解到数据在浏览器和服务器之间进程传送,这些数据被称为报文流,报文流有流入流出之分,当然在也有上游和下游,这些都是来确定报文的流向。

报文的流向都是向下,而不会回流,比如下图:

2,报文的组成

直观的看一报文的组成。

请求报文:

响应报文:

(1)请求报文的格式:

<method> <request-URL> <version>           --起始行请求行<headers>                                             --首部
<entity-body>                                        --主体

(a)起始行:

method:请求的起始行以方法作为开始,方法用来告知服务器要做些什么。

比如请求报文里面第一个单词POST,其实它就是个方法,它的含义是向服务器发送需要处理的数据。

request-URL:请求URL描述了要对哪个资源执行操作。比如上面请求报文里面的这一部分。

version:请求行中还包含HTTP 的版本,用来告知服务器,客户端使用的是哪种HTTP。

(b)首部:

       

         HTTP 首部字段向请求报文中添加了一些附加信息。本质上来说,它们只是一些名/ 值对的列表。

常用首部:

(c)主体:

       

       HTTP 报文的第三部分是可选的实体主体部分。实体的主体是HTTP 报文的负荷。就是HTTP 要传输的内容。

(2)响应报文的格式:

<version> <status> <reason-phrase>         --起始行响应行
<headers>
<entity-body>

注意响应报文的格式里面只有第一部分不同,即请求报文的请求行和响应报文的响应行的内容格式不同,其余格式相同。

响应行:,第一个version是响应使用的http版本,第二个status是数字状态码,第三个是原因短语reason-phrase

3,重点梳理

从上面的分析可以看出报文无非就那几块,起始行(包含请求行和响应行):请求行包含一个方法,它告诉服务器要进行什么操作,当然接下来就是对具体哪个位置的资源进行操作了,后面就是版本号了。响应行包含一个版本,该版本后面跟一个状态码和一个原因短语。

方法总结:

(1)GET方法通常请求服务器发送某资源给请求方。

(2)HEAD方法和GET方法类似,也是请求服务器返回某些东西,但是区别是head方法不会返回实体部分,这就意味着没有真正获取到服务器的资源,但是它的作用是:

•在不获取资源的情况下了解资源的情况(比如,判断其类型);
        • 通过查看响应中的状态码,看看某个对象是否存在;
        • 通过查看首部,测试资源是否被修改了。

(3)PUT方法是向服务器写入资源。PUT 方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL 命名的新文档,或者,如果那个URL 已经存在的话,就用这个主体来替代它。

(4)POST方法是向服务器发送数据的,服务器会根据这些数据确定返回什么值。这个在工作中常见的应用就是接入别人的webservice接口,比如说有个短信接口,你只要输入电话号码就会返回通话记录。

(5)DELETE方法当然是从服务器某个位置删除资源的,但是,客户端应用程序无法保证删除操作一定会被执行。因为HTTP 规范允许服务器在不通知客户端的情况下撤销请求。

其实还有别的方法,不一一介绍了,但是有一点需要注意的是有个名词叫安全方法,其实就是看哪些方法对服务器有影响,比如GET和HEAD当然是安全的,只是请求不会修改,但是DELETE方法就不一定了,所以说DELETE方法不是安全方法。

至于状态码,不必刻意去记住,查查文档就可以。以上部分图片内容来源于《HTTP权威指南》。

HTTP学习笔记(2)HTTP报文的更多相关文章

  1. SNMP学习笔记之SNMP报文以及不同版本(SNMPv1、v2c、v3)的区别

    本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1.v2c.v3)进行区别! 四.SNMP协议数据单元 在SNMP管理中,管理站(NMS)和代理(Agent)之间交换的管理信息构成了SNMP报 ...

  2. SNMP学习笔记之SNMP报文协议详解

    0x00 简介 简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单 ...

  3. SNMP学习笔记之SNMPv3报文认证和加密

    下面主要的内容就是SNMPv3的加密和认证过程! USM的定义为实现以下功能: 鉴别 数据加密 密钥管理 时钟同步化 避免延时和重播攻击 1.UsmSecurityParameters(安全参数) 安 ...

  4. DPI (深度报文检测) 关于DPI的学习笔记

    关于DPI的学习笔记 先看一下定义 : DPI(Deep Packet Inspection)是一种基于数据包的深度检测技术,针对不同的网络应用层载荷(例如HTTP.DNS等)进行深度检测,通过对报文 ...

  5. HTTP学习笔记02-HTTP报文格式之概述

    HTTP学习笔记02-HTTP报文格式之概述 HTTP学习笔记02-HTTP报文格式之概述 HTTP报文格式 报文的语法 起始行 首部 实体部分 学习一个协议感觉最有意思的就是看包结构…在我看来这是唯 ...

  6. ASP.Net开发基础温故知新学习笔记

    申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...

  7. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  8. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  9. memcached学习笔记——存储命令源码分析上篇

    原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...

  10. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

随机推荐

  1. (整理)SQLServer 大数据的插入与查询

    最近几天一直在折腾大数据量的查询,最后在索引.分页存储过程和控件以及视图的帮助下,搞定了.这篇文章记录解决问题时候查看的网友的分享链接,以及大数据量数据的插入链接. DatagridView Virt ...

  2. java中数据类型转换

    1.自动类型转换:首先两者数据类型要兼容,且目标类型要大于源类型如(int类型转换成double类型) 2.强制转换:两者数据类型要兼容,会使破坏数据的结构

  3. dbus

    http://blog.csdn.net/zyz511919766/article/details/7700498 http://maemo.org/maemo_training_material/m ...

  4. scrollWidth的巧妙运用

    再了无生趣的工作也是能够帮助我们提高的~ 最近工作比较无聊,于是就想到了写一个滚动条插件,在借鉴了mCustomerScrollbar这个组件之后我简单的写了一个类似的,当然,相比于它的2000多行代 ...

  5. 百度地图API示例之根据城市名设置地图中心点

    代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  6. SQL Server 磁盘空间告急(磁盘扩容)转载

    一.背景 在线上系统中,如果我们发现存放数据库文件的磁盘空间不够,我们应该怎么办呢?新买一个硬盘挂载上去可以嘛?(linux下可以直接挂载硬盘进行扩容),但是我们的SQL Server是运行在Wind ...

  7. MVC 下拉單數據內容綁定

    #region        /// <summary>授權範圍自建列表</summary>        /// <returns></returns> ...

  8. 修改Django的默认打印时间

    环境 Django版本:1.10 前言 默认情况下,Django会把日期按照“月份 天数, 年”的格式打印,比如2003年2月4日会打印成“Feb. 4, 2003”,这种格式对于西方人来说很好看,但 ...

  9. Cocos2d-JS 自定义loading界面

    [转]http://blog.csdn.net/et_sandy/article/details/41415047 环境: win7 64位 Cocos2d-JS v3.1 Cocos Code ID ...

  10. smarty模板的安装配置

    第一步:下载Smarty模版源码包了    百度一下“Smarty下载”,下载最新版本的Smarty模版第二部:解压缩,将下载好的Smarty包解压缩    右键->解压到当前文件夹...你懂的 ...