网上有很多资料说明这个,但都很长的,觉得东西太多也记不住,就记点东西,权当笔记。

HTTP

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。

请求报文格式如下:

请求行 - 请求头 - 请求包体

请求行:请求行由URL字段、方法字段 和HTTP协议版本字段3个部分组成,之间用空格隔开。

请求头:请求头包含关于客户端请求的信息,由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。

请求包体:请求包体不在GET方法中使用,而是在POST方法中使用(提交表单)。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。

应答报文格式如下:

状态行 - 响应头 -  响应包体

状态行:状态行由HTTP协议版本字段、状态码和状态码的描述文本3个部分组成,之间用空格隔开。

响应头:响应头包含服务端的响应信息,由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。

响应包体:服务器返回给客户端的文本信息。

HTTP1.0

HTTP 协议老的标准是HTTP/1.0,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

这样每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个资源,上一次和下一次请求完全分离。客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。

http1.0被抱怨最多的就是连接无法复用,和head of line blocking这两个问题。客户端是依据域名来向服务器建立连接,一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个。显然连接数并不是越多越好,资源开销和整体延迟都会随之增大。连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。head of line blocking会导致带宽无法被充分利用,以及后续健康请求被阻塞。

HTTP1.1

为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接(HTTP/1.1的默认模式使用带流水线的持久连接),在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。

HTTP 1.1通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。

HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。

HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。

HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。

HTTP/1.0不支持文件断点续传,RANGE:bytes是HTTP/1.1新增内容,HTTP/1.0每次传送文件都是从文件头开始,即0字节处开始。RANGE:bytes=XXXX表示要求服务器从文件XXXX字节处开始传送,这就是我们平时所说的断点续传!

1.0与1.1区别

HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:

1 缓存处理

2 带宽优化及网络连接的使用

3 错误通知的管理

4 消息在网络中的发送

5 互联网地址的维护

6 安全性及完整性

参考文献

1. http://www.jianshu.com/p/52d86558ca57 【面试时如何优雅的谈论HTTP/1.0/1.1/2.0】

最新文章

  1. php单条件查询,关键字查询
  2. Crontab定时任务配置
  3. InfluxDB学习系列教程,InfluxDB入门必备教程
  4. MVC5 + EF6 + Bootstrap3 (12) 新建数据
  5. 使用Eclipse构建Maven项目 (转)
  6. WCF 配置终结点并调用服务
  7. css让文字在一行内显示
  8. 四种JavaScript隐式类型转换的总结
  9. YYHS-NOIP2017Training0921-逆光
  10. Sql基础(零基础学数据库_SqlServer版)
  11. 使用SCP命令在多个linux系统间进行copy拷贝,上传,下载...
  12. 使用 SonarQube 来分析 .NET Core 项目代码问题
  13. 关于tensorflow conv2d卷积备忘的一点理解
  14. 亲测:LNMP环境下,解决项目缓冲慢、502以及配置https的问题
  15. HTTP host头
  16. python3之安装、pip、setuptools
  17. 怎样查看SSL证书的有效期?自动续期是否生效?
  18. 设计 react 组件
  19. 自测之Lesson3:makefile
  20. git stash压栈

热门文章

  1. JVM(二)—— 垃圾回收
  2. 第一册:lesson seventeen。
  3. C#与C++数据类型比较及结构体转换[整理]
  4. SQL Server跨服务器查询
  5. 理解Promise的三种姿势
  6. ssh多台主机实现互相认证
  7. springboot 常用配置文件
  8. input的type类型
  9. Human Motion Analysis with Wearable Inertial Sensors——阅读1
  10. Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础