我们在浏览器中输入www.baidu.com,点击回车,百度的网页就会出现在浏览器中。这个过程中涉及了很多计算机网络的知识点:万维网、域名和域名解析、统一资源定位符(URL)、TCP协议、HTTP协议、超文本标记语言HTML、HTTP2.0、HTTPS等。下面我们一个一个来学习这些名词。
万维网
万维网并非某种特殊的计算机网络,万维网是一个大规模的、连机式的信息存储场所。万维网存在着众多存储信息的站点,通过和这些站点通信可以获取其中的内容。
万维网以客户端/服务器方式工作,客户端通过TCP/IP协议与服务器进行通信。
站点中存储的是超媒体信息,包含文字、图片、音频、视频文件等。
万维网中存在众多的信息,通过统一资源定位符URL来标识每一条信息。通过超文本传输协议来传输信息。
域名与域名解析
因特网在通信时使用IP地址来进行寻址。但是32位的IP地址不容易人们记忆,通过设计容易记忆的域名来方便实用,并且在域名和IP地址之间建立映射来完成域名到IP地址的转换。
因特网域名采用树状结构命名。
image.png
域名的结构由标号序列组成,各标号之间用点隔开。
image.png
域名服务器保存域名到IP地址的映射,通过域名解析协议完成域名到IP地址的解析。
域名服务器也是树状连接,通过逐层查找完成域名协议。
image.png
统一资源定位符URL
万维网上有大量的信息,通过怎样的方法来访问到需要的信息呢?
万维网使用统一资源定位符URL来标志万维网上的各种文档,并使每一个文档在整个因特网上具有唯一的标识符/URL。
URL的一般形式由以下四个部分组成:
<协议>://<主机>:<端口号>/<路径>
比如:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
上面的URL中,使用的协议使HTTP协议,主机的域名是www.aspxfans.com,端口号是8080,路径是news/index.asp?boardID=5&ID=24618&page=1#name。
从域名后面的最后一个/到?是文件名部分。
从?到#是参数部分,通过键值对显示,以&分割。
#后面是锚部分。
TCP协议
TCP是面向连接的运输层协议,TCP提供可靠的、全双工的、面向字节流的通信服务。TCP使用连续停止等待方法实现可靠传输,使用流量控制(接收端控制发送窗口),通过慢开始、拥塞避免、快重传、快恢复来实现拥塞控制。
Http协议
HTTP协议定义了浏览器怎样向万维网请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是面向事物的应用层协议,他是万维网上能够可靠地交换文件的重要基础。
每个万维网网点都有一个服务器进程,它不断监听TCP的端口80,以便发现是否有浏览器向他发出连接请求。一旦监听到连接请求并建立了TCP连接,浏览器就向万维网服务器会浏览某个页面的请求,服务器返回请求的页面作为响应。在浏览器和服务器之间的请求和相应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是超文本传输协议HTTP。
HTTP请求报文
客户端发送的一个HTTP请求消息由请求行、请求头、空行、请求数据四个部分组成。
image.png
以下面一个GET请求为例,分析请求报文
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
第一部分:请求行,由请求类型,请求文件,HTTP版本组成
第二部分:请求头,紧接着请求头,保存附加信息,如Host(主机号),User-Agent(用户代理,向服务器提供所使用的浏览器版本,操作系统,浏览器内核等信息),Accept(浏览器希望服务器返回的数据格式),Content-Type(发送端发送的实体数据的数据类型),Accept-Encoding(希望的编码方式)
第三部分:空行,即使第四部分为空,请求头后面也必须有空行
第四部分:请求数据,可以为空
HTTP响应报文
服务端返回给客户端的相应报文分为三个部分:状态行、响应头部、实体数据
以下面为例来分析HTTP相应报文
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一部分:状态行,由HTTP版本号、状态吗、状态消息组成
第二部分:相应头部,如:Date(消息发送时间),Content-Type(数据类型)
第三部分:空行
第四部分:相应正文,可以是数据信息(比如JSON,XML格式数据),也可以是HTML代码
HTTP中状态码
我们知道HTTP相应报文中,状态行中有状态码,每种状态码都包含了特定的信息。
状态码由三位数字组成,第一位数字定义了相应的类别,共分为五种类别:
1xx:指示信息,标识请求已经接收,正在进行处理。
2xx:成功,表示请求已经被成功接收、理解、接收
3xx:重定向,如要完成的请求还必须采取进一步的行动
4xx:客户端错误,比如请求语法错误或请求无法实现
5xx:服务端错误,比如服务器失效无法完成请求。
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求语法错误,不能被服务器理解
403 Forbidden //服务器收到请求,但是拒绝服务
404 Not Found //请求资源不存在
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavaliable //服务器当前不能处理客户端请求,一段时间后可能恢复
HTTP请求方法
Http1.0定义了三种请求方法:GET,POST,HEAD
Http1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT
GET:请求指定的页面,请求参数在URL中。
POST:向服务器提交数据进行处理请求(例如上传表单和文件)。数据在请求体中。
HEAD:类似于GET,只不过返回的相应中没有具体的内容,用于获取报头
PUT:在指定URL下存储一个文档
DELETE:删除指明的URL所标志的资源
TRACE:用来进行回环测试的请求报头
CONNNECT:HTTP1.1协议中预留给能够将连接方法改为管道方式的代理服务器
HTML语言
超文本标记语言/HTML是一种制作万维网页面的标准语言,它消除了不同计算机之间信息交流的障碍。
HTTPS
HTTP1.x在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间,特别是在移动端更为突出。
HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。
HTTP1.x在使用时,header里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量。
虽然HTTP1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间
总的来说HTTP1.X有时延长、不安全(都是明文)、header过大,效率低的问题。
因此,HTTPS出现解决了这些问题。
(1)HTTPS协议需要到CA申请证明,一般免费证书很少,需要交费。
(2)HTTPS协议运行在TCP之上,所有传输的内容都是明文。HTTPS运行在SSL/TLS之上,SSL/TSL运行在TCP之上,所有传输内容都经过加密。
image.png
(3)HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
HTTP2.0
HTTP 2.0采用二进制格式而非文本格式
HTTP 2.0是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
使用报头压缩,HTTP/2降低了开销
HTTP 2.0让服务器可以将响应主动“推送”到客户端缓存中
网友评论