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. ios开发 iphone中获取网卡地址和ip地址

    这是获取网卡的硬件地址的代码,如果无法编译通过,记得把下面的这几个头文件加上把. #include <sys/socket.h> // Per msqr#include <sys/s ...

  2. java变量的作用域

    1.可分为成员变量和局部变量 两者的作用域不同:局部变量的作用域仅限于定义它的方法,方法外部无法访问,成员变量的作用域在整个类内部都可以访问如果访问权限允许的话,类外部也可以使用 初始值不同:对于成员 ...

  3. NOIP模拟赛-时间与空间之旅

    题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship船长也成了最热门的职业之一.当然,要成为一名出色的船 ...

  4. DataSet读取XML

    string file = File.ReadAllText("c://123.xml", Encoding.Default); using (DataSet ds = new D ...

  5. Ubuntu 12.10使用apt安装Oracle/Sun JDK

    apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get ...

  6. Android开发--布局

    一:LinearLayout  1.线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上.每一个LinearLayout里面又可分为垂直布局(android:orie ...

  7. Setup Apache + PHP + MySql on Windows 10

    The below steps recorded my experiences to setup the Apache + PHP + MySql on my Windows 10. 1. Downl ...

  8. java应用死循环排查方法或查找程序消耗资源的线程方法(面试)

    今天遇到一个面试,怎么在一堆线程中查找一个死循环? 如果遇到线上应用cpu飙升,并出现OutOfMemery怎么办? 首先线上应用的jvm配置要养成良好的习惯,增加一下配置则可以在jvm发生 oom的 ...

  9. C++连接mysql的两种方式(ADO连接和mysql api连接)

    一.ADO连接mysql 1.安装mysql-5.5.20-win32.msi和mysql-connector-odbc-5.3.4-win32.msi(一般两个安装程序要匹配,否则可能连接不上)  ...

  10. php文章内容分页并生成相应的htm静态页面代码

    代码如下: <?php $url='test.php?1=1'; $contents="fjka;fjsa;#page#批量生成分成文件并且加上分页代码"; $ptext = ...