REST API全称为表述性转移状态,即,利用HTTP中的get、post、put、delete以及其他的HTTP方法构成REST请求中的数据资源增删改查的操作
一般的HTTP协议并不限制参数大小,但是GET请求是在浏览器地址栏实现的,由于地址栏有长度限制,所以GET请求在浏览器实现层面有大小限制
GET:向指定资源请求数据,刷新无害,请求参数是放在URL地址栏中,大小受到地址栏长度的限制
POST:向指定资源提交数据。刷新会导致重复提交。在post发送数据前会先将请求头发送给服务器确认,然后才会真正的发送数据。
转发:转发是服务器行为。服务器直接向目标地址URL进行访问,将访问结果发送给服务器,用户地址栏URL不变,转发页面和转发到的页面可以共享request中的数据。(因为还是同一次请求)
重定向: 重定向是浏览器行为,服务器通过状态码告知服务器进行重定向(301、302),浏览器接收到告知后重新请求新地址资源,用户URL栏改变,不能数据共享(因为是两次不一样的请求)
cookie: HTTP本身是无状态的,为了使其能处理更加复杂的逻辑,HTTP/1.1引入了cookie来保存状态信息。Cookie由服务器产生,在发送给客户端做保存,当用户携带Cookie访问时,HTTP请求就变得有状态了(服务器知道是谁请求了自己)。
Session 用于保存特定的客户端信息,保存在服务器中,一般客户端通过Cookie对服务器进行访问,服务器通过cookie中的session ID 对整个session中有关该客户端的数据进行访问。
OSI七层模型包括,从下到上: 物理层,数据链路层,网络层,运输层,会话层,表示层,应用层
物理层,数据链路层,网络层,运输层,应用层
解决两台物理机之间的通信,通过二进制比特流进行数据传输,将二进制流转换问高低电平,到达目的后再将高低电平转换为机器二进制码。 网卡,集线器工作在这一层、
在不可靠的物理介质中提供可靠的传输,接收来自物理层的流数据,封装成帧,传输到上一层,反向的也能将上一层的数据帧,拆分成流发送到物理层。在这一层通过差错控制,流量控制等办法,使有差错的物理线路转变为无差错的数据链路。提供物理寻址的功能。交换机工作在这一层
将网络地址翻译为对应的物理地址,并决定如何将数据从发送方路由到接收方,通过路由算法为分组选择通过子网的最佳路径。路由器工作在这一层
传输层提供了进程之间的逻辑通信,传输层向高层用户屏蔽了下层的实现细节,使程序看起来向两个传输层之间进行交互的
建立会话:身份验证,权限鉴定等;保持会话:对该会话进行维护,在会话维持期间二者可以随时使用这条会话传输数据;断开会话:当应用程序或应用层规定的超时时间到期后,OSI会话层才会释放掉这条会话
对数据格式进行编译,对发送或接收到的数据根据应用层的特征进行处理,如处理为 文字,图片 等,还可以对压缩文件进行解压缩、对加密文件进行加密等
提供应用层协议,如HTTP协议,FTP协议等等,方便程序之间进行通信
TCP:作为面向流的协议提供可靠的、面向连接的运输服务,并且提供点对点通信
UDP:作为面向报文的协议,交付不可靠,不需要面向连接,不仅支持点对点,还支持多播和广播
因为TCP是面向连接的,有三次握手建立连接,四次挥手关闭连接的机制。除此之外还有滑动窗口和拥塞控制算法,保留的超时重传的机制,对每份报文都存在校验,保证了报文的可靠性
因为UDP是无连接的,数据包发送出去后,就不再保留数据备份了,仅仅在IP数据报头加入了校验和复用。UDP没有客户端服务器的概念。UDP包发送方只考虑发送,而不考虑对方是否接真正收到。
TCP是面向流的协议,发送的单位是字节流,因此会将多个小尺寸的数据封装在一个TCP报文中发送出去的可能性。表现就是,可能客户端调用了两个send,而服务器一个recv就把数据读取出来了
解决: 固定发送信息长度,使用分隔符等
滑动窗口是传输层进行流量控制的一种措施,通过告知发送方自己的窗口大小,从而控制发送方的发送速度,防止发送过快而淹没自己
这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
http协议是超文本传输协议。它是基于TCP协议的应用层传输协议,即客户端和服务端进行数据传输的一种规则。该协议本身HTTP 是一种无状态的协议。
DNS协议是基于UDP的应用层协议,它的功能是根据用户输入的域名,解析出该域名对应的IP地址,从而给客户端进行访问。
http所有传输的内容都是明文,并且客户端和服务器端都无法验证对方的身份。https具有安全性的ssl加密传输协议,加密采用对称加密, https协议需要到ca申请证书,一般免费证书很少,需要交费。
SSL全称为Secure Sockets Layer即安全套接层,其继任为TLSTransport Layer Security传输层安全协议,均用于在传输层为数据通讯提供安全支持。
可以将HTTPS协议简单理解为HTTP协议+TLS/SSL
规定了请求头和请求尾,响应头和响应尾(get post)
每一个请求都是一个单独的连接,做不到连接的复用
HTTP1.1默认开启长连接,在一个TCP连接上可以传送多个HTTP请求和响应。使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
服务端无法主动push
HTTP中的长连接短连接指HTTP底层TCP的连接。
短连接:客户端与服务器进行一次HTTP连接操作,就进行一次TCP连接,连接结束TCP关闭连接。
长连接:如果HTTP头部带有参数keep-alive,即开启长连接网页完成打开后,底层用于传输数据的TCP连接不会直接关闭,会根据服务器设置的保持时间保持连接,保持时间过后连接关闭。
提出多路复用。多路复用前,文件时串行传输的,请求a文件,b文件只能等待,并且连接数过多。引入多路复用,a文件b文件可以同时传输。
引入了二进制数据帧。其中帧对数据进行顺序标识,有了序列id,服务器就可以进行并行传输数据。