写在前面

该章节是对请求报文及响应报文的首部信息进行解析。通过该章节的学习,相信大家对首部结构,及各个首部字段的作用有个基本的了解


  • 正文

HTTP报文由HTTP报文首部、空行以及HTTP报文主体组成。

HTTP报文主体主要装载用户和资源的信息。

HTTP报文首部为客户端以及服务端提供所需要的处理信息。

1、HTTP报文首部

HTTP首部包括HTTP请求报文首部和HTTP响应报文首部。

HTTP请求报文首部主要由方法(如:POST、GET)、URI、HTTP版本、HTTP首部字段等组成

HTTP响应报文首部主要由HTTP版本、状态码(编码和原因短语)、HTTP首部字段等组成

(请求报文首部组成图示)

(响应报文首部组成图示)

2、HTTP首部字段

2.1、首部字段为浏览器和服务器提供提供报文主体大小、语言和认证信息等

2.2、HTTP首部字段由首部字段名和字段值构成(形如:key:value)

如:Content-Type: text/html; 表示报文主体类型为text/html类型

Keep-Alive:timeout=15, max=100;字段值有个值的表示方式

2.3、4种HTTP首部字段类型(根据用途划分)

a、通用首部字段(请求报文和响应报文都包括该类型)

b、请求首部字段(补充了请求的附加内容、客户端信息、响应内容优先级等信息)

c、响应首部字段(补充了响应的附加内容)

d、实体首部字段(报文实体使用的首部;补充了资源内容,更新时间等相关的实体信息)

3、HTTP/1.1通用首部字段

3.1、Cache-Control(操作缓存工作机制)

该首部字段名支持多个字段值(如:Cache-Control:private,max-age=0,no-cache)

HTTP/1.1版本中在用的Cache-Control字段值列表:

(请求首部字段值列表)

(响应首部字段值列表)

3.2、Connection

3.2.1、控制不再转发给代理的首部字段

(这里通过设置Connection:Upgrade,则首部字段中的Upgrade将不再转发给代理服务器)

3.2.2、管理持久连接

HTTP/1.1默认是持久连接的,也就是说如果通信双方没有明确要断开连接,那么将会利用这一次的连接来进行多个请求和响应通信

(如:Connection:Keep-Alive)

3.3、Date

Date首部字段表示创建HTTP报文的日期和时间

3.4、Via

Via首部字段是为了追踪报文在通信链路的传输路径;报文通过网关和代理,网关和代理会把服务器的信息添加到Via首部字段值中,再进行转发,这样就可以得知报文经过了链路中的哪些机器去路由

4、请求报文首部字段

4.1、Accept【通知服务器,客户端需要获取的媒体(如:文本,视频音频等)类型以及媒体类型的优先级】

Accept的扩展类型有:Accept-Charset、Accept-Encoding、Accept-Language

4.2、Authorization(当服务器需要认证消息时,通过添加Authorization首部字段来告诉服务器,用户代理的认证信息)

4.3、From(告诉服务器使用用户代理的用户的电子邮件地址)

4.4、Host【当一台服务器上部署多个域名的虚拟机时,通过该字段告诉服务器,请求是哪台虚拟主机(如:Host:www.cnblogs.com)】

4.5、if-*

if-*格式的首部字段是带条件请求,也就是说只用服务器匹配了该首部字段的字段值后,服务器才会处理请求

4.6、Max-Forwards(限制报文在通信链路上经过代理服务器的长度)

5、响应报文首部字段

5.1、Accept-Ranges(告知客户端,服务端是否可以处理范围请求。其值可以是:none(表示不支持),bytes)

5.2、Age(告知客户端,服务端在多久之前处理过该请求。其单位为秒)

5.3、Etag(告知客户端,报文实体在服务端的标识)

5.3、Location(告知客户端请求的资源已被重定向到其他URI地址)

5.4、Proxy-Authenticate(告诉客户端,代理服务需要的认证信息)

5.5、Retry-After(告诉客户端多久之后才能再次请求服务端)

5.6、Server(告诉客户端,服务端安装的HTTP服务器信息)

5.7、WWW-Authenticate(告诉客户端,服务端使用的HTTP认证方案)

6、实体报文首部字段

6.1、Allow(告诉客户端,服务端所支持的HTTP请求方法类型)

6.2、Content-Encodeing(告诉客户端,服务端对于请求的实体的主体的内容所采用的编码格式)

6.3、Content-Language(告诉客户端,实体主体使用的自然语言[如:中国中文:zh-CN])

6.4、Content-Length(告诉客户端,实体主体的大小【单位为字节】)

6.5、Content-Location(告诉客户端,实体主体的对应的URI地址)

6.6、Content-Type(告诉客户端,实体主体对象采用的媒体类型)

7、为cookie服务的首部字段

因为cookie未被编入HTTP/1.1 RFC2616,但是Cookie对于管理用户的状态是十分重要的

(set-Cookie支持的属性及属性值)

9、补充说明

9.1、HTTP/1.1首部字段列表(供参考)

(请求首部字段)

(响应首部字段)

(实体首部字段)


  • 交流学习

笔者能力有限。如有纰漏,望斧正


2017-10-17

于长沙

读《图解HTTP》有感-(HTTP首部)的更多相关文章

  1. 最近读cocoaui源代码有感

    上半年为了做一个ios的应用,引入了cocoaui库,主要是用来布局ios界面,发现简化了不少代码和工作量.因为在写第一个ios应用的时候,用的代码布局,在适配4s和6的机型时候,几乎被搞死,大量的约 ...

  2. 优化MySQL,还是使用缓存?读一篇文章有感

    今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比.换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过. 具体来说,我想比较的两种优化策略是优化MySQL和缓存 ...

  3. Personal Reading Assignment 2 -读推荐文章有感以及项目开发目前总结

    在经过个人作业和结对作业的磨练和现在正在进行的团队作业的考验中,我对自己软件开发的一点得失有了些许感悟,同时读了老师推荐的文章后,自己也是有了一些感受. 首先在“No Silver Bullet”一文 ...

  4. 读ios开发有感——建立APP开发体系

    前言:ios开发和现在的大前端.跨端开发在底层上的道理是相通的,因此通过学习ios开发,可以形成对APP开发体系的理解. 一.app开发的知识体系 基础 应用开发 原理 原生与前端 二.基础模块 按照 ...

  5. [已读]图解CSS3核心技术与案例实战

    买的时候犹豫了好久,也征询了下几个前端朋友.我一直蛮怕买华章的书,好在这本内容很不错,买得值了. 大漠的css功底很深厚,这本书也很厚= =,读完之后对css圆角以及background-origin ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——07

    2013-08-20 17:51:49 第三章 IP:网际协议 3.1 引言 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP和IGMP数据都以IP数据报格式传输.再来看一下图 ...

  7. AOP 的利器:ASM 3.0 介绍

    引言 什么是 ASM ? ASM 是一个 Java 字节码操控框架.它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态 ...

  8. 懵懂oracle之存储过程

    作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...

  9. 集大1513 & 1514班 软件工程第一次作业评分与点评

    谢谢大多数同学按时完成了作业,同学态度都比较端正,没有为了完成作业或者讨好老师而说一些假话空话. 很多同学选择CS之前并没有从兴趣或者擅长出发.这是一个普遍的现象,十年前我们是这样,十年后的孩子们还是 ...

  10. Java ASM 技术简介

    什么是ASM ASM 是一个 Java 字节码操控框架.它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为. ...

随机推荐

  1. Linux0.11 中对地址的管理

    个字节,段信息无法直接存放在段寄存器中(段寄存器只有2字节).Intel的设计是段描述符集中存放在GDT或LDT中,而段寄存器存放的是段描述符在GDT或LDT内的索引值(index). Linux中逻 ...

  2. Windows CE Notification API的使用方法

    1 引言      以Windows CE 为操作系统的掌上电脑(如PocketPC或HPC),除具备PC的功能外,还具备很强的自身控制能力.Windows CE API超越微软其他操作系统的 API ...

  3. Unity3D学习笔记(三)Unity的C#基础

    在C#脚本中,必须显式的继承MonoBehaviour类需要注意的是,在创建C#脚本时,脚本名应尽量符合C#命名规则,以字母或下划线开头,因为类名的默认跟随脚本名.C#声明变量的方式和C++和Java ...

  4. Xshell Linux 主要命令

    1.   查看当前路径 pwd 2.列出当前目录的文件 ls   列出所有文件或者文件夹 ls  *abc  列出以abc开头的所以文件 ls –l   列出所以文件及其详细详细 3.进入目录 cd  ...

  5. Erlang cowboy 入门参考之现代Web的发展历史

    Erlang cowboy 入门参考之现代Web发展史 原文: http://ninenines.eu/docs/en/cowboy/1.0/guide/modern_web/ 让我回顾一下web技术 ...

  6. Android开发技巧——自定义控件之增加状态

    Android开发技巧--自定义控件之增加状态 题外话 这篇本该是上周四或上周五写的,无奈太久没写博客,前几段把我的兴头都用完了,就一拖再拖,直到今天.不想把这篇拖到下个月,所以还是先硬着头皮写了. ...

  7. web报表工具FineReport的SQL编辑框的语法简介

    感谢大家捧场,这里继续分享关于SQL编辑框的一些语法心得总结,因为数据集定义的面板,也是FineReport报表中最常用的模块之一. 1.我理解的执行过程. 这里其实是生成一个字符串,FineRepo ...

  8. 基于condition 实现的线程安全的优先队列(python实现)

    可以把Condiftion理解为一把高级的琐,它提供了比Lock, RLock更高级的功能,允许我们能够控制复杂的线程同步问题.threadiong.Condition在内部维护一个琐对象(默认是RL ...

  9. fastDFS与java整合文件上传下载

    准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...

  10. java集合框架--List、Set、Map

      1.List:有序的 collection(也称为序列).此接口可以对列表中每个元素的插入位置进行精确地控制.可以根据元素的在列表中的位置访问元素,并搜索列表中的元素.列表允许重复的元素.    ...