现在学习到了URL,作为一个前端每天需要和网络打交道,所以先整理一些HTTP有关知识。
网络模型
OSI七层模型结构:
OSI(Open System Interconnection):七层模型是通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输。
- 1.物理层: 利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。 在这一层,数据的单位称为比特(bit)。
- 2.数据链路层: 通过各种协议控制,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。 在这一层,数据的单位称为帧(frame)。
- 3.网络层: 通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。 在这一层,数据的单位称为数据包(packet)。
- 4.传输层: 向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。 在这一层,数据的单位称为数据段(segment)。
- 5.会话层: 组织和协调两个会话进程之间的通信,并对数据交换进行管理。
- 6.表示层: 处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
- 7.应用层: 直接向用户提供服务,完成用户希望在网络上完成的各种工作。
TCP/IP协议
实际上,OSI是一种理论下的协议模型,过于复杂。现实中使用是更为精简的TCP/IP协议的四层模型,TCP/IP协议与OSI协议的对应关系如下:
- 链路层:用来处理链接网络的硬件部分
- 网络层:用来处理在网络上流动的数据包
- 传输层:提供处于网络链接中的两台计算机之间的数据传输,TCP协议(传输控制协议)和UDP协议(用户数据协议)就在此层。
- 应用层:向用户提供应用服务时通信的活动。FTP,DNS和HTTP协议就在此层。
TCP/IP DNS HTTP
先介绍一个单词protocol,翻译过来就是协议、礼节、约定。
这个单词也是我们所说的IP TCP HTTP中p字母的全称。
所以,网络的本质也可以理解为人们按照某种约定好的协议来传递信息:
1.负责传输的IP协议:
按层次分,IP协议位于网络层。它的作用就是把各种数据包传送给对方。而为了准确无误的把数据包传递给对方,需要知道2个非常重要的信息,IP地址和MAC地址。 IP地址指明了节点被分配到的地址,是可以发生变化的。MAC地址是指的的网卡所属的固定地址,基本上是不会改变的。
我们可以用快递的方式来理解IP协议:假如我要从武汉寄一份快递到北京,首先填写一个北京的具体送货地址(IP地址),然后去离我家最近的一个快递站点发货(MAC地址,中转站),这个小型站点是没有能力直接把货送到北京的,所以它会分析地址,送到武汉的某个大型站点(MAC地址,中转站),武汉的大型站点再分析地址,送到北京的某个大型站点(MAC地址,中转站),北京的大型站点再分析地址,送到地址对应的某个小型站点(MAC地址,中转站),最后快递员送货到达最终的地址(MAC地址,IP地址)。 回到网络通信中,除非是同一个局域网内,大部分的IP通信都是像快递中转一般,利用多台计算机和网络设备才能连接到对方。在进行中转时,会利用ARP协议(一种解析地址的协议,已知对方的IP地址,反查出对方的MAC地址。),得到下一个中转站的MAC地址来搜索下一个中转目标,最终搜索到目标地址。
只要身处在互联网中的设备,都会至少有一个独特的IP地址,这里介绍几个特殊的IP地址:
- 127.0.0.1 表示本机自己
- localhost 通过hosts指定为自己
- 0.0.0.0不表示任何设备
现在我们有了IP地址,在茫茫世界中找到了这个设备,但是我们还需要端口port,一个设备可以提供很多服务,而每种服务就会对应一个号码,这个号码就是端口号:
- 要提供HTTP服务最好使用80端口
- 要提供HTTPS服务最好使用443端口
- 要提供FTP服务最好使用21端口
- 一共有65545个端口,基本满足需求了 总而言之,IP和端口缺一不可。
2.确保可靠的TCP协议:
按层次分,TCP位于传输层。TCP协议为了更容易的传输大数据,将大数据分割成以报文段(segment)为单位的数据包,并且通过三次握手的策略来确认数据送达目标处。 三次握手:发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,代表握手结束。如果在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
负责域名解析的DNS服务
DNS服务是和HTTP协议一样位于应用层。它的作用是提供域名到IP地址之间的解析服务。
域名就是对IP的别称: 一般我们都是直接输入域名来访问某个网页,因为这样更符合我们的记忆习惯,但是计算机更擅长处理一长串数字,所以需要DNS这样的服务,能通过域名来查找IP地址,或逆向从IP地址反查域名。
结合以上三种协议,具体的HTTP协议的通信过程可以用下图表示:
URI
URI是Uniform Resource Identifier的缩写,它指的是某个协议方案表示的资源定位标识符。 协议方案指的是访问资源所使用的协议类型名称。常用的协议有http,https、file,mailto,telnet等。
URI有两个子集,分别是URL(Uniform Resource Locator)统一资源定位器和URN(Uniform Resource Name)统一资源命名。
我们更常用的是URL,关于URI和URL的关系可以这么理解:URI描述了一个资源在网上的一切信息,包含这个资源的名字,这个资源在哪里等等。而URL描述了在网上如何找到这个资源,也就是这个资源在哪里。所以从逻辑上来讲URL是URI的子集,在充分理解的基础上,URL是可以替换URI的。
URI格式如下:
- 协议方案名:常见的http,https,ftp等,不区分大小写,最后记得要加上冒号:
- 登陆信息:指定用户名和密码作为从服务器获取资源是必要的登陆信息。此项是可选项,由于太不安全,现在不常见了。
- 服务器地址:使用URI必须指定带访问的服务器地址,可以是NDS可解析的名称或者是直接的IP地址名。
- 服务器端口:指定服务器连接的网络端口号。此项也是可选项,若不写则使用默认端口号。
- 带层次的文件路径:指定服务器上的文件路径来定位特制的资源。
- 查询字符串:针对已指定的文件路径的资源,可以使用查询字符串参入任意参数。此项可选。
- 片段标识符:使用片段标识符通常可标记以获取资源中的子资源(文档内的某个位置)。该项也是可选项,在很多MVVM框架用做了路由功能。
HTTP协议和服务器交互的方法
- GET:用来请求访问已被URI识别的资源。指定的资源经过服务器端解析后返回相应内容。
- POST:用来传输实体的主体。虽然POST的功能和GET很相似,但是POST的主要目的是向服务器传输大量数据。
- PUT:用来传输主体,在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。但是PUT自身不带验证机制,存在安全性问题,一般不会使用。
- HEAD:用来获得报文首部,与GET方法一样,但是不会返回报文主题,用来确认URI的有效性及资源更新的日期时间等。
- DELETE:用来删除文件,是PUT相仿的方法,同样由于安全性问题,一般不会使用。
- OPTIONS:用来查询针对请求URI指定的资源支持方法。
- TRACE:用来让Web服务器端将之前的请求通信环回给客户端。
- CONNECT:该方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
几种状态码
服务器的响应类别有下面5种:
- 200:表示从客户端发来的请求在服务器端被正常处理了。
- 301:永久性重定向,表示请求的资源已被分配了新的URI,新的URI出现在Location首部字段中,浏览器会自动访问新的URI。
- 304:表示客户端发送附带条件(比如if-Modified-Since)的请求时,虽然未满足条件,但是服务器端还是允许请求访问资源。在浏览缓存文件时,会看到304的身影,说明这个缓存资源未发生变更,能继续使用。
- 403:表示对请求资源的访问被服务器拒绝了。
- 404:表示服务器上无法找到请求的资源,也可以在服务器端拒绝请求且不想说明理由时使用。
- 500:表示服务器端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障。
- 503:表示服务器暂时处于超负荷或正在进行停机维护,现在无法吃力请求。