http传输协议

578 阅读5分钟

一、http

http就是超文本传输协议。是web网络的基础。http协议是建立在tcp基础之上的一种传输协议。http协议的一个重要特征就是,每次客户端发起请求都要服务器端进行回应,且不保存上一次请求的状态,每一次请求都是独立的,这就是http协议的无状态性。

为什么http请求不保存状态呢?

简明说来,就是为了传输效率。http协议最初只是用来浏览静态文件的,无状态协议已经足够。如果每次传输都需要保存状态,维护状态,其成本就会大得多,也没必要。 但是随着web的发展,需要保存状态的协议时,怎么办呢?

基于上述问题,通常的解决办法:cookies,session,application

二、cookies & session

cookies:

一般由服务器生成,存储在客户端,最好用md5算法加密;
只能存储字符串;可以设置过期时间;
4k;
会与服务器端进通信,服务器发送一个cookies给浏览器,浏览器保存下来,下次请求的适合会再传给服务器;
cookies的周期是按累积的时间算;
可以设置domain来实现跨域

session:

存储在服务器,更安全;
可以存储任何类型的数据;
5M或更大;
不参与服务端通信;
session的周期是不活动的时间。
只在当前域名下有效

localStorage-- 只要不被清除,就会一直存在。

sessionStorage-- 关闭浏览器窗口,就会清除。刷新依然会存在。

服务器怎样实现一个session为一个用户浏览器服务?

浏览器请求的时候,服务器会创建一个session对象,执行我们的程序代码,并颁发一个cookies给浏览器。浏览器再次请求的时候,会通过https协议将cookies带给服务器,服务器就可以知道用的哪个session。如果是新会话的浏览器访问,则没有cookie可带,服务器就娶不到session值。

怎么防止回退页面重复提交?

在session域中存储一个token,在表单隐藏域中渠道这个token。第一个访问的时候,判断session有没有值,如果有就比对,比对通过就可以提交。然后处理请求,删掉session存储的值。再次访问的时候没有session,就不受理前端的请求。

三、tcp

什么是TCP/IP

TCP/IP协议简单来说就是设备能够使用互联网功能,能够数据传递的底层链接通道。

具体就要从四层网络模型说起了。计算机网络模型分为四层

应用层: http协议(负责web浏览器)、FTP协议(文件传输),SMTP(协议负责电子邮件)、DNS(负责域名系统)

传输层:TCP协议(稳定传输)、UDP协议(高效传输)

网络层:IP协议(寻求网址)

数据链路层:负责转换数字信号和物理二进制信号

image.png

TCP/IP协议协议其实是一个协议群族,以较常用的tcp协议和IP协议为代表。 image.png

假如我们发送一个index.html,两台电脑在应用层都使用http协议。那么致流程如下: 发送端自上而下,加上该层的首部 接收端自下而上,一步步解析每一层的首部。 层层加密和解密,应用层最终拿到需要的数据。

image.png

TCP三次握手

三次握手发生在文件传输前。 第一次:客户端发送syn包给服务器,并进入syn_send状态 第二次:服务器接收到syn包并确认,然后再发送syn+ack包给客户端。 第三次:客户端收到,并向服务器端发送ack确认包。进入established状态。通道建立,进入正式传输数据阶段

image.png

TCP四次挥手

第一次:客户端发送信息(请求头,请求主体)给服务器 第二次: 服务器端收到请求并知会客户端。 第三次:服务器端将客户端请求的数据返回客户端 第四次:客户端知会服务器收到数据,并断开连接

为什么握手3次,而挥手需要四次?

因为服务器从接收到请求到返回数据,中间有一个时间差,无法实时返回数据

image.png

TCP和UDP

TCP是面向连接的。虽说因为网络的不可靠性,多少次握手也不能保证连接的可靠性。但是三次握手在虽低限度上保证了连接的可靠性。MSN.

UDP不是面向连接的,发送数据前,不会与对方建立连接。对于接收到的数据也不会发送确认信号,当然也不会重发。所以UDP是一种无连接的、不可靠的传输方式。实时性好,效率高。QQ。但是并不是说UDP就是不安全的,程序员可以通过手动的方式对数据进行验证,但是因为没有底层的三次握手的设计,效率还是比TCP高。

四、http和https

Http协议是明文传输,无状态的。 https是ssl+http协议构建的可以进行加密、身份认证的网络传输协议,比http更安全。 两者使用完全不同的传输方式,端口也不同,前者是80,后者是443