原文参考http://mp.weixin.qq.com/s/czx0AHaItrJ-c49XDboIUg
 HTTP是基于TCP/IP协议的应用层协议,规定了客户端和服务端之间的通信格式,默认使用80端口

1.0版请求格式如下
GET/HTTP/1.0 // 请求命令,必须在尾部添加协议版本(HTTP/1.0)
User-Agent:Mozilla/5.0(Macintosh;Intel Mac OS X 10_10_5) // 描述客户端情况
Accept:*/* // 客户端声明可以接受数据格式
Accept-Encoding: gzip,deflate //客户端说明自己可以接受哪些压缩方法
Connection: keep-alive // 要求服务端不要关闭TCP连接,非标准

回应格式如下
HTTP/1.0 200 OK // 协议版本 状态码 状态描述
Content-Type: text/plain //告诉客户端数据的格式
Content-Length: 139099
Expires: Thu,05 Dec 1997 16:00:00 GMT
Last-Modified: Wed,5 August 1996 15:55:28 GMT
Server: Apache 0.84
Content-Encoding:gzip // 数据压缩方法
Connection: keep-alive // 告诉客户端不关闭TCP连接,非标准

Content-Type的值常见如下
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
总称为MIME type,每个值包括一级类型/二级类型
厂商可以自定义类型
MIME type可以在尾部加参数,如下
Content-Type:text/html;charset=utf-8 // 发送的是网页编码是UTF-8
MIME type可以写在网页中如下
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

Content-Length: 3456 // 告诉浏览器本次回应的长度,后面属于下一个回应
区分数据包属于哪一个回应,声明本次回应的长度

主要缺点:每个TCP连接只能发送一个请求,发送完毕就关闭

HTTP1.1
引入持久连接,即TCP连接默认不关闭,可以被多个请求复用,在一段时间没有活动后,主动关闭连接。
规范做法客户端在最后一个请求时发送Connection: close,明确告诉服务器关闭连接
大多数浏览器允许同时建立6个持久连接

管道机制在同一个TCP连接里面,客户端可以同时发送多个请求

Transfer-Encoding: chunked // 表明回应将由数量不定的数据块组成
每个非空的数据块之前会与一个16进制的数值表示块的长度,最后一个大小为0表示本次回应数据发送完成
例子:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

3
con
2
wo
0

增加了动词方法:PUT,PATCH,HEAD,OPTIONS,DELETE
客户端请求头信息增加Host字段
Host: www.example.com // 指定服务器的域名

缺点:数据通信是按次序进行的,如果碰到回应特别慢后序请求要排队等着,这就是"队头堵塞"
解决方法一减少请求数
方法二多开持久连接

HTTP/2
是一个二进制协议,头信息和数据体都是二进制,统称为帧(frame)包括头信息帧和数据帧

多工:在一个连接里客户端和浏览器同时发送多个请求或回应,不用按照顺序一一对应。(即服务器同时受到a,b两个请求,先回应a请求发现过程非常耗时,会发送给a已经处理好的部分,然后回应b请求完成后,在发送a剩下部分)

将每个请求或回应的所有数据包称为一个数据流(stream),都有一个独一无二的编号,客户端发出的数据流ID统一为奇数,服务器发出的ID为偶数
客户端可以指定数据流的优先级,优先级越高服务器越早回应

引入了头信息压缩机制(header compression),一方面头信息使用gzip或compress压缩后发送,另一方面客户端和服务端同时维护一张表,所有字段会存在表里生成一个索引,只发送索引号

允许未经请求主动向客户端发送资源即:服务器推送(server push)
场景:客户端请求一个网页里面包含很多静态资源,服务器预期到客户端请求页面后会再请求静态资源,就主动把这些静态资源和网页一起发给客户端了 

HTTP 协议入门-笔记的更多相关文章

  1. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  2. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  3. redis入门笔记

    redis入门笔记 参考redis实战手册 1. Redis在windows下安装 下载地址:https://github.com/MSOpenTech/redis/tags 安装Redis 1.1. ...

  4. golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

    micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.s ...

  5. internet协议入门

    前言 劳于读书,逸于作文. 原文地址:internet协议入门 博主博客地址:Damonare的个人博客 博主之前写过一篇博客:网络协议分析,在这篇博客里通过抓包,具体的分析了不同网络协议的传送的数据 ...

  6. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  7. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  8. HTTP协议入门要点

    应用层协议.基于tcp HTTP/0.9 命令 GET 特点 服务器只能回应HTML字符串 服务器发送完毕后就关闭tcp连接 HTTP/1.0 命令 GET POST HEAD 特点 每次通信都必须包 ...

  9. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

随机推荐

  1. Smart/400开发上手2: COBOL批处理程序处理过程

    开发目的:1.建立DB2数据库表:2.建立逻辑视图:3.通过Cobol程序将一个源数据表的数据通过一定公式计算后导出到另一个目的数据库表源数据表:TIM3PF目的数据表:TIM4PF4.在AS400中 ...

  2. shell 数组使用简介

    数组简介 bash 只提供一维数组,并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标.下标可以是整数或算术表达式,其值应大于或等于 0.用户可以使用赋值语句 ...

  3. IntelliJ IDEA导入多个eclipse项目到同一个workspace下

    IntelliJ IDEA 与eclipse在新建项目上工作区的叫法略有不同,区别见下图. 我们在eclipse都是在新建的workspace目录下新建我们的项目,但是在IDEA中没有workspac ...

  4. SQL Server性能优化(6)查询语句建议

    1. 如果对数据不是工业级的访问(允许脏读),在select里添加 with(nolock) ID FROM Measure_heat WITH (nolock) 2. 限制结果集的数据量,如使用TO ...

  5. ES6箭头函数this指向

    普通函数中的this: 1. this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj 2.在默认情况(非严格模式下,未使用 'us ...

  6. ADNI数据和样例

    ADNI临床数据集: 由各个学科的临床信息组成,包括招募.人口统计特征.体格检查和认知评估数据 所收集的临床数据: 基因数据: ILLUMINA SNP基因分型检测 ADNI的一个关键目标就是为研究人 ...

  7. 使用matlibplot.pyplot设置画图的坐标系

    今天看了林轩田老师的感知机算法,心血来潮想要做个可视化过程,以便观察更新的过程. 现将学习成果做个记录,下面是画出来的图,这是初始的状态,后面会通过算法找到一条经过原点的直线将两堆数据分割开来. 直线 ...

  8. SQL语句和EF Group by 用法

    1,Group by 根据某个字段排序 select Department,count(*) FROM [PPMG].[dbo].[UnConViolation] group by Departmen ...

  9. [EWS]查找 文件夹

    摘要 有时在操作exchange的时候,需要查找用户exchange文件夹,比如用户新建了一些文件夹. 一个例子 这里以查找用户outlook邮箱中的历史对话文件夹为例. private const ...

  10. Net is as typeof 运行运算符详解

    概述 在了解运行运算符的前提我们需要了解什么是RTTI ,在任何一门面向对象的语言中,都有RTTI这个概念(即 运行时). RTTI(Run-Time Type Identification),通过运 ...