文章目录
前端人员应该更加关注并深入了解应用层的知识
1. 参考模型
1. OSI 参考模型 七层
Open System Interconnection
- 物理层 利用物理传输介质为数据链路层提供物理连接。传递的数据是比特流,0101010100。
- 数据链路层 定义通过通信媒介互连的设备之间传输的规范;首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发送数据,再根据数据中MAC地址和自身对比判断是否是发给自己的。
- 网络层 寻址和路由; IP ; 广播的形式太低效,为了区分哪些MAC地址属于同一个子网,网络层定义了IP和子网掩码,通过对IP和子网掩码进行与运算就知道是否是同一个子网,再通过路由器和交换机进行传输。
- 传输层 为上层协议提供端到端的可靠传输;TCP、UDP 有了网络层的MAC+IP地址之后,为了确定数据包是从哪个进程发送过来的,就需要端口号,通过端口来建立通信
- 会话层 建立、断开和维护通信链接
- 表示层 数据格式转换、数据压缩和数据加密 HTML、MIME
- 应用层 (各种应用程序协议 HTTP、FTP、SMTP、POP3)为应用程序提供网络服务;最高层,面对用户,提供计算机网络与最终呈现给用户的界面
详细的见 科来网络通讯协议图 http://www.colasoft.com.cn/download/protocols_map.php
2. TCP/IP参考模型 四层
ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。
有四层五层两种说法
(知乎上的图,链接见文末)
- 数据链路层,也有称作网络访问层、网络接口层。他包含了OSI模型的物理层和数据链路层,把电脑连接起来。
- 网络层,也叫做IP层,处理IP数据包的传输、路由,建立主机间的通信。
- 传输层,就是为两台主机设备提供端到端的通信。TCP UDP
- 应用层,包含OSI的会话层、表示层和应用层,提供了一些常用的协议规范,比如FTP、SMPT、HTTP、DNS等。
(《图解TCP/IP》中的图)
总结一下就是
物理层通过物理手段把电脑连接起来
数据链路层则对比特流的数据进行分组
网络层来建立主机到主机的通信
传输层建立端口到端口的通信
应用层最终负责建立连接,数据格式转换,最终呈现给用户
2. 在浏览器中输入网址之后执行 会发生什么?
(1)从浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到服务器,而是通过IP地址找到对应的服务器,DNS将域名解析为IP地址;
(2)浏览器通过IP地址找到服务器,建立TCP连接,通过三次握手以同步客户端和服务端的序列号和确认号,并交换TCP窗口大小的信息;
(3)TCP三次握手结束后,开始发送HTTP请求;
(4)服务器处理请求,并返回HTTP响应报文;
(5)浏览器拿到响应文本HTML后,解析渲染页面;
(6)当数据传送完毕后,断开TCP连接。
3.URL和URI的区别?
URI(Uniform Resource Identifier)
统一资源标识符
URL(Uniform Resource Locator)
统一资源定位符
URI用字符串标识某一互联网资源,而URL表示资源的位置,URL是URI的子集。
URI的目的就是唯一标识互联网中的一份资源,具体可以用资源名称、资源地址等,但是资源地址是目前使用最广泛的,因此URL就容易和URI混淆。URI相当于抽象类,URL就是这个抽象类的具体实现类。
4. 关于HTTP协议
用于客户端与服务端通信的协议
4.1 为什么说HTTP协议是无状态协议?
HTTP协议是一种无状态协议,协议自身不对请求和响应之间的通信状态进行保存,即对发送过来的请求和响应都不做持久化处理,把HTTP协议设计的如此简单是为了更快地处理大量事务。
4.2 怎么解决HTTP协议无状态协议?Cookie
为了解决HTTP协议不能保存通信状态的问题,引入了Cookie状态管理。
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务端发送的响应报文的一个叫Set-Cookie的首部字段,通知客户端保存Cookie。
当下次客户端再往该服务端发送请求时,客户端会自动在请求报文中加入Cookie值发送出去,服务端发现客户端发来的Cookie后,会检查是哪一个客户端发来的连接请求,对比服务器上的记录,最后得到之前的状态信息。
4.3 HTTP 协议包括哪些请求方法?
GET
:对服务器资源的简单请求
POST
:用于发送包含用户提交数据的请求
PUT
:传输文件
DELETE
:发出一个删除指定文档的请求
HEAD
:类似于GET请求,不过返回的响应中没有具体内容,用于获取报文首部
OPTIONS
:返回所有可用的方法,检查服务器支持哪些方法
TRACE
:发送一个请求副本,以跟踪其处理进程
CONNECT
:用于ssl隧道的基于代理的请求
4.4 简述HTTP中GET和POST的区别
从原理性看:
根据HTTP规范,GET用于信息获取,而且应该是安全和幂等的
根据HTTP规范,POST请求表示可能修改服务器上资源的请求
从表面上看:
GET请求的数据会附在URL后面,POST的数据放在HTTP包体
POST安全性比GET安全性高
1、GET参数通过URL传递,POST放在Request body中。
2、GET请求会被浏览器主动cache,而POST不会,除非手动设置。
3、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
4、Get 请求中有非 ASCII 字符,会在请求之前进行转码,POST不用,因为POST在Request body中,通过 MIME,也就可以传输非 ASCII 字符。
5、 一般我们在浏览器输入一个网址访问网站都是GET请求
6、HTTP的底层是TCP/IP。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。但是请求的数据量太大对浏览器和服务器都是很大负担。所以业界有了不成文规定,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。
7、GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
8、在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
传递数据的最大长度
GET 是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。
POST理论上讲是没有大小限制的,HTTP协议规范也没有进行大小限制,但实际上POST所能传递的数据量大小取决于服务器的设置和内存大小。
4.5 PUT和POST区别
PUT是幂等的,POST不是。
幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的。也就是说,如果一个网络重复执行多次,产生的效果是一样的,那就是幂等(idempotent)。
PUT请求:如果两个请求相同&#