网络协议笔记(一):HTTP协议基础知识
(一)HTTP协议是什么
1、HTTP协议是超文本传输协议,也就是 HyperText Transfer Protocol。
2、HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。(协议)
3、HTTP是一个在计算机世界里专门用来两点之间传输数据的约定和规范 (传输)
总结:
HTTP是一个在计算机世界两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。 (这里的两点指:1、服务器和服务器之间 2、浏览器和服务器之间)
(二)CDN
浏览器通常不会直接连到服务器,中间会经过“重重关卡”,其中的一个重要角色就叫做 CDN。
CDN,全称是“Content Delivery Network”,翻译过来就是“内容分发网络”。它应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求。
(三)HTML
HTML是HTTP协议传输的主要内容之一,它描述了超文本页面,用各种“标签”定义文字、图片等资源和排版布局,最终由浏览器“渲染”出可视化页面。
(四)Web Service
Web Service 是一种由 W3C 定义的应用服务开发规范,使用 client-server 主从架构,通常使用 WSDL 定义服务接口,使用 HTTP 协议传输 XML 或 SOAP 消息,也就是说,它是一个基于 Web(HTTP)的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。(它是一个基于 Web(HTTP)的服务架构技术)
因为采用了 HTTP 协议传输数据,所以在 Web Service 架构里服务器和客户端可以采用不同的操作系统或编程语言开发。例如服务器端用 Linux+Java,客户端用 Windows+C#,具有跨平台跨语言的优点。
(五)与HTTP相关的协议
1、TCP/IP 协议
TCP/IP 协议实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP 和 IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。
2、DNS
(1)“域名系统”(Domain Name System)用有意义的名字来作为 IP 地址的等价替代。
(2)在DNS中,”域名“又被称为”主机名“(Host)
(3) DNS用.分隔成多个单词,级别从左到右逐级升高,最右边的被称为”顶级域名“。例如:代表商业公司的”com"、表示教育机构的“edu”等。
(4)想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它的真实 IP,这就是所谓的“域名解析”。
3、URI/URL
URI(Uniform Resource Identifier),中文名称是 统一资源标识符,使用它就能够唯一地标记互联网上资源。
URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。
例如:https://www.cnblogs.com/simple-free/p/12901831.html
可以看到,URI 主要有三个基本的部分构成:
(1)、协议名:即访问该资源应当使用的协议,在这里是“https”;
(2)、主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“www.cnblogs.com”;
(3)、路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/simple-free/p/12901831.html”。
4、HTTPS
HTTPS是运行在SSL/TLS协议上的HTTP,相当于“HTTP+SSL/TLS+TCP/IP”
SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为 SSL/TLS,或者直接简称为 SSL。
5、代理
代理(proxy)是HTTP协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。
(六)域名解析
1、com:顶级域名
2、cnblogs:二级域名
3、www:主机名
例如现在要访问 www.cnblogs.com ,域名解析过程为:
1、访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;
2、访问“com”顶级域名服务器,它再告诉你“cnblogs.com ”域名服务器的地址;
3、最后访问“apple.com”域名服务器,就得到了“www.cnblogs.com ”的地址。
DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存;所以更具体的说,域名解析过程应该是:
1、查找浏览器DNS缓存
2、查找操作系统DNS缓存
3、在hosts文件中查找域名记录
4、在一些大公司、网络运营商的DNS缓存中去查找(非权威域名服务器)
5、都不存在再根据上述步骤进行解析
即:浏览器缓存->操作系统dnscache ->hosts文件->非权威域名服务器->根域名服务器->顶级域名服务器->二级域名服务器->权威域名服务器。
(七) 键入网址,按下回车发生了什么
如果网址的主机部分是IP地址:
1、建立与web服务器的TCP连接:浏览器依照TCP协议的规范,使用“三次握手”建立与web服务器的连接 (经过SYN、SYN/ACK、ACK三个包)
2、HTTP协议开始工作:浏览器按照HTTP协议的格式,通过 TCP 发送 HTTP的请求报文
3、WEB服务器回复:在 TCP 协议层面确认:“刚才的报文我已经收到了”,不过这个 TCP 包 HTTP 协议是看不见的。
4、WEB服务器解析报文并回复:
(1)依据HTTP协议的规定,解析报文,看浏览器发送的请求是想做什么
(2)根据请求的需要进行处理,再拼成符合HTTP格式的报文发回给客户端。
5、浏览器回复:浏览器也要给服务器回复一个 TCP 的 ACK 确认,“你的响应报文收到了,多谢”
6、浏览器解析报文:调用JS引擎、排版引擎等进行处理,渲染成我们看到的页面。
如果网址的主机部分是域名:那么就会多一个域名解析过程,根据上面的步骤,找到域名对应的IP地址后,再通过“三次握手”建立TCP连接等等。
(八)HTTP协议报文
1、起始行(start line):描述请求或响应的基本信息;
2、头部字段集合(header):使用 key-value 形式更详细地说明报文;
3、消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。
前两部分起始行和头部字段经常又合称为“请求头”或“响应头”,消息正文又称为“实体”,但与“header”对应,很多时候就直接称为“body”。
HTTP 协议规定报文必须有 header,但可以没有 body,而且在 header 之后必须要有一个“空行”,也就是“CRLF”,十六进制的“0D0A”。
(九)URI的组成
scheme :// host:port path ? query。 例如:https://zzk.cnblogs.com/s?t=b&w=ce
scheme: 协议名或方案名,如HTPP/HTTPS/FTP等
host:port: 资源所在主机名,通常是主机名+端口号
path: 标记资源所在位置
query:多个key=value的格式,以“&”符号连接
(十)HTTP协议请求方法
1、GET:获取资源,可以理解为读取或者下载数据;
2、HEAD:获取资源的元信息;
3、POST:向资源提交数据,相当于写入或上传数据;
4、PUT:类似 POST;
5、DELETE:删除资源;
6、CONNECT:建立特殊的连接隧道;
7、OPTIONS:列出可对资源实行的方法;
8、TRACE:追踪请求 - 响应的传输路径。