万字HTTP学习笔记

*个人学习笔记,如有侵权,请立刻联系删除

计划做得多不如极客上路

老师背景:

罗剑锋(Chrono) 前奇虎360技术专家,Nginx/OpenResty开源项目贡献者

“To Be a HTTP Hero!”

一、破冰篇

01:HTTP前世今生

HTTP关键技术(蒂姆-伯纳斯-李):

  1. URI:统一资源标识符
  2. HTML:超文本标记语言
  3. HTTP:超文本传输协议

HTTP发展历程:

  1. HTTP/0.9
  2. HTTP/1.0(1996)
  3. HTTP/1.1(1999)
  4. HTTP/2(2015)
  5. 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.org” ===> 95.211.80.227),用点号分割,级别从左到右升高,最右为顶级域名。
  • URI(Uniform Resource Identify):统一资源标识符,URL(Uniform Resource Locator)统一资源定位符,是URI的子集,但是差异不大。
    • http://nginx.org/en/download.html
      
      协议名:即访问该资源应当使用的协议,在这里是“http”;
      主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“nginx.org”;
      路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/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 的应用层。

小结:

  1. 七层大学的时候一般是这个样背..“物数网传会表应”。老师将整个网络层具象化到A寄快递给B。A发送的玩具(数据),A来看就是 (装玩具袋)应用层 ->(贴标签)传输层 -> (装上快递小哥的车)网际层 ->(装上通往B城市的大卡车) 连接层 -> B则反之,倒过来直到最后拆出玩具(数据)。 这样的举例加深了我对整个网络模型的印象与理解。
  2. 关于传输层TCP、UDP看了网友的例子,也是很好理解 。TCP属于顺丰,快递必须送到你的手里才行,UDP就想别家快递员,不在家就扔你门口(快递员看到别打我)

课下思考

  • 你能用自己的话解释一下“二层转发”“三层路由”吗?
    • 四层模型中,二层表示网际层路由,三层表示传输层做不了路由,肯定是不符合题意
    • 七层模型中,二层表示数据链路层,三层是网络层。数据链路层表示通过MAC地址来转发,网络层则是通过IP进行路由
  • 你认为上一讲中的 DNS 协议位于哪一层呢?
    • DNS属于代理,只是做域名映射,所以是应用层。
  • 你认为 CDN 工作在那一层呢?
    • CDN也是代理,做内容分发,也在应用层

05:域名里面的门道

域名的形式

“time.geekbang.org”

time:主机名,www(万维网服务)、mail(邮件服务)
geekbang:二级域名
org:顶级域名

域名的和解析

  1. 根域名服务器:返回“com”、“org”、"cn"等顶级域名服务器的IP地址
  2. 顶级域名服务器:返回apple.com各自域名下的权威域名服务器
  3. 权威域名服务器:返回www.apple.com的ip地址

例如要访问“www.apple.com”:

  1. 访问跟根域名服务器告诉你com对应的顶级域名服务器地址
  2. 访问顶级域名服务器的地址返回apple.com对应的权威域名服务器地址
  3. 访问权威域名服务器地址返回www.apple.com的地址

注意:

当全世界的网民都在上网的时候,如果不采取别的手段,也会瘫痪:

  1. 一个是大公司、网络运营商用的代理DNS,简称非权威域名服务器,可以缓存之前查询的结果。
  2. 操作系统对访问过的DNS解析结果做缓存
  3. 主机映射 Linux在“/etc/hosts ”而Windows在“C:\WINDOWS\system32\drivers\etc\hosts”中配置,操作系统找不到DNS记录,会在这里找

域名的“新玩法”

  • 重定向,用新IP地址的机器顶替旧服务,域名不变,对外访问也不变,无感替换
  • 内部DNS,用域名来标记内部服务,无需写死IP
  • 负载均衡,一个是返回多个IP地址,用于前端在判断(之前公司用过ping)那个连接好用哪个访问。二是通过内部策略,直接给客户端分配最近的主机。

课后思考

Q1:在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在.com”,试着解释一下它的 DNS 解析过程。

A: 前面提过,域名解析的过程是“自顶向下”,并且本地计算机、附近的DNS也会做缓存。所以解析过程是(发起访问"www.不存在.com" --> 操作系统找缓存 --> hosts文件映射 --> 内部DNS缓存(如果有) --> 网络运营商DNS缓存(非核心?) --> 根域名服务器 --> 顶级域名服务器(有继续,没有就返回) --> 权威域名服务器(同理) )

Q2:如果因为某些原因,DNS 失效或者出错了,会出现什么后果?

A:由A1得知,这个问题需要分析,本地是否由缓存,如果有,则无需转发至DNS,如果没有,返回错误

评论区补充发现:

  1. 查找是基于UDP协议查找的
  2. ISP(Internet Service Provider)网络服务提供商、DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
  3. 返回多个DNS,我发现有“8.8.8.8”和“114.114.114” windows 使用“ipconfig /all”
  4. 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.com

先讲两个访问方法的相同点:

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表示结束。

抽象图如下:

以上值得注意的是:

  1. 字段不分大小写,但是最好用首字母大写;
  2. 字段不允许出现空格,但是可以出现“-”,不能用下划线;
  3. 字段名后面必须紧跟着”:”不能有空格,“:”后面可以用多个空格;
  4. 没有顺序可言
  5. 字段原则上不允许有重复,除非特殊,例如Set-Cookie

不同之处:

1、请求报文的起始行叫请求行,响应报文的起始行叫状态行,两者抽象结构如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值