前端--计算机网络篇


Post和Get的请求区别

GET请求参数是通过URL进行传递的,POST 请求的参数包含在请求体当中
GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息
GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制
GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
GET请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。
GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。
GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。
GET请求在浏览器中可以被主动cache(缓存),而POST 请求不会,可以手动设置。
1…GET 和 POST都是http请求方式, 底层都是 TCP/IP协议;通常GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包(但firefox是发送一个数据包),
2.对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200
(返回数据)表示成功;
而对于 POST,浏览器先发送 header,服务器响应 100, 浏览器再继续发送 data,服
务器响应 200 (返回数据)。

RPC和webSocket

总结一下,RPC要解决的两个问题:

  1. 解决分布式系统中,服务之间的调用问题。
  2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
    RPC是一种技术的概念名词
    RPC=Remote Produce Call 是一种技术的概念名词,HTTP是一种协议,RPC可以通过 HTTP 来实现,也可以通过Socket自己实现一套协议来实现.所以题目可以换一种理解,为何 RPC 还有除 HTTP 之外的实现法,有何必要,毕竟除了HTTP实现外,私有协议不具备通用性.
    RPC框架好处
    http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;
    优点就是简单、直接、开发方便。
    如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了:
    首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;
    其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。
    最后是安全性。
    rpc是一种概念,http也是rpc实现的一种方式。
    论复杂度,dubbo/hessian用起来是超级简单的。

至于为什么用dubbo/hessian,有几点:
一是调用简单,真正提供了类似于调用本地方法一样调用接口的功能 。
二是参数返回值简单明了 参数和返回值都是直接定义在jar包里的,不需要二次解析。
三是 轻量,没有多余的信息。
四是便于管理,基于dubbo的注册中心。
RPC能解耦服务
RPC:远程过程调用。RPC的核心并不在于使用什么协议。RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。
rpc=socket + 动态代理
服务器通讯原理就是一台socket服务器A,另一台socket客户端B,现在如果要通讯的话直接以流方式写入或读出。这样能实现通讯,但有个问题。如何知道更多信息?
比如需要发送流大小,编码,Ip等。这样就有了协议,协议就是规范,就是发送的流中携带了很多的内容。那回到刚刚的问题。发送的内容就是文本类型,客户端就得序列化,那么常用的就有json,xml之类,如果想把内容变得更小,那就有二进制了。把文本变成二进制传递。
说到 rpc 与http接口,不要太复杂了。rpc 协议更简单内容更小,那么来说效率是要高一点

socket 和http的区别

相同点:
都是基于tcp的,都是可靠性传输协议
都是应用层协议
不同点:
WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息
HTTP是单向的
WebSocket是需要浏览器和服务器握手进行建立连接的
http是浏览器发起向服务器的连接,服务器预先并不知道这个连接
联系:
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的
总结(总体过程):
首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等
然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信

websocket和socket区别

Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组API接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

WebSocket则是一个典型的应用层协议。

区别:Socket是传输层协议,WebSocket是应用层协议。

半双工和双全工

半双工允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,其实际上是切换的单工。
举例:
对讲机
全双工允许数据在两个方向上同时传输。
举例:
手机通话

线程和进程的区别

进程:进程是操作系统中资源分配的基本单位。进程是操作系统对正在运行程序的一种抽象,可以将进程看作程序的一次运行。
2.线程:线程是操作系统中调度执行的基本单位。一个线程是一个“执行流”,每个线程之间都可以按照顺序执行自己的代码,多个线程“同时”执行多份代码

为了更好的理解进程和线程之间的区别和联系,可以做一个简单的比喻,把进程比作火车,线程比作火车的车厢。

线程是在进程下运行的(单纯的车厢是无法运营的);
一个进程可以包含多个线程(一个火车可以有多节车厢);
不同进程之间数据是很难共享的(一辆火车上的乘客很难换到另外一辆火车上,比如站点换乘);
同一进程下不同线程之间很容易进行数据的共享(a车厢换到b车厢很容易);
进程要比线程消耗更多的计算机资源(多列火车比多节车厢来说更耗资源);
进程之间不会互相影响,但是一个线程如果挂掉了,将导致整个进程都挂掉(一辆火车不会影响到另外一辆火车,但是一辆火车上的中间一节车厢着火了,那这辆火车的所有车厢都会受到影响)

进程和线程之间的通信

通道传输
队列

并发和并行

并发:并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
并行:并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。所以无论从微观还是从宏观来看,二者都是一起执行的

xss攻击和csxf攻击

跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。
XSS 攻击指黑客通过特殊的手段往网页中插入了恶意的 JavaScript 脚本,从而在用户浏览网页时,对用户浏览器发起 Cookie 资料窃取、会话劫持、钓鱼欺骗等各攻击。
反射型
存储型
dom型

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

Ddos攻击

不停的 大量的向服务器发送syn包

锁和死锁

锁:计算机协调多个进程或者多个并发访问某一资源的机制。
死锁:多个进程在运行过程当中因为争夺资源而造成的僵局的状态,当进程处于这种状态时,他们都无法向前推进
解除死锁方式:发生死锁后,撤销进程,回收资源,分配给正在阻塞状态的进程。

ISO七层模型

https://www.bilibili.com/video/BV1EU4y1v7ju/?spm_id_from=333.788&vd_source=a6a8d2478eb3b4cd21d6d7e757b03cad

报文—>段---->包—>帧---->比特

应用层:http协议
表示层:编码和解码
会话层:
传输层:tcp和ucp
网络层:
数据链路层:Mac地址
物理层:
在这里插入图片描述

TCP和UDP的区别

UDP:无连接,不可靠,可能出现丢包的情况,但是可以一对多,多对多通信。
TCP:面向连接的(三次握手和四次挥手),可靠,只能一对一通信。

DNS域名解析过程

迭代查询
1.访问你的电脑的浏览器缓存和本地host文件查找有无缓存文件,如果没有那么就是下一步
2.向本地dns服务器(例如中国移动、中国电信)进行查找,如果没有缓存就向根域名服务器进行请求
3.根域名返回一个相应给了dns服务器一个顶级域名服务器的ip地址
4.dns服务器拿到这个ip去找权威域名服务器,最后将找到的域名ip地址返回
5.查询完成
递归查询和它的区别就是

http状态码

状态码原因语句
1xxInformation(信息状态码)表示状态正在请求处理中
2xxSuccess(成功状态码)请求正常处理
3xxRedirection(重新定向码)重新定位
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务端错误状态码)服务器处理请求出错

下面是一些实际例子
200 -表示请求被成功完成,请求的资源发送回客户端
201 -创建用户
202 -接受和处理,但处理未完成
203 -返回信息不确定或不完整
204 -请求收到,但返回信息为空
206 - 断点续传
300 -请求的资源可在多处得到
301 -本页面被永久性转移到另一个URL
302 - 本页面被暂时性转移到另一个URL
304 -自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用

400 -客户端请求语法错误,不能被服务器所理解
401-身份验证不通过
403 -禁止访问,服务器收到请求,但是拒绝提供服务(没有权限)
404 -服务器无法取得所请求的网页,请求资源不存在。
408 -请求超时
409-版本冲突 新老版本对齐
500-内部错误 (不知道哪里错了,给个500应付一下)
502-网关错误(远程服务器有问题)
503-超载


http缓存 (强制缓存和协商缓存)

强制缓存:就是当客户端向服务器端发送请求之后,服务器会判断该资源是否需要缓存到浏览器本地(如 image, css, js 文件),那么需要的话他就会通过校验两个字段 Expires 和 Cache-Control 的max-age字段(注意,Expires 是 http1.0 的产物, Cache-Control 则是 http1.1 的产物。 两者同时存在, 或者只存在其中之一, 都可以触发强制缓存,一旦服务器再次请求就可以直接从本地缓存获取(只要没有过期).
协商缓存:就是通过查看Last-Modified和E-tag两种标识,
其中Last-Modified通常是文件最后更新的日期时间戳
,而E-tag就是是一个用于映射 web 资源的映射 token,这个 token 应该满足唯一对应到一 个web服务器上的静态资源(具体实现通常是提取文件相关信息进行hash和base64编码等操作
当强制缓存失效的时候, 浏览器便会将请求传递到服务器, 于是服务器又会开始校验 If-Modified-Since 和 If-None-math 两个字段, 重复上述协商缓存的一个执行流程
大致流程如下:
在这里插入图片描述

E-TAG和Last-Modified的优缺点

优点
Etag:因为通过hash和md5算法生成的唯一标识符,所以是对应着唯一资源,不会改变
Last-Modified:就是存有文件最后更新的日期时间戳,比较简单,便于判断和解码
缺点:
Etag:性能会比较差,需要计算Etag,会有性能损失 不同操作系统,web服务器对于ETag的计算方法也不同,当使用不同操作系统.
Last-Modified:就是他的时间戳不是准确的,因为js文件一般都是精确到了毫秒,而lastModified只能精确到秒;同时有时候文件是不停的更新覆盖的,就算内容没有更新,他的时间戳也会变化

CDN的负载均衡

http1.0和http1.1以及http2.0以及3.0的区别

https://blog.csdn.net/yinlidong77/article/details/103908035

http1.0和http1.1的区别

1.0在一次请求过后,连接就会断开,而1.1是不会断开他的连接,他的请求头里面Connection: keep-alive,也就是保持长连接

http1.1和http2.0的区别

http有一个问题在tcp链接中,http请求必须等待前一个请求响应之后,才能发送,后面的依次类推,由此可以看出,如果在一个tcp通道中如果某个http请求的响应因为某个原因没有及时返回,后面的响应会被阻塞,这就是队头阻塞。

(1) 多路复用

http 2.0 可以在一个 tcp/ip 连接上并发的发送多个 http 请求,不必等待上一个 http 请求返回请求报文。虽然 http 1.1 可以启动多个 tcp/ip 连接来达到并发,但是 tcp/ip 连接本身的建立也会产生额外的性能开销。

http1.1串联等待前一个

http2.0并发

(2) 头部压缩

http 报文分为三个部分,状态行,头部,主体。http 1.1 会对主体进行压缩,但不会压缩头部,http 2.0 使用 hpack 算法对 header 进行压缩。

(3) 服务器推送
比方说,一个资源服务器上有 html,css,js,http 1.1 会在浏览器解析 html 的时候再次发送请求,请求 css 和 js 资源。但是 http 2.0 会在浏览器第一次请求 html 的时候,检查这个 html 引用的资源,如果被引用的资源刚好也在这台服务器上,那么服务器会自动地把被引用的资源,比如,css,js 推送给浏览器。
http1.1先请求html->请求css+请求js
http2.0请求html返回html+css+js
(4)二进制流

服务器推送

服务器推送(server push)指的是,还没有收到浏览器的请求,服务器就把各种资源推送给浏览器。
比如,浏览器只请求了index.html,但是服务器把index.html、style.css、example.png全部发送给浏览器。这样的话,只需要一轮 HTTP 通信,浏览器就得到了全部资源,提高了性能。
,打开配置文件conf/conf.d/default.conf,

 location / {
      root   /usr/share/nginx/html;
      index  index.html index.htm;
      http2_push /style.css;
      http2_push /example.png;
    }
把需要的加到location里面

tls/ssl握手

ssl最初的加密系统,他直接嵌套了一层SSL(Secure Sockets Layer),他又
tls(Transport Layer Security)是将ssl进行标准化之后的结果。
握手的过程是(1) A 要向 B 发送信息,A 和 B 都要产生一对用于加密和解密的公钥和私钥(使用随机数生成,所以a和b是不一样的)。
(2) A 的私钥保密,A 的公钥告诉 B(A的公钥是大家都知道的);B 的私钥保密,B 的公钥告诉 A(B的公钥是大家都知道的)。
(3) A 要给 B 发送信息时,A 用 B 的公钥加密信息,因为 A 知道 B 的公钥。
(4) A 将这个消息发给 B (已经用 B 的公钥加密消息)。
(5) B 收到这个消息后,B 用自己的私钥解密 A 的消息。其他所有收到这个报文的人都无法解密,因为只有 B 才有 B 的私钥。

非对称加密

首先是生成一个特别大的随机树,然后通过这个随机树,生成一对公钥和私钥,他们是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。

RSA算法

这个通过找到两个特别大的质数,然后进行相乘和一定的运算生成私钥和公钥
(1)选择两个不同的大素数p和q;
(2)计算乘积n=pq和Φ(n)=(p-1)(q-1);
(3)选择大于1小于Φ(n)的随机整数e,使得gcd(e,Φ(n))=1;注:gcd即最大公约数。
(4)计算d使得de=1mod Φ(n);注:即de mod Φ(n) =1。
(5)对每一个密钥k=(n,p,q,d,e),定义加密变换为Ek(x)=xe mod n,解密变换为Dk(x)=yd mod n,这里x,y∈Zn;
(6)p,q销毁,以{e,n}为公开密钥,{d,n}为私有密钥。

实例:
假设p = 3、q = 11(p,q都是素数即可。),则N = pq = 33;
r =Φ(n)= (p-1)(q-1) = (3-1)(11-1) = 20;
根据gcd(e,Φ(n))=1,即gcd(e,20)=1,令e=3,则,d = 7。(两个数交换一下也可以。)
到这里,公钥和密钥已经确定。公钥为(N, e) = (33, 3),密钥为(N, d) = (33, 7)。

DH算法

在这里插入图片描述
他有两个共享参数P和G。这个P就是一个质数(越大越好),G也是一个质数,通过Ga mod P这个算法计算出自己的私钥,这里面的a就是各自生成的随机数。然后两边将算好的余数发给对方,对方通过公式计算的余数相同,这个就是他们的共享密钥了。通过这个密钥进行加密

LCC算法(椭圆曲线算法)

ECC也是使用了正向运算很简单,但是反向运算很难的单向函数,但是和RSA的原理不同,RSA使用的时模函数作为单向函数,而
ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点G,并选取一个整数k,求解K=kG很容易(注意根据kG求解出来的K也是椭圆曲线上的一个点);反过来,在椭圆曲线上给定两个点K和G,若使K=kG,求整数k是一个难题。ECC就是建立在此数学难题之上,这一数学难题称为椭圆曲线离散对数问题。其中椭圆曲线上的点K则为公钥(注意公钥K不是一个整数而是一个椭圆曲线点),整数k则为私钥(实际上是一个大整数)。
由于这里的基于椭圆曲线的离散对数问题并不是一个很好理解的数学问题,在这里就不多做赘述,大家只要了解即可。

对称加密

那么就是使用同一套公钥,这个公钥负责解码和加密比如 传递的内容为ABC 然后他们算法是将字母加一位也就是BCD,最后在解码

CA证书

CA 签发证书的过程,如上图左边部分:
⾸先 CA 会把持有者的公钥、⽤途、颁发者、有效时间等信息打成⼀个包,然后对这些信息进⾏ Hash 计算, 得到⼀个 Hash 值;
然后 CA 会使⽤⾃⼰的私钥将该 Hash 值加密,⽣成 Certificate Signature,也就是 CA 对证书做了签名;
最后将 Certificate Signature 添加在⽂件证书上,形成数字证书;

⾸先客户端会使⽤同样的 Hash 算法获取该证书的 Hash 值 H1;
通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使⽤ CA 的公钥解密 Certificate Signature 内容,得到⼀个 Hash 值 H2 ;
最后⽐较 H1 和 H2,如果值相同,则为可信赖的证书
,否则则认为证书不可信。

4.2 Cookie、sessionStorage、localStorage 的区别

其实他们都是储存浏览器数据的,一个cookie是随HTTP事务一起被发送的,因此会浪费一部分发送cookie时使用的带宽,一个Web Storage浏览器数据,有分为localStorage和sessionStorage。
相同点:
存储在客户端
不同点:
cookie数据大小不能超过4k;sessionStorage和localStorage的存储比cookie大得多,可以达到5M+
cookie设置的过期时间之前一直有效;localStorage永久存储,浏览器关闭后数据不丢失除非主动删除数据;sessionStorage数据在当前浏览器窗口关闭后自动删除
cookie的数据会自动的传递到服务器;sessionStorage和localStorage数据保存在本地.
怎么手动清除localstorage就是打开f12的application,里面三个都有,直接右键删除就行,代码清楚就是LocalStorage.setItem(“name”,“bonly”);LocalStorage.getItem(“name”); LocalStorage.removeItem

cookie和 session的区别是什么?

session在服务器端产生,然后将生成一个sessionid和session的信息,发送给客户端,在客户端储存sessionid,每次请求通过cookie进行传值。
区别如下:
(1) cookie数据存放在客户的浏览器上, session数据存放在服务器上。
(2) cookie不是很安全,别人可以分析存放在本地的 cookie并进行 cookie欺骗。考虑到安全问题应当使用 session。
(3) session会在一定时间内保存在服务器上。当访问增多时,会占用较多服务器的资源。为了减轻服务器的负担,应当使用 cookie。
(4)单个 cookie保存的数据不能超过4KB,很多浏览器都限制一个站点最多保存20个 cookie。
所以个人建议可以将登录信息等重要信息存放在 session中,其他信息(如果需要保留)可以存放在 cookie中。

token和session的区别是什么

浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端。客户端将token保存起来,下次请求时,带着token。服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作;如果不通过,返回不通过信息。
1、Session是存放在服务器端的,可以保存在:内存、数据库、NoSQL中。它采用空间换时间的策略来进行身份识别,若Session没有持久化落地存储,一旦服务器重启,Session数据会丢失。
2、Token是放在客户端存储的,采用了时间换空间策略,它也是无状态的,所以在分布式环境中应用广泛。

token和jsonwebtoken的区别

cookie支持跨域吗

cookie是不支持跨域的


如何实现浏览器内多个标签页之间的通信?

在标签页之间,调用 localstorge、 cookies等数据存储,可以实现标签页之间的通信

跨域

jsonp

nginx

ajax

axios

两个协议不同的服务器算跨域嘛

两个端口号不同的算跨域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值