首页 > [搞定面试] 计网之应用层
头像
自行车Z
编辑于 2021-01-26 18:00
+ 关注

[搞定面试] 计网之应用层

前言

各种知识多而且容易遗忘,还不容易复习。最好的方法当然是自己给自己提问,不断补缺查漏,缺什么补什么。本文将各类知识归类,并将全文知识点浓缩在自问自查中,并且都写好目录,自问自查时可以随时跳转过去,方便大家系统的学习复习知识。 水平有限,有错误敬请指正

食用方法
自问自查---阅读原文---自问自查--阅读原文...
无限循环


CSDN有目录:https://blog.csdn.net/qq_45021207/article/details/112723944

自查自问

1. http 报文结构 请求行 响应行
 2. 常见的报文首部字段
 3. http 1.1,2.0 对比 1.0
 4. https
 5. http请求方法
 6. 域名,主机名?
 7. DNS的优缺点
 8. get post的区别
 9. 状态码
 10.Cookie ,Session,token
 11.重定向和转发

http报文

在这里插入图片描述
在这里插入图片描述

http首部

http 首部字段:

请求头:
If-Modified-Since,请求的资源在指定日期后发生了更新服务器才接受请求返回200
如果没修改 就返回 304未修改

if- Match:

If-None-Match, 只有当If-Match的字段值跟请求资源的ETag值不匹配时服务器才接受请求,利用它可以获取最新的资源。

Connection: Keep-Alive 保持连接

Cookie

host:主机

响应头:
Content-Type, 实体主体内对象的媒体类型 如Content-Type: text/html; charset=UTF-8。
last-modified : 最后修改

Set-Cookie:XXXXXXXXXXXXX“

在这里插入图片描述

http 1.1,2.0 对比 1.0

http1.0

HTTP/1.1默认持久连接
HTTP/1.0会断开,除非设置Connection: keep-alive

在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准
HTTP1.1则引入了更多的缓存控制策略例如Entity tag
If-None-Match

http2.0:

HTTP1.x有以下几个主要缺点:
1.
HTTP/1.0一次只允许在一个TCP连接上发起一个请求,因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。
2.
单向请求,只能由客户端发起。
3.
请求报文与响应报文首部信息冗余量大。
4.
数据未压缩,导致数据的传输量大。

SPDY目标是优化HTTP协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。

HTTP2.0特点:
二进制传输
HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据。基于文本的方式传输数据存在很多缺陷,文本的表现形式有多样性,因此要做到健壮性考虑的场景必然有很多,但是二进制则不同,只有0和1的组合,因此选择了二进制传输,实现方便且健壮。
在HTTP2.0中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码
在这里插入图片描述

为了保证HTTP不受影响,那就需要在应用层(HTTP2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层。在二进制分帧层上,HTTP2.0会将所有传输的信息分为更小的消息和帧,并采用二进制格式编码,其中HTTP1.x的首部信息会被封装到Headers帧,而Request Body则封装到Data帧。
多路复用
在HTTP1.0中,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。
HTTP2.0中,有两个概念非常重要:帧(frame)和流(stream)。
帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流是多个帧组成的数据流。

所谓多路复用,即在一个TCP连接中存在多个流,即可以同时发送多个请求,对端可以通过帧中的表示知道该帧属于哪个请求。在客户端,这些帧乱序发送,到对端后再根据每个帧首部的流标识符重新组装。通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。
Header压缩
在HTTP1.0中,我们使用文本的形式传输header,在header中携带cookie的话,每次都需要重复传输几百到几千的字节,这着实是一笔不小的开销。
在HTTP2.0中,我们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。
服务器Push
在HTTP2.0中,服务端可以在客户端某个请求后,主动推送其他资源。
可以想象一下,某些资源客户端是一定会请求的,这时就可以采取服务端push的技术,提前给客户端推送必要的资源,就可以相对减少一点延迟时间。在浏览器兼容的情况下也可以使用prefetch。

https

在这里插入图片描述
在这里插入图片描述
一对公钥和私钥是算法算出来的,不能随便定义
在这里插入图片描述
使用非对称加密传输随机码,使用随机码进行对称加密既保证了安全性又减少了计算量

SSL的证书一般都是收费的
一个有效、可信的 SSL 数字证书包括一个公共密钥和一个私用密钥。

浏览器如何验证证书:

浏览器验证此证书中的域是否和访问的域一致(比如用户访问https://mail.google.com/时,浏览器验证服务器发送过来的SSL证书的公钥中的域是否为mail.google.com或*.google.com)并没有过期

正规的CA机构的根证书都会被植入到各大浏览器中,如果浏览器发现SSL证书不是由受信任的CA机构颁发的,则会有安全警告发出,建议关闭此网页,并且不要继续浏览该网站。例如非正规CA机构颁发的自签名SSL证书就会出现这种情况。

非对称加密RSA:

http请求方法

GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获取报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
TRACE:追踪路径
CONNECT:要求用隧道协议连接代理
在这里插入图片描述
在这里插入图片描述

域名,主机名?

https://blog.csdn.net/m0_37581397/article/details/83184979

http://mail.163.com/index.html
1)http://:这个是协议,也就是HTTP超文本传输协议,也就是网页在网上传输的协议。

2)mail:这个是服务器名,代表着是一个邮箱服务器,所以是mail。 (提供邮箱服务的机器就叫 mail)

3)163.com:这个是域名,是用来定位网站的独一无二的名字。

4)mail.163.com:这个是主机名(网站名),由服务器名+域名组成。

5)/:这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录

6)index.html:这个是根目录下的默认网页(当然,163的默认网页是不是这个我不知道,只是大部分的默认网页,都是index.html)。

7)http://mail.163.com/index.html:这个叫做URL,统一资源定位符,全球性地址,用于定位网上的资源。

想建立一个www服务器,所以www.163.com有了,又想整个邮箱服务器,ok,mail.163.com有了

域名还分级,从后往前级别依次降低,sina.com.cn中,cn是顶级域名,表示中国,com是二级域名,表示商业机构(commercial),sina是三级域名,一般用自己的名字。

DNS的优缺点

浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
DNS的端口号是53

一般用UDP传输 因为DNS服务器给很多主机服务 TCP负担太大

主DNS服务器和从DNS服务器是用TCP 因为他们要经常连接

DNS缺点:
不能够按照Web服务器的处理能力分配负载。DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器之间的差异
没有考虑高可用,某台服务器故障,还会将请求送到这里

https://blog.csdn.net/weibo1230123/article/details/82946179

get post的区别

在这里插入图片描述
GET幂等/POST不幂等
幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同

与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的

get请求可以被缓存和保存 post不可以

GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签

状态码

在这里插入图片描述
502已经与后端建立了连接,从上游服务器接收到无效的响应; 504与后端连接未建立,超时。

· 400 bad request,请求报文存在语法错误
· 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息(账号密码错误)
· 403 forbidden,表示对请求资源的访问被服务器拒绝
· 404 not found,表示在服务器上没有找到请求的资源

301 永久重定向 302 临时重定向
307 临时重定向 http 307和302的区别在于:307要求客户端不改变原先的请求方法,对在Location头部中规定的URI进行访问。对于302,很多客户端的实现是,直接使用GET方式访问重定向地址。 对于 GET 请求来说,两种情况没有区别。
304 未修改

默认端口:
HTTP 80 ; SMTP 25; POP3 110; FTP 21 20; TELNET 23

ftp 21端口是一个命令端口20是一个数据端口

cookie和session的区别如下:
1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,客户端能够知道其中的信息。
2、session中保存的是对象,cookie中保存的是字符串。
3、session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。

session针对用户 cookic针对主机
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

session需要存储在服务端(占用资源),而token不需要,session把钥匙给客户端,token把钥匙和锁都给客户端,两者都存在生存时间。
在这里插入图片描述
前面是钥匙后面的签名是锁 发给服务端验证是否正确
在这里插入图片描述
对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而对于无状态请求,服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。

重定向和转发

转发是服务器行为,重定向是客户端行为

重定向,其实是两次request,
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

自问自查

 1. http 报文结构 请求行 响应行
 2. 常见的报文首部字段
 3. http 1.1,2.0 对比 1.0
 4. https
 5. http请求方法
 6. 域名,主机名?
 7. DNS的优缺点
 8. get post的区别
 9. 状态码
 10.Cookie ,Session,token
 11.重定向和转发

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐