admin 管理员组文章数量: 887017
*个人学习笔记,如有侵权,请立刻联系删除
计划做得多不如极客上路
老师背景:
罗剑锋(Chrono) 前奇虎360技术专家,Nginx/OpenResty开源项目贡献者
“To Be a HTTP Hero!”
一、破冰篇
01:HTTP前世今生
HTTP关键技术(蒂姆-伯纳斯-李):
- URI:统一资源标识符
- HTML:超文本标记语言
- HTTP:超文本传输协议
HTTP发展历程:
- HTTP/0.9
- HTTP/1.0(1996)
- HTTP/1.1(1999)
- HTTP/2(2015)
- HTTP/3(基于Google QUIC未来的发展方向)
02: HTTP是什么,不是什么
HTTP (HYPERText Transfer Protocol超文本传输协议) = 超文本 + 传输 + 协议
超文本:文本属于线性,超文本包括图片视频音频超链接等等,是非线性的网状结构关系
传输:搬运工,从A - > B 或者从A - > B - > C,HTTP是双向的
协议:一个或者多个的双方约定
HTTP是什么:
“HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范”。
HTTP不是什么:
HTTP不是互联网、不是编程语言、不是应用、HTTP更加不是一个孤立的协议。
在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。
小结:
HTTP 是一个用在计算机世界里的协议,它确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。HTTP 专门用来在两点之间传输数据,不能用于广播、寻址或路由。HTTP 传输的是文字、图片、音频、视频等超文本数据。HTTP 是构建互联网的重要基础技术,它没有实体,依赖许多其他的技术来实现,但同时许多技术也都依赖于它。
03:与HTTP相关的各种概念
1:上集
浏览器(B): chrome
服务器(Web Server):Apache、...
CDN(Content Diliver xxx):内容分发网络
2:下集
- TCP/IP : IP(Internet Protocol)协议负责寻址,TCP(Transmission Control Protocol)协议负责通讯
- DNS:域名系统(Domain Name System)用来做域名映射(“nginx” ===> 95.211.80.227),用点号分割,级别从左到右升高,最右为顶级域名。
- URI(Uniform Resource Identify):统一资源标识符,URL(Uniform Resource Locator)统一资源定位符,是URI的子集,但是差异不大。
-
http://nginx/en/download.html 协议名:即访问该资源应当使用的协议,在这里是“http”; 主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“nginx”; 路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/en/download.html”。
-
- HTTPS(HTTP over SSL/TLS):SSL(Secure Socket Layer) =改名=> TLS(Transport Layer Security)
- 代理(Proxy):常见的代理种类有
- 匿名代理 - 外界只看到代理
- 透明代理 - 顾名思义
- 正向代理 - 靠近客户端,代表客户端向服务器发请求
- 反向代理 - 靠近服务端,代表服务器响应客户端
- 课后思考:
- Q:DNS 与 URI 有什么关系?
- A:DNS 做域名映射找到对应的地址,URI由 协议名+ 主机名+ 路径,DNS通过主机名找到地址,URI访问到具体的路径
- Q:在讲代理时我特意没有举例说明,你能够用引入一个“小强”的角色,通过打电话来比喻一下吗?
- A: 正向代理:我用小明的电话打电话给小强。反向代理:我打给小明找到小强
04:“四层”、“七层”是什么
TCP/IP网络分层
- 第一层:链接层(Link Layer),负责在以太网、WIFI这样得底层网络上发送原始数据包,MAC工作的地方
- 第二层:网际层(Internet Layer),IP就在这里工作
- 第三层:传输层(Transport Layer),保证数据“可靠”地传输。TCP、UDP就在这一层工作的,他们的区别是,TCP可靠、连续字节流、有先后顺序,UDP则是分散的数据包,顺序阀,乱序收,不保证一定到达
- 第四层:应用层(Application Layer),Telnet、SSH、FTP、SMTP、HTTP就在这一层,MAC层传输单位是帧,IP层传输的是包,TCP传输单位是段,HTTP传输单位是消息或者报文
OSI网络分层模型
- 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
- 第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
- 第三层:网络层,相当于 TCP/IP 里的网际层;
- 第四层:传输层,相当于 TCP/IP 里的传输层;
- 第五层:会话层,维护网络中的连接状态,即保持会话和同步;
- 第六层:表示层,把数据转换为合适、可理解的语法和语义;
- 第七层:应用层,面向具体的应用传输数据。
两个模型的映射关系
-
第一层:物理层,TCP/IP 里无对应;
-
第二层:数据链路层,对应 TCP/IP 的链接层;
-
第三层:网络层,对应 TCP/IP 的网际层;
-
第四层:传输层,对应 TCP/IP 的传输层;
-
第五、六、七层:统一对应到 TCP/IP 的应用层。
小结:
- 七层大学的时候一般是这个样背..“物数网传会表应”。老师将整个网络层具象化到A寄快递给B。A发送的玩具(数据),A来看就是 (装玩具袋)应用层 ->(贴标签)传输层 -> (装上快递小哥的车)网际层 ->(装上通往B城市的大卡车) 连接层 -> B则反之,倒过来直到最后拆出玩具(数据)。 这样的举例加深了我对整个网络模型的印象与理解。
- 关于传输层TCP、UDP看了网友的例子,也是很好理解 。TCP属于顺丰,快递必须送到你的手里才行,UDP就想别家快递员,不在家就扔你门口(快递员看到别打我)
课下思考
- 你能用自己的话解释一下“二层转发”“三层路由”吗?
- 四层模型中,二层表示网际层路由,三层表示传输层做不了路由,肯定是不符合题意
- 七层模型中,二层表示数据链路层,三层是网络层。数据链路层表示通过MAC地址来转发,网络层则是通过IP进行路由
- 你认为上一讲中的 DNS 协议位于哪一层呢?
- DNS属于代理,只是做域名映射,所以是应用层。
- 你认为 CDN 工作在那一层呢?
- CDN也是代理,做内容分发,也在应用层
05:域名里面的门道
域名的形式
“time.geekbang”
time:主机名,www(万维网服务)、mail(邮件服务)
geekbang:二级域名
org:顶级域名
域名的和解析
- 根域名服务器:返回“com”、“org”、"cn"等顶级域名服务器的IP地址
- 顶级域名服务器:返回apple各自域名下的权威域名服务器
- 权威域名服务器:返回www.apple的ip地址
例如要访问“www.apple”:
- 访问跟根域名服务器告诉你com对应的顶级域名服务器地址
- 访问顶级域名服务器的地址返回apple对应的权威域名服务器地址
- 访问权威域名服务器地址返回www.apple的地址
注意:
当全世界的网民都在上网的时候,如果不采取别的手段,也会瘫痪:
- 一个是大公司、网络运营商用的代理DNS,简称非权威域名服务器,可以缓存之前查询的结果。
- 操作系统对访问过的DNS解析结果做缓存
- 主机映射 Linux在“/etc/hosts ”而Windows在“C:\WINDOWS\system32\drivers\etc\hosts”中配置,操作系统找不到DNS记录,会在这里找
域名的“新玩法”
- 重定向,用新IP地址的机器顶替旧服务,域名不变,对外访问也不变,无感替换
- 内部DNS,用域名来标记内部服务,无需写死IP
- 负载均衡,一个是返回多个IP地址,用于前端在判断(之前公司用过ping)那个连接好用哪个访问。二是通过内部策略,直接给客户端分配最近的主机。
课后思考
Q1:在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在”,试着解释一下它的 DNS 解析过程。
A: 前面提过,域名解析的过程是“自顶向下”,并且本地计算机、附近的DNS也会做缓存。所以解析过程是(发起访问"www.不存在" --> 操作系统找缓存 --> hosts文件映射 --> 内部DNS缓存(如果有) --> 网络运营商DNS缓存(非核心?) --> 根域名服务器 --> 顶级域名服务器(有继续,没有就返回) --> 权威域名服务器(同理) )
Q2:如果因为某些原因,DNS 失效或者出错了,会出现什么后果?
A:由A1得知,这个问题需要分析,本地是否由缓存,如果有,则无需转发至DNS,如果没有,返回错误
评论区补充发现:
- 查找是基于UDP协议查找的
- ISP(Internet Service Provider)网络服务提供商、DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
- 返回多个DNS,我发现有“8.8.8.8”和“114.114.114” windows 使用“ipconfig /all”
- A1上面少了一层浏览器缓存
06: 自己动手,搭建HTTP实验环境
“最小化”环境用到的应用软件:
Wireshark
Chrome/Firefox
Telnet
OpenResty
以下是部署的问题:
1、http_study已解压,openresty也在http_study目录下,http_study也在openresty下,但在http_study\www\start运行后提示windows找不到文件..\openresty\nginx
A: 问题本质,就是在运行自己写的Windows批脚本不要用管理员身份运行,运行路径会变为C:\System32,此时../openXXX就找不到了,如果非要,notepad改start改绝对路径。
2、Nginx 错误10013: An attempt was made to access a socket in a way forbidden by its access permissions
A: 1:netstat -aon | findstr :80 or 443(https)//找到端口占用情况 tasklist|findstr "进程号" //占用端口服务 ,任务管理器关掉服务
二、基础篇
01| 一次浏览器的访问流程
访问IP www.127.0.0.1/
访问域名 http://www.chrono
先讲两个访问方法的相同点:
1、浏览器通过URI、端口号,和Web服务器建立TCP连接,当然要三次握手,HTTP就可以干活了
2、然后Browser发送一条HTTP/1.1协议
3、然后回WebServer会返回一个HTTP/1.1 200 OK
4、浏览器ACK WebServer走的是UDP协议(这里没抓)
5、Browser解析HTML文件
区别:
1、通过域名访问的,需要访问一遍自己的缓存 + hots文件,最后才去DNS取
02| HTTP报文拆解
| 组成HTTP报文的结构分为三大类:
- 起始行(start line):描述报文的基本信息
- 头部字段集合(header):key-value形式 ,里面有许多报文的信息
- 消息正文(body):实际传输的东西,不一定是文本,可能是图片音频等二进制
- HTTP协议中,必须要有header,可以没有body,并且header之后必须有“空行”,就是“CRLF”,十六进制为“0D0A”
来看看实际报文结构:
抽象后的报文:
| 报文又分为以下两种:
HTTP报文又分为两种,一中是请求报文,一种是响应报文。他们有相同的地方,也有不同的地方。
相同点:
1、都有起始行、头部字段,都是CRLF表示结束。
抽象图如下&
版权声明:本文标题:万字HTTP学习笔记 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729143824h1323295.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论