前言
因在之前的学习中从未系统的学习过HTTP相关的理论,对于很多HTTP相关的概念都特别的模糊,网上查资料也总是一知半解,时间长了捡了这又忘了那,所以在此记录一下学习笔记和学习方法,结合一点点背书的技巧来协助理解和记忆,避免学完就忘。
各篇章笔记链接
极客HTTP协议学习笔记破冰篇(1-7)
极客HTTP协议学习笔记基础篇(8-14)
极客HTTP协议学习笔记进阶篇(15-22)
极客HTTP协议学习笔记安全篇(23-29)
极客HTTP协议学习笔记飞翔篇(30-33)-更新中
极客HTTP协议学习笔记探索篇(34-38)-未开始
极客HTTP协议学习笔记总结篇(39-40)-未开始
课程来源打在文末,需要的小伙伴自取,推荐阅读原文,不想付费学习的话也可以参考学习笔记,欢迎交流。
一、学习笔记
1、HTTP的前世今生
- 1989年,蒂姆·伯纳斯 - 李 发表论文,提出在互联网上构建超链接文档系统的构想,并确立三大核心技术:URI,HTTP,HTML,蒂姆把这个系统成为万维网(World Wide Web),HTTP诞生
- 90年代初使用的第一版HTTP被定义为0.9版,这时的HTTP是纯文本格式且只可以读不可以写,只能发送GET请求,服务器响应后自动关闭连接
- 1996年 HTTP/1.0版本正式发布,这时的HTTP/1.0不是一份标准,没有实际的约束力,增加了HEAD,POST等新方法,响应码,协议版本号,HTTP Header,传输数据也随着多媒体技术的发展而不再限制于文本,形式上接近于现在普及的HTTP/1.1
- 1999年HTTP/1.1发布RFC文档,它是一个正式的标准,具有实际的约束力,相较于HTTP/1.0,它做了小幅的优化,增加了PUT,DELETE等新方法,缓存管理和控制,明确了连接管理,允许持久连接,允许响应数据分块,强制要求Host头,2014年修订过一次,但无实际改动
- 随着互联网的不断发展,HTTP/1.1连接慢的问题显现,Google开发自家浏览器Chrome,然后推出新的SPDY协议,最终在2015年发布了HTTP/2,相较于HTTP/1.1,HTTP/2不再是纯文本,可以发起多个请求,使用算法压缩头部,允许服务器主动向客户端推送数据,要求加密通信,这一阶段HTTP的性能得到改善,但现在还未普及
- HTTP/2 处于草案期间,Google又发明了一个新的协议,QUIC,于2018年,HTTP over QUIC 更名为HTTP/3
2、HTTP是什么
- 协议 HTTP是一个应用在计算机世界中的协议。它用计算机可以理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式
- 传输 HTTP是在计算机世界里专门用来传输数据的约定和规范(所谓传输,是双向的)
- 超文本 超越普通文本的文本,它可以是文字、图片、音频、视频等混合体,含有超链接,可以从一个文本跳到另一个文本
总结:
HTTP是计算机世界,用于在两点之间传输文字,图片,音频,视频等超文本数据的约定和规范。
HTTP不是一个孤立的协议,通常跑在TCP/IP协议栈之上,依靠IP协议来实现寻址和路由,TCP来实现可靠传输,DNS协议实现域名查找,SSL/TLS 协议实现安全通信等,这些协议共同构造了协议网,而HTTP则处于中心地位。
3、与HTTP相关的各种概念(上)
互联网 互联网像是由数不清的大小岛屿组成的“千岛之国”
浏览器(Web Browser) 查看互联网上资源的应用程序。在HTTP协议里,浏览器的角色被称为“User Agent”,即用户代理,意思是作为访问者的“代理”来发起HTTP请求。也称为客户端。
Web服务器(Web Server) HTTP协议的应答方,有两个层面的含义:硬件和软件。硬件含义指物理形式或“云”形式的机器。软件含义指提供Web服务的应用程序,通常运行在硬件含义的服务器上,利用硬件性能相应客户端HTTP请求,或者把请求转发给Tomcat等业务应用返回动态信息。
CDN(Content Delivery NetWork) 内容分发网络,它应用HTTP协议里的缓存和代理技术,代替源站响应客户端的请求。除了基本的网络加速外还提供负载均衡,全防护,边缘计算,跨运营商网络等功能,可以成倍放大源服务器的服务能力
爬虫(Crawler) 是一种可以自动访问Web资源的应用程序,爬虫的基本技术:HTTP,HTML
Web Service 是一种W3C定义的应用服务开发规范,使用client-server主从架构,通过使用WSDL定义服务接口,使用HTTP协议传输XML或SOAP消息,是一个基于Web(HTTP)的服务架构技术
WAF 网络应用防火墙,是应用层面的防火墙,可以阻止SQL注入,跨站脚本攻击,可以完全集成进Apache或Nginx.
4、与HTTP相关的各种概念(下)
TCP/IP 一系列网络通信协议的统称,除了TCP,IP协议,还有UDP,ARP,ICMP等,共同构成一个复杂但有层次的协议栈。
IP(Internet Protocol) 主要目的是解决寻址和路由的问题,以及如何在两点之间传输数据包。
TCP(Transmission Control Protocol) 传输控制协议,它位于IP协议之上,基于IP协议提供可靠的,字节流形式的通信,是HTTP协议得以实现的基础。 可靠是指数据不丢失,字节流是指保证数据完整性。HTTP 可以更准确称为“ HTTP over TCP/IP”
DNS(Domain Name System) 域名系统,域名又称为主机名,使用".“分隔成多个单词,从左到右级别逐渐升高,最右边的称为顶级域名
域名解析 把域名解析为真实IP的过程
URI(Uniform Resource Identifier) 统一资源标识符,用于唯一标识互联网上的资源。由协议名,主机名,资源路径组成
URL(Uniform Resource Locator) 统一资源定位符,URI的一个子集,俗称“网址”
HTTPS 全称"HTTP over SSL/TLS”,也就是运行在SSL/TLS协议上的HTTP
SSL/TLS 一个负责加密通信的安全协议(在传输层加密)
SSL(Secure Socket Layer) 安全套接层协议,使用了许多密码学最先进的研究成果,综合了对称加密,非对称加密,摘要算法,数字签名等技术,能够在不安全的环境中为通信的双方创建一个秘密的,安全的传输通道。
TLS(Transport Layer Security) 安全传输层协议,SSL发展到3.0时被标准化,标准化的SSL就成为TLS。
代理 是HTTP协议中请求方和应答方中间的一个环节,可以转发客户端的请求也可以转发服务端的请求,分为匿名代理,透明代理,正向代理,反向代理,代理的作用:负载均衡、安全防护、内容缓存,数据处理
5、常说的“四层”,“七层”网络分层怎么理解
- 分层:把复杂的网络通信划分成多个层次,每一层负责不通的职责,层内只专心做自己的事情。
- TCP/IP 网络分层模型:
- 链路层(MAC层):负责在以太网,WiFi这样的底层网络上发送原始数据包,工作在网卡层次。
- 网际层(网络互联层):IP协议所在层,用IP地址取代MAC地址,把局域网,广域网连接成一个巨大的虚拟网络,在网络里找设备需要把IP地址“翻译成”MAC地址
- 传输层:这层协议职责是保证数据再IP地址两点之间“可靠”的传输,是TCP和UDP所在的层次(TCP是有状态的协议,需要先建立连接才能发送数,保证数据不重复不丢失,UDP是无状态的,不用事先建立连接,不保证数据一定发送到对方,TPC是连续的“字节流”,先后有序,UDP是分散的小数据包,顺序发,乱序收)
- 应用层:有应用各种应用的协议,如Telnet,SSH,FTP,SMTP,HTTP
- MAC层传输单位是帧,IP传输单位是包,TCP传输单位是段,HTTP传输单位是消息或报文,统称数据包
- OSI网络分层模型(Open System Interconnection Reference Model):开放式系统互联通信参考模型
- 第一层:物理层,网络的物理形式
- 第二层:数据链路层,基本相当于TCP/IP的链路层
- 第三层:网络层,相当于TCP/IP的网际层
- 第四层:传输层,相当于TCP/IP的传输层
- 第五层:会话层,维持网络中的连接状态,保持会话与同步
- 第六层:表示层,把数据转换为合适可理解的语法和语义
- 第七层:应用层,面向具体的应用传输数据
- 四层负载均衡:基于TCP/IP,例如基于IP地址,端口号等对后端服务器的负载均衡
- 七层负载均衡:基于应用层,例如HTTP协议,基于HTTP里头的URI,应用名,资源类型,再应用适当的策略转发给后端服务器。
TCP/IP协议栈的工作方式
HTTP传输的过程就是通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包再发送出去;接收数据则是,从下往上穿过协议层,层层拆包,每层去掉专有头,上层就会拿到自己的数据。HTTP下层的协议对于HTTP来说是不可见的。
6、域名里的门道
- DNS的核心系统是一个三层树状、分布式服务,基本对应域名的结构:
- 根域名服务器:管理顶级域名
- 顶级域名服务器:管理各自域下的权威域名服务器
- 权威域名服务器:管理自己域名下主机的IP地址
操作系统做域名解析,首先在缓存里找,其次再hosts文件里找,找不到再去访问DNS,如果是在浏览器中访问网址,域名解析会在去操作系统缓存查找之前,先去浏览器缓存中查找
域名可以解决的问题:
1、“重定向”,因为域名代替了ip地址,所以如果需要更换特定域名的ip机器,可以修改DNS记录,让域名指向其他机器
2、可以做基于域名的负载均衡,域名解析可以返回多个ip地址,一个域名可以对应多台主机
可能产生的问题
1、域名屏蔽:直接不解析导致拿不到ip地址
2、域名劫持,解析成错误的ip地址
7、搭建HTTP实验环境
- 用到的软件:
- Wireshark: 网络抓包工具
- Chorme: 浏览器
- Telnet:经典的虚拟终端,基于TCP协议登录主机
- OpenResty:基于Nginx的一个强化包
二、灵魂拷问,你记住知识点了吗?
1、HTTP的前世今生
1、请描述一下HTTP发展的几个主要节点(什么时间?谁干了什么事?/发生了什么事?)
答:1989年HTTP诞生;90年代初的版本定为HTTP/0.9版;1996年推出HTTP/1.0,但这个只是参考不是标准;1999年HTTP/1.1发布,这一版是现在广泛应用的一版,是一个正式的标准;2014年Google基于SPDY协议推出HTTP/2.0,性能提升但未普及;2018年Google基于的QUIC协议进入HTTP/3.0标准制定阶段
2、怎么理解HTTP
答:超文本传输协议,是互联网上基于传输超文本互相沟通的一个协议。
2、HTTP是什么
1、简单讲解一下HTTP的概念
2、简单解释一下HTML
答:HTML是超文本标记语言,它是超文本的载体,可以使用各种标签来描述文字,图片,音频,视频,超链接等资源,可以迁入CSS,JS等技术来实现复杂的效果。
3、与HTTP相关的各种概念(上)
1、简要的解释一下以下概念:
互联网、浏览器、Web服务器、CDN、爬虫、Web Service、WAF
4、与HTTP相关的各种概念(下)
1、简要的解释一下以下概念:
TCP/IP、IP、TCP、DNS、域名解析、URI、URL、HTTPS、SSL/TLS
SSL、TLS
2、代理是什么?代理分哪几种?代理的基本作用
5、常说的“四层”,“七层”网络分层怎么理解
6、域名里的门道
7、搭建HTTP实验环境
8、浏览器键入网址再回车,发生了什么
1、简要叙述一下这次最简单的浏览器 HTTP 请求过程
答:首先浏览器用键入的网址做域名解析,解析出真实IP和端口(解析流程参照第六讲);
然后浏览器用TCP三次握手建立连接;浏览器向服务器发送拼接好的报文;服务器接收到报文后,同样拼好报文给到客户端;浏览器解析报文,渲染页面(因Http/1.1默认是长连接,所以如果继续发送请求未超时的前提下不会重新建立连接,如果使用Chrome来测试,会发现请求http://127.0.0.1时,会有两个端口去建立TCP连接,因为Chrome是最多允许对同一个域名Host建立6个TCP连接的,不同浏览器有差异,在wireshark捕获的14个请求里,可以发现其实是有两次三次握手的过程的,但观察连接的端口可以发现其实只用到了一个,一个是访问网址栏里的url,一个是访问网站的默认图标,并发建立两个TCP连接,其中一个连接上之后,后一个会基于已经建连的TCP进行传输,也就是后面说的17讲里面讲到的长连接)
2、你能试着解释一下在浏览器里点击页面链接后发生了哪些事情吗?
答:如果域名相同,且连接没有超时,则不会重新建立连接,直接发送请求,如果超时,则需要重新经过 DNS解析拿到真实IP和端口,TCP三次握手建立连接,浏览器发送请求,服务器接收请求进行相应,浏览器接收服务器响应渲染页面。
3、这一节课里讲的都是正常的请求处理流程,如果是一个不存在的域名,那么浏览器的工作流程会是怎么样的呢?
答:首先还是进行DNS域名解析,依次从浏览器缓存,操作系统缓存,操作系统hosts文件,本地DNS,根DNS,顶级DNS,权威DNS,CDN,如果还没有查到,浏览器会显示“找不到XXXXX的服务器 IP 地址”,而终止请求。
11、正确的网址
1、简单解释一下什么是URI
答:
2、URI的基本组成部分
12、正确使用相应状态码
1、给出状态码的范围,状态码分成哪五大类
2、简单解释一下以下状态码
101,200,204,206,301,302,304,400,403,404,500,501,502,503
13、HTTP有哪些特点
14、HTTP的优缺点
20、HTTP的缓存控制
- 比较Cache和Cookie的异同
- 即使有“Last-modified”和“ETag”,强制刷新(Ctrl+F5)也能够从服务器获取最新数据(返回 200 而不是 304),请你在实验环境里试一下,观察请求头和响应头,解释原因
1、cookie主要用于保存会话状态,会作为字段发送给服务端,用于身份认证。而cache是整个资源,也就是整个报文,不作为字段,但是要使用缓存需要设置相应字段。
2、强制刷新后:Cache-Control:no-cache,且没有If-None-Match和If-Modified-Since字段,这样就不能命中缓存了,所以会返回200;而普通刷新有这些字段,Cache-Control为max-age=0,存在If-None-Match或If-Modified-Since字段,根据情况使用强缓存协商缓存。