如果说 HTTP 是因特网的信使,那么 HTTP 报文就是它用来搬东西的包了.

这一章讲述关于 HTTP 报文的相关知识,包括:

  1. HTTP 报文的三个组成部分
  2. 请求报文以及其各种功能
  3. 响应报文以及各种状态码
  4. HTTP 首部

报文的三个组成部分

报文有三个组成部分:

  1. 「起始行」start line:对报文进行描述
  2. 「首部」header: 包含 attributes (属性)
  3. 「主体」body: 包含内容,是可选的.

需要注意:

  1. 在 start line 和 header 中,格式为 ASCII 文本,
  2. start line 中以{CRLF}这个行终止符作为结束,中间各项用空格分开.
  3. 在 header 中,可有包含多个或者没有首部,格式为:{name:}(一个可选的空格){value}{CRLF}
  4. 在 body 中,格式为二进制数据,或者为空.

请求报文以及其各种功能

请求报文的格式:

<method> <request-URL> <version>
<headers>

<entity-body>

其中:
method 为 HTTP 的「方法」,是请求行的开头,用于告知服务器做些什么.
version 为 HTTP 的「版本」,格式为: HTTP/<major>.<minor>,(分别为主要版本号和次要版本号)

HTTP 的方法

常见的 HTTP 的方法有:

  1. GET:从服务器中得到一份文档
  2. HEAD:从服务器中获取文档的 header
  3. PUT: 将请求的 body 部分放到服务器上
  4. POST: 向服务器发送需要处理的数据
  5. TRACE: 对经过代理服务器的报文进行跟踪
  6. OPTIONS:决定可以在服务器上可供使用的方法
  7. DELETE: 从服务器中删除一份文档

下面介绍其中的 3、4、5 三种方法

③PUT 方法

定义:与 GET 方法相反, PUT 方法会向服务器写入文档.
功能:让服务器用请求的主体部分创建一个由所请求的 URL 命名的新文档.

④POST 方法

定义:与PUT 方法向服务器中存储数据有区别,POST 方法向服务器发送数据.
功能:支持 HTML 中的表单,接受表单中的信息.

⑤TRACE 方法

定义:在响应报文中携带它收到的原始请求报文
功能:在客户端发起请求的时候,可能会穿过防火墙、网关、代理等等,因此可能修改原始的 HTTP 请求,因此,可通过 TRACE 方法观察请求报文是否被破坏或者修改.

注意:返回的 TRACE 报文不包含 body

响应报文以及状态码

响应报文的格式:

<version> <status> <reason-phrase>
<headers>

<entity-body>

其中:

  1. status-code: 「状态码」,其中第一位数字都用来描述状态的一般类别(“成功”,“出错”)
  2. reason-phrase: 「原因短语」,数字状态码的可读版本,不会被机器所处理,只对人类有意义.

status-value 的种类

  1. 100~199:信息型状态码
  2. 200~299:成功
  3. 300~399:重定向
  4. 400~499: 客户端错误
  5. 500~599: 服务器错误

HTTP 首部

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

首部的类型包括:

  1. 通用首部:可出现在请求报文中,也可出现在响应报文中,例如: Date: Tue, 30ct, 1997 02:16:03 GMT
  2. 请求首部
  3. 响应首部
  4. 实体首部:描述主体的长度和内容,或者资源自身,例如:Content-lenghth: 15040

注意:
如果值的内容会超过一行,那么就应该使用 Tab 键分为多行提高可读性,规则:多出的每行前面至少有一个空格或者 Tab

请求首部

定义:请求报文特有,用于说明是谁、什么在发送给请求、客户端的喜好和能力
功能:为服务器提供一些额外信息
例如:客户端希望得到什么类型的数据:Accept: */*

种类:
1. 信息型首部
2. Accept 首部
3. 安全请求首部
4. 条件请求首部

响应首部

定义:响应报文特有,为客户端提供一些额外的信息.比如告知客户端在与那一版本服务器进行交互: Server: Tiki-Hut/1.0

种类:

  1. 信息型首部
  2. 协商首部
  3. 安全响应首部

《HTTP 权威指南》笔记:第三章 HTTP 报文的更多相关文章

  1. 【HTTP权威指南】第三章-HTTP报文

    HTTP是因特网的信使,报文就是信使运送的包裹. 这一章包含: 报文如何流动 报文的三个组成部分(起始行,首部,实体的主体部分) 请求报文和响应报文的区别 请求报文支持的各种功能(方法) 响应报文返回 ...

  2. HTML5权威指南之—第三章

    HTML页面上元素的焦点能够通过"tab"键在各个元素之间切换,使用"tabindex"属性能够改变默认的转移顺序 Tabindex为1的元素会首先被选中.然后 ...

  3. css 权威指南笔记(三)结合css和XHTML

    link rel stylesheet alternate stylesheet(候选样式表) title type media all screen print ..... 内联样式

  4. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  5. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  6. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  7. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  8. spring boot 笔记--第三章

    spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...

  9. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

随机推荐

  1. Android之Sqlite数据库

    数据库访问完毕后,游标必须也记得关闭 import com.huangzhong.love_power_model.UserInfoDto; import java.util.ArrayList; i ...

  2. centos6.5编译安装php7

    1.安装依赖软件库: yum install -y libxml2-devel libtool* curl-devel libjpeg-devel libpng-devel freetype-deve ...

  3. 【4Opencv】如何识别出轮廓准确的长和宽

    问题来源: 实际项目中,需要给出识别轮廓的长度和宽度. 初步分析: 轮廓分析的例程为: int main( int argc, char** argv ){    //read the image  ...

  4. keras与tensorboard结合使用

    使用tensorboard将keras的训练过程显示出来(动态的.直观的)是一个绝好的主意,特别是在有架设好的VPS的基础上,这篇文章就是一起来实现这个过程. 一.主要原理 keras的在训练(fit ...

  5. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165211

    目录 软件和镜像下载 虚拟机软件 Kali系统的下载 Kali系统安装 网络配置 设置共享文件夹和剪切板 安装VMware增强工具 设置共享文件夹 设置共享剪切板 更新软件源 软件和镜像下载 虚拟机软 ...

  6. 【转】java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  7. 5.sql2008分组与嵌套

    1.Group by基本介绍;2.Having的使用;3.分组综合应用;4.子查询基本介绍;5.In/Exists/Any/Some/All;6.子查询综合应用; 1.Group by基本介绍:依据B ...

  8. POJ 1679 The Unique MST 【判断最小生成树是否唯一】

    Description Given a connected undirected graph, tell if its minimum spanning tree is unique.  Defini ...

  9. NodeJs中npm使用

    什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ruby , pear 之于 PHP . npm 是 Node 官方提供的包管理工具,他已经成了 Node ...

  10. 【入门】Gradle的基本使用、在IDEA中的配置、常用命令

    一.介绍 java的源码构建工具,大致经历了 ant -> maven -> gradle 这个过程,每一次进步,都是在解决之前的工具所带来的问题,简单来说: 1. ant 功能虽然也很强 ...