图解HTTP(记录书中笔记)

一、了解web及网络基础

web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议作为规范。完成从客户端到服务器端等一系列运作流程。而协议是规则的约定。

1.2 HTTP的诞生

Tim Berners Lee博士提出了一种能让远隔两地的研究者们共享知识的设想。

最初设想的基本理念是:借助多文档之间相互关联形成的超文本,连成可相互参阅的WWW

HTTP于1990年问世,那时的HTTP并没有作为正式的标准被建立。

HTTP正式作为标准被公布是在1996年的5月,版本是HTTP/1.0

1.3 网络基础TCP/IP

计算机与网络设备要相互通信,双方必须基于相同的方法。比如:如何探测到通信目标,由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定。不同的硬件,操作系统之间的通信,所有的这一切都需要一种规则。而我们把这种规则称为协议

像这样把与互联网相关的协议集合起来总称为TCP/IP

1.3.2 TCP/IP分层管理

分层:应用层、传输层、网络层和数据链路层

分层好处:如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需要将变动的层替换掉就可以。把各层之间的接口部分规划好之后,每个层次内部的设计就能自由改动了。

  1. 应用层:决定了向用户提供应用服务时的通信的活动,HTTP协议处于该层。
  2. 传输层:提供处于网络连接中的两台计算机之间的数据传输。
  3. 网络层:处理在网络上流动的数据包。数据包时网络传输的最小数据单位。
  4. 链路层:用来处理连接网络的硬件部分。

1.3.3 TCP/IP通信传输流

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。

这种把数据信息包装起来的做法称为封装

1.4 与HTTP关系密切的协议:IP、TCP和DNS

1.4.1 负责传输的IP协议(网络层)

IP(Internet Protocol)网络协议。

IP协议作用:把各种数据包传送给对方(网络层)。需要满足两个重要的条件:IP地址和MAC地址

IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。一般情况下,IP地址可变换,但MAC地址基本上不会更改。

ARP是一种以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。

1.4.2 确保可靠的TCP协议(传输层)

TCP,提供①可靠的②字节流服务。

②所谓字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。

①可靠是指能够确认数据最终是否送达到对方。

如何确定数据是否送达呢?答案:三次握手策略。

若在握手过程中,某个阶段莫名终端,TCP协议会再次以相同的顺序发送相同的数据包。

1.4.3 负责域名解析的DNS服务(应用层)

它提供域名到IP地址之间的解析服务。

1.7 URI URL

URI就是某个协议方案表示的资源的定位标识符。URI表示用字符串标识的某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。

二、简单的HTTP协议

2.3 HTTP是不保存状态的协议

也就是说,在HTTP这个级别,协议对于发送过的请求或响应都是不做持久化处理的。

优点:这是为了更快速的处理大量事务,确保协议的可伸缩性。

缺点:比如用户登入到一家网站及时跳转到其他页面也需要保持登入状态。网站为了掌握是谁送出的请求,需要保存用户的状态。

解决:引入了Cookie技术。

2.5 告知服务器意图的HTTP方法

  1. GET:我想访问你的资源。
  2. POST:我想要把这条信息告诉你。
  3. PUT:传输文件(不常用,任何人都可以上传存在安全性问题)
  4. HEAD:获取报文首部,不反悔报文主体。
  5. DELETE:删除文件
  6. OPTIONS:询问支持方法
  7. TRACE:追踪路径,确认连接过程中发生的一系列操作。
  8. CONNECT:要求用隧道协议连接代理。

2.7持久连接节省通信量

背景:HTTP初始版本,每进行一次HTTP通信就要断开一次TCP连接。

例如:在发送请求访问HTML页面资源的同时,也会请求该HTML页面里包含的其他资源。因此,每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。

解决:

  1. 持久连接(旨在建立一次TCP连接后进行多次请求和响应的交互)
  2. 管线化(不用等待响应结束亦可以发送下一个请求)

2.8 Cookie状态管理

三、HTTP报文内的信息

HTTP报文本身是由多行数据构成的字符串文本。

大致分为报文首部和报文主体两块。中间由空行(CR+LF)来划分。并不一定要有报文主题。

3.3编码提升传输速率

3.3.1 报文主体和实体主体的差异

  1. 报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
  2. 实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

HTTP报文的主体用于传输请求或响应的实体主体。

通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

3.3.2 压缩传输的内容编码

HTTP协议中有一种被称为内容编码的功能也能进行类似的操作。内容编码指明在实体内容上的编码格式,并保持实体信息原样压缩。

3.3.3分割发送的分块传输编码

背景:在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求的页面。在传输大容量的数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。

这种把实体主体分块的功能称为分块传输编码

使用分块传输编码的实体主体会由接收的客户端负责解码,回复到编码前的实体主体。

3.4发送多种数据的多部分对象集合。

发送的一份报文主体内可能含有多类型实体。文本,图片、视频等多个不同类型的数据。

多部分对象集合包含的对象如下:

  1. multipart/form-data:在WEB表单文件上传时使用。
  2. multipart/byteranges:状态码位206,响应报文包含了多个范围的内容时使用。

在HTTP报文中使用多部分对象集合,需要在首部字段里加Content-type。

3.5 获取部分内容的范围请求

背景:以前用户不能使用现在这个告诉带宽访问互联网。如果下载过程中遇到网络中断的情况,那就必须重新开始。

解决:需要一种可恢复的机制,所谓恢复是指能从之前下载中断处恢复下载。

3.6 内容协商返回最合适的内容

背景:同一个web网站可能存在多份相同内容的页面,比如英文和中文版的web页面,给他们内容上虽然相同,但使用的语言却不同。当浏览器的默认语言为英文或中文,访问相同的URI的web页面则会显示对应的英语版或中文版的web页面,这样的机制称为内容协商。

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以语言、字符集、编码方式等为基准判断响应的资源。

包含在请求报文中的某些首部字段就是判断的基准:

  1. Accept
  2. Accept-Charset
  3. Accept-Encoding
  4. Accept-Language
  5. Content-Language

四、返回结果的HTTP状态码

  1. 200 OK
  2. 204 请求处理成功,但没有资源可返回
  3. 206 是对资源的范围请求
  4. 301 资源URI已更新(永久重定向)
  5. 302 资源URI已更新(临时重定向)
  6. 303和302类似,但303明确表示客户端应当采用GET方法获取资源
  7. 304 资源已找到但未符合条件请求
  8. 400 报文存在语法错误
  9. 401 发送请求需要由通过HTTP认证的认证信息。
  10. 403 请求资源的访问被服务器拒绝了
  11. 404 服务器上没有请求的资源
  12. 500 内部资源故障
  13. 503 服务器暂时处于超负载或正在停机维护

五、与HTTP协作的Web服务器

5.1单台虚拟主机实现多个域名

可以用一台服务器为多个客户服务,也可以以每位客户持有的域名运行各自不同的网站,这是因为利用了虚拟主机的功能。即使物理层面只有一台服务器,但只要使用了虚拟主机的功能,可以假象已具有多台服务器。

问题:域名通过DNS服务映射到IP地址之后访问目标网站,如果一台服务器托管了两个域名,当收到请求的时候就要分辨究竟是要访问哪两个域名。

解决:在相同的IP地址下,在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI

5.2 通信数据转发程序:代理、网关、隧道

5.2.1 代理

接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

代理不改变请求URL,会直接发送给前方持有资源的目标服务器

优点:利用缓存技术减少网络带宽的流量,组织内部针对特定的网站的访问控制,以获取访问日志为主要目的,等等。

5.2.2 网关

网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就能像自己拥有资源的源服务器一样对请求进行处理。

网关与代理十分相似,网关能使通信线路上的服务器提供非HTTP协议服务

优点:提高通信安全性,因为可以在客户端和网关之间的通信线路上加密以确保连接的安全。另外网关可以连接数据库,使用SQL语句查询数据。

5.2.3隧道

隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

可以使用SSL等加密手段进行通信。

目的就是确保客户端能与服务器进行安全的通信。

5.3 保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问。

优点:减少对源服务器的访问,因此也就节省了通信流量和通信时间。

5.3.1 缓存的有效期限

即使存在缓存,也会因为客户端的要求,缓存的有效期限等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器获取”新“资源。

可以使用SSL等加密手段进行通信。

目的就是确保客户端能与服务器进行安全的通信。

5.3 保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问。

优点:减少对源服务器的访问,因此也就节省了通信流量和通信时间。

5.3.1 缓存的有效期限

即使存在缓存,也会因为客户端的要求,缓存的有效期限等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器获取”新“资源。

图解HTTP(读书笔记01)相关推荐

  1. 独立式环境与宿主式环境————《标准C语言指南》读书笔记01

    独立式环境与宿主式环境----<标准C语言指南>读书笔记01 在编写和转换一个C程序之前,需要考虑它的执行环境,因为这关系到源文件的内容(程序应当如何编写),也关系到转换后的程序能否正常执 ...

  2. 大数据之路读书笔记-01总述

    大数据之路读书笔记-01总述 此系列文章为大数据之路的读书笔记,如侵可删 2014 年,马云提出,"人类正从 IT 时代走向 DT 时代 "如果说IT时代是以自我控制.自我管理为主 ...

  3. 推荐系统实践读书笔记-01好的推荐系统

    推荐系统实践读书笔记-01好的推荐系统 在研究如何设计推荐系统前,了解什么是好的推荐系统至关重要.只有了解了优秀推荐系统的特征,我们才能在设计推荐系统时根据实际情况进行取舍.本章分3个步骤来回答这个问 ...

  4. 图解HTTP读书笔记(十)

    图解HTTP读书笔记(十) Web的攻击技术 HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用资源才是攻击目标. ...

  5. 《深入理解计算机系统》读书笔记-01

    <深入理解计算机系统>读书笔记-01 <深入理解计算机系统(原书第 3 版)> 英文版简称CS: APP 2017 年 12 月第 1 版第 6 次印刷 ISBN 978-7- ...

  6. 正面管教读书笔记 01 正面的方法

    正面管教读书笔记 01 正面的方法 正面管教 作者:简·尼尔森(Jane Nelsen) 第1章 正面的方法 社会的变化造成了孩子的变化 社会进步导致服从和顺从不在重要了 今天的孩子很少有机会培养责任 ...

  7. 《算法图解》读书笔记

    这是一本很入门的算法书,介绍的东西还算简单明了,大体补充了一些自己没理解的东西. 粗略地看了一下,感觉还是"纸上得来终觉浅,绝知此事要躬行!" <<算法图解>&g ...

  8. 《算法图解》读书笔记—像小说一样有趣的算法入门书

    前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...

  9. 《The Art of Readable Code》 读书笔记 01

    放假前在学校图书馆借了一本新书<The Art of Readable Code>,寒假回来看看,写写其中的Key Idea .summary和一些读书笔记. Preface 前言部分主要 ...

  10. 一图讲解一条sql语句的一生——《收获,不止Oracle》的读书笔记01

    其实也是<收获,不止Oracle>的读书笔记之一啦 微信读书可以看,数据库我觉得相通性还是比较大的,不管你用的哪种,都可以学学 难度的话,我才看到2.2 ,觉得本菜鸟还是可以看懂的. 说是 ...

最新文章

  1. 推荐几个好玩又有难度的编程网站
  2. 打开高效文本编辑之门_调用Linux的sed命令
  3. 结合JDK源码看设计模式——桥接模式
  4. Spring boot actuator端点启用和暴露
  5. 谭民机器人_机器人视觉伺服研究进展-中科院自动化所-谭民.
  6. Unicode 属性类
  7. 苹果隐私部门负责人:在iPhone上侧载应用会减少用户选择
  8. 前端,到底什么来路?
  9. 在route-map中使用verify-availability确保路由可用性
  10. QQ 音乐竟然可以免费听歌了,白嫖党的春天来了
  11. 公司项目JAVA开发规范总结(七)——编程规范
  12. ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
  13. 资源小屋(更新ing.......)
  14. 阿里数据服务产品开发及大数据体系(实录/PPT干货)
  15. 浏览器访问服务器的过程
  16. 模板方法设计模式两种实现方案
  17. 搭建SSH,SSZ架构需注意数据库的编码问题
  18. c++项目实习,药店药品管理系统
  19. OPC UA JAVA开发笔记(四):数据写入
  20. CODESYS 赛搏机器智能MIC7001总线控制器+松下A6BE总线驱动器

热门文章

  1. matlab读取视频VideoRead用法
  2. Java框架jboot_Jboot v3.0.3 正式版发布,基于 JFinal 的微服务框架
  3. python打开伪终端_关于 macOS 伪终端(PTY)的学习
  4. React回调函数两种常用方式
  5. log4j不打日志问题之实战解决方案(二)
  6. 纯CSS3模拟iPhone X背景切换动画
  7. 软件测试中的集成测试到底是什么?集成的方法又有哪些?
  8. Python(十三)IO编程
  9. 算法中的数学基础知识
  10. Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)