如果说 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. Guitar Pro怎样可以快速打出三连音?

    相信很多的音乐爱好初学者在使用入门编曲软件Guitar Pro的时候,都会碰到这样一个问题,很多乐谱中都出现了三连音,那么我们使用Guitar Pro的时候,如何能够打出三连音呢? 三连音,就是三等分 ...

  2. Git学习笔记---安装与初始化 连接远程版本库

    1.Git的安装 sudo apt-get install git 用的是linux(ubuntu)系统,安装非常简单,上面一条命令就够了. 2.初次运行的配置 Git 提供了一个叫做 git con ...

  3. 【拼接属性查询方式】MySql某一列属性值为拼接时的查询方式

    数据库中某一列的值为 使用IN查询是无法查询到数据的,只能查询到IN(2)或者IN(2,3)  查询结果: , style_id) 正确方式:使用FIND_IN_SET函数 , style_id) , ...

  4. 题解——loj6278 数列分块入门2 (分块)

    查询小于k的值 注意lower_bound一定要减去查找的起始位置得到正确的位置 调了快两天 淦 #include <cstdio> #include <algorithm> ...

  5. (转) The care and maintenance of your adviser

    The care and maintenance of your adviser Ever since the advent of graduate school, students have com ...

  6. SQL语句执行的顺序机制

    From Where Group by Having Select 表达式 Distinct ORDER BY TOP/OFFSET-FETCH

  7. java.lang.ClassNotFoundException但是项目里明明已经存在

    本文为博主原创,转载需注明出处: 在开始新的项目的时候,启动报 java.lang.ClassNotFoundException,但在项目中是可以定位到缺少的类:异常为: Caused by: jav ...

  8. eclipse中建geoserver源码

    概述:本文讲述的是在eclipse中如何构建geoserver源码工程,其中涉及到了jdk,github,marven等. 1.安装git 从(http://git-scm.com/download/ ...

  9. memset()函数用法及其作用

    memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...

  10. React绑定事件动态化的实现方法

    一.什么是绑定事件 1.1 事件 我这里指的事件一般指的是React自带的触发事件,我这里先简单举例几个 onClick //鼠标点击 onMouseEnter //鼠标滑进 onMouseLeave ...