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. 23. Sum Root to Leaf Numbers

    Sum Root to Leaf Numbers Given a binary tree containing digits from 0-9 only, each root-to-leaf path ...

  2. C++设计模式-AbstractFactory抽象工厂模式

    AbstractFactory 要创建一组相关或者相互依赖的对象 作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. UML结构图: 抽象基类: 1)AbstractProdu ...

  3. IQ推理:P先生和Q先生

    P先生.Q先生具有足够的推理能力.这天,他们正在接受面试. 他们知道桌子的抽屉里有16张扑克牌:红桃 A Q 4黑桃 J 8 4 2 7 3草花 K Q 5 4 6方块 A 5约瀚教授从这16张牌中挑 ...

  4. js进度条实现

    1.先设置CSS样式(可自定义) /*#region 进度条 */ .progbar { background-color: #e1e1e1; width:auto; color: #222; hei ...

  5. PCI Express(一)- Connector

    在FPGA4FUN上看到一篇介绍PCI-E的帖子,简单易懂,适合入门,特地搬过来 原文地址:http://www.fpga4fun.com/PCI-Express.html 前言: As PCI Ex ...

  6. Python自动化 【第六篇】:Python基础-面向对象

      目录: 面向过程VS面向对象 面向对象编程介绍 为什么要用面向对象进行开发 面向对象的特性:封装.继承.多态 面向过程 VS 面向对象 面向过程编程(Procedural Programming) ...

  7. 基于percona 5.7的xtrabackup实践

    环境:         centerOS7         percona 5.7         xtrabackup  2.4(5.7只支持2.4已上的版本)   第一步:  安装xtraback ...

  8. 真机在wifi下调试android程序

    大家好,最近在学习android程序由于手机接口问题,调试程序的时候老是接触不良而不能正常调试,因此感到相当苦恼,于是在网上查找无线调试android的方法.经过研究和尝试现已成功无线调试程序,方法分 ...

  9. NLPP-02-Exercises

    <PYTHON自然语言处理>第2章 内容简介:各种文本语料库. 古腾堡项目 www.gutenberg.org OLAC元数据格式档 http://www.language-archive ...

  10. java break语句的三种用法

    1.用于switch语句当中,用于终止语句 2.用于跳出循环,此为不带标签的break语句,相当与goto的作用 e.g while(i<j&&h<k){ if(h< ...