学习记录——Http协议(二)
一、学习总结
- 第八章:键入网址再按下回车,后面究竟发生了什么?
- 使用 IP 地址访问 Web 服务器
- 浏览器访问127.0.0.1
- 浏览器和服务器使用“三次握手”建立 TCP 连接,经过 SYN、SYN/ACK、ACK 的三个包之后,浏览器与服务器的 TCP 连接就建立起来了。
-
浏览器按照 HTTP 协议规定的格式,通过 TCP 发送了一个“GET / HTTP/1.1”请求报文。
-
Web 服务器回复了第五个包,在 TCP 协议层面确认
-
服务器处理完后,通过TCP发送了一个“HTTP/1.1 200 OK“响应报文,第六个包。
-
浏览器给服务器回复一个 TCP 的 ACK 确认,第七个包。
-
后面就是浏览器自带的“favicon.ico”、和长链接默认不会立即关闭连接。
-
关闭链接的“四次握手”,经过FIN、ACK、FIN、ACK的四个包之后浏览器与服务器的 TCP 连接就断开了。
-
使用域名访问 Web 服务器
-
浏览器访问http://www.chrono.com
-
先到浏览器缓存中寻找解析文件,如果没有就到本机域名解析文件 hosts、还没有就要用 DNS 协议开始从操作系统、本地 DNS、根 DNS、顶级 DNS、权威 DNS 的层层解析,拿到IP。
-
如果获取的是静态文件,可能存在CDN。DNS 解析可能会给出 CDN 服务器的 IP 地址,这样你拿到的就会是 CDN 服务器而不是目标网站的实际地址。
-
如果需要加载的是”动态资源“。于是你发出的 HTTP 请求就要开始在互联网上的“漫长跋涉”,经过无数的路由器、网关、代理,最后到达目的地。
-
网站服务器架构可能是单台,也有可能是集群。通常在入口是负载均衡设备,例如四层的 LVS 或者七层的 Nginx,在后面是许多的服务器,构成一个更强更稳定的集群。
-
服务器中可能存在缓存服务器。通常有 memory 级缓存 Redis 和 disk 级缓 存 Varnish,它们的作用与 CDN 类似。
-
如果没有命中缓存,就要程序去计算了。然后获取到的数据原路返回。
-
- 第九章:HTTP报文是什么样子的?
- 实际要传输的数据之前附加了一个 20 字节的头部数据,存储 TCP 协议必须的额外信息,例如发送方的端口号、接收方的端口号、包序号、标志位等等。
- HTTP 协议的请求报文和响应报文的结构基本相同,包括:起始行、头部字段集合、空行、消息正文
- 请求行由三部分构成:请求方法、请求目标、版本号。例如:GET / HTTP/1.1
- 状态行同样也是由三部分构成:版本号、状态码、原因。例如:HTTP/1.1 200 ok
-
头部字段可以分为四类:通用字段头、请求字段头、响应字段头、实体字段
-
Host字段,属于请求字段,只能出现在请求头里。Host 字段告诉服务器这个请求应该由哪个主机来处理
-
User-Agent字段,属于请求字段。它使用一个 字符串来描述发起 HTTP 请求的客户端
-
Date字段,通常在响应头。它表示HTTP报文创建时间
-
Server字段,是响应字段。它告诉客户 端当前正在提供 Web 服务的软件名称和版本号
-
Content-Length 是表示报文body的长度
- 第十章:应该如何理解请求方法?
-
GET:获取资源,可以理解为读取或者下载数据
-
HEAD:获取资源的元信息
-
POST:向资源提交数据,相当于写入或上传数据
-
PUT:类似 POST
-
DELETE:删除资源
-
CONNECT:建立特殊的连接隧道
-
OPTIONS:列出可对资源实行的方法; 8. TRACE:追踪请求 - 响应的传输路径。
-
GET 和 HEAD 方法是“安全”的,因 为它们是“只读”操作
-
GET 和 HEAD 既是安全的也是幂等的,DELETE 可以多次删除同一个资源,效果都是“资源不存在”,所以 也是幂等的。PUT也是幂等的。
-
- 第十一章:你能写出正确的网址吗?
-
URI 是用来唯一标记服务器上资源的一个字符串,通常也 称为 URL;
-
URI 通常由 scheme、host:port、path 和 query 四个部 分组成,有的可以省略;
-
scheme 叫“方案名”或者“协议名”,表示资源应该使 用哪种协议来访问;
-
“host:port”表示资源所在的主机名和端口号;
-
path 标记资源所在的位置;
-
query 表示对资源附加的额外要求;
-
在 URI 里对“@&/”等特殊字符和汉字必须要做编码,否则服务器收到 HTTP 报文后会无法正确处理。
-
- 第十二章:响应状态码该怎么用?
- 全部状态码
- 状态码分为5类:
- 1××:提示信息,表示目前是协议处理的中间状态,还需 要后续的操作;
-
2××:成功,报文已经收到并被正确处理;
-
3××:重定向,资源位置发生变动,需要客户端重新发送请求;
-
4××:客户端错误,请求报文有误,服务器无法处理;
-
5××:服务器错误,服务器在处理请求时内部发生了错误。
- 第十三章:HTTP有哪些特点?
-
HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;
-
HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;
-
HTTP 是应用层协议,比 FTP、SSH 等更通用功能更多,能够传输任意数据;
-
HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;
-
HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。
-
如果要100%保证数据收发成功就不能使用HTTP或者TCP协议了,而是要使用各种消息中间件(MQ),如kafka、RabbitMQ等
-
- 第十四章:HTTP有哪些优点?又有哪些缺点?
-
HTTP 最大的优点是简单、灵活和易于扩展;
-
HTTP 拥有成熟的软硬件环境,应用的非常广泛,是互联网的基础设施;
-
HTTP 是无状态的,可以轻松实现集群化,扩展性能,但有时也需要用 Cookie 技术来实
现“有状态”;
-
HTTP 是明文传输,数据完全肉眼可见,能够方便地研究分析,但也容易被窃听;
-
HTTP 是不安全的,无法验证通信双方的身份,也不能判断报文是否被窜改;
-
HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。
-