计网-应用层


摘抄阿秀的

1、HTTP请求过程(输入URL到显示页面的过程)

  1. 域名解析
  2. 发起TCP三次握手
  3. 建立TCP连接后发起http请求
  4. 服务器响应http请求,浏览器得到html代码
  5. 浏览器解析html代码,并请求html代码中的资源(如js、css、图片)
  6. 浏览器对页面进行渲染呈现给用户

2、域名解析过程

  1. 检查浏览器缓存中是否缓存过该域名对应的IP地址
  2. 如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP
  3. 本地域名解析服务系统发起域名解析的请求(递归),查看是否有缓存记录
  4. 根DNS服务器发起域名解析请求(迭代
    • 根DNS服务器返回顶级域DNS服务器地址
  5. 本地DNS服务器顶级域DNS服务器发起请求。
    • 顶级域DNS服务器接收请求并返回Name Server服务器
  6. 本地DNS服务器Name Server服务器请求,Name Server服务器返回IP地址给本地服务器
  7. 本地域名服务器缓存解析结果
  8. 返回解析结果给用户
    在这里插入图片描述

3、DNS应用层协议,使用UDP传输,UDP快!

4、HTTP的请求方法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
在这里插入图片描述

5、GET和POST的区别

  1. get是获取数据,post是修改数据
  2. get把请求的数据放在url上,以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(request body)
  3. get提交的数据最大时2K(实际上取决于浏览器),post理论上没有限制
  4. get产生一个TCP数据包,浏览器会把http header和data一并发出去,服务器响应200;而post产生2个数据包,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200 ok;
  5. get请求会被浏览器主动缓存,而post不会,除了手动缓存
  6. 本质区别,get是幂等的,post不是幂等的
    • 幂等性就是一次和多次请求一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样给的结果。

6、HTTP和HTTPS的区别

  1. HTTP是80端口,HTTPS是443端口
  2. HTTPS需要ca申请证书
  3. HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输的隐私信息非常不安全。HTTPS协议是由SSL+HTTPS协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全

7、SSL加密是什么

在这里插入图片描述
SSL仅非用于HTTP,可用于任何应用层协议

借鉴自大佬:
大佬博客链接
在这里插入图片描述
第一步 :客户端A开启一个新的浏览器访问客户端时,会先让A安装一个数字证书,这个证书主要包含的是CA机构的公钥。
第二步:服务端B发来CA机构给自己的证书,通过CA公钥解密被CA私钥加密的hash1,然后再用B的证书里面的hash算法将信息生成一个hash2,通过比较两个hash,若相等,确认这个数字证书是服务端B的。

由于非对称加密算法复杂度和计算量大,对称加密效率高,SSL就将这两种加密算法混合着用,这样安全和效率就都能保证了。 其中具体的过程如下:

第一步 客户端A给出 支持的SSL版本+一个随机数+自己支持的加密方式
第二步 服务端B接收到这些信息后确认加密方式+自己的安全证书+一个随机数发给A
第三步 客户端A确认数字证书有效性(验证方法上面已经说明),然后生成一个随机数,并将这个随机数用B的数字证书公钥加密后发送给A。
第四步 服务端B使用自己的私钥解密这个随机数
第五步 A和B通过第二步确定的加密方法将前三个随机数生成一个对话密钥 用来接下来的通信(个人感觉不需要三个随机数,只用最后一个就够了,这样做可能是为了更安全)
于是A和B就能那个用对称加密的方式快速有效安全的通信了。

在这里插入图片描述

对称密钥的优点缺点

优点:运算速度快
缺点:无法安全地将密钥传输给通信方

非对称密钥的优点缺点

8、HTTP请求和响应报文有哪些字段

请求报文

请求行:Request body
请求头:Request Headers
请求体:Request body

响应报文

状态行:Status Line
响应头:Response Headers
响应体:Response body

9、Cookie和Session的对比

HTTP作为无状态协议,必然需要再某种方式保持连接。这里 简要介绍一下Cookie和Session

Cookie1(阿秀)

Cookie是客户端保持状态的方法。

Cookie简单的理解就是存储由服务器发至客户端并由客户端保存的一段字符串。为了保持会话,服务器可以响应客户端请求时将Cookie字符串放在Set-Cookie下,客户端收到Cookie后保存这段字符串,之后再请求时候带上Cookie就可以被识别。

Cookie在客户端的保存形式可以有两种:

  • 会话Cookie,就是将服务器返回的Cookie字符串保存在内存中,关闭浏览器后自动销毁
  • 持久Cookie则是存储在客户端磁盘上,其有效时间在服务器响应头中被指定,在有效期内,客户端再次请求服务器时可以直接从本地取出。注意:存在磁盘里的Cookie可以被多个浏览器代理所共享的。

Session1

Session是服务器保持状态的方法。

Session保存在服务器上,可以保存在数据库、文件或内存中,每个用户有独立的Session用户在客户端上记录用户的操作。我们可以理解为每个用户有一个独一无二的Session ID作为Session文件的Hash键,通过这个值可以锁定具体的Session结构的数据,这个Session结构中存储了用户操作行为。

当服务器需要识别客户端时就需要结合Cookie了。客户端都会发送响应的Cookie信息到服务端。实际上大多数的应用都是用cookie来实现session跟踪的。第一次创建session的时候,服务端会在HTTP协议中告诉客户端,需要在cookie里面记录一个session id,以后每次请求把这个会话ID发送给服务器,我就知道你是谁了。如果客户端的浏览器禁用了cookie,会使用一种URL重写的技术来进行会话跟踪,即每次进行HTTP交互,URL后面都会被附加上一个诸如sid=xxxxx这样的参数,服务端据此来识别用户,这样就可以帮用户完成诸如用户名等信息自动填入的操作。

版权声明:以下的cookie和session为CSDN博主「那兔1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:cookie和session的区别

cookie2

  1. 什么是cookie
    Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

  2. 为什么要用cookie
    由于http协议是一种无状态的协议(客户端和服务端互相不认识)

Cookies是一些存储在用户电脑上的小文件。它是被设计用来保存一些站点的用户数据,这样能够让服务器为这样的用户定制内容。页面代码能够获取到Cookie值然后发送给服务器,比如Cookie中存储了所在地理位置,以后每次进入地图就可以默认定位到改地点。

  1. cookie的原理
    cookie的执行原理:就是当客户端访问服务器的时候(服务器运用了cookie),服务器会生成一份cookie传输给客户端,客户端会自动把cookie保存起来,以后客户端每次访问服务器,都会自动的携带着这份cookie。

简单来说,就是当客户端访问服务器时,服务器会生成一个票据给客户端,当客户端收到票据的之后就保存起来,以后再访问服务器就会自动带着票据。

简易cookie原理示意图 如下图所示:
在这里插入图片描述

session2

1.什么是session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了session是一种特殊的cookie。cookie是保存在客户端的,而session是保存在服务端。

2.为什么要用session
由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了

3.session原理
当客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据(session)的id以cookie的形式传递给客户端;以后的每次请求,浏览器都会自动的携带cookie来访问服务器(session数据id)。

简易cookie原理示意图 如下图所示:
在这里插入图片描述
cookie和session的共同点
cookie和session都是用来跟踪浏览器用户身份的会话方式。

cookie和session区别

  1. cookie是保存在客户端的
  2. cookie有大小限制
  3. session是保存在服务器端
  4. session更加安全
  5. session会比较占用服务器性能,当访问增多时应用cookie

10、Session和cookie应该如何去选择(适用场景)?

  1. Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;

  2. Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;

  3. 对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。

11、Cookies和Session区别是什么?

Cookie和Session都是客户端与服务器之间保持状态的解决方案

  1. 存储的位置不同,cookie:存放在客户端,session:存放在服务端。Session存储的数据比较安全
  2. 存储的数据类型不同 两者都是key-value的结构,但针对value的类型是有差异的 cookie:value只能是字符串类型,session:value是Object类型
  3. 存储的数据大小限制不同 cookie:大小受浏览器的限制,很多是是4K的大小, session:理论上受当前内存的限制
  4. 生命周期的控制 cookie的生命周期当浏览器关闭的时候,就消亡了
    • cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束
    • session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销

12、长连接和短连接

HTTP1.0是短连接,一个服务器在发送完一个HTTP响应后,会断开TCP连接。缺点:每次请求后重新建立和断开TCP连接,代价过大。
但某些服务器对Connection:keep-alive的header进行了支持。意思就是完成这个HTTP请求之后,不要断开HTTP请求使用的TCP连接,可以重新使用。

HTTP1.1是长连接,会维持一段时间的TCP连接,不会再每次请求后都断掉。

13、GET和POST传递数据的最大长度能达到多少?

GET

get 是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。

很多文章都说GET方式提交的数据最多只能是1024字节而实际上,URL不存在参数上限的问题,HTTP协议规范也没有对URL长度进行限制。

这个限制是特定的浏览器及服务器对它的限制,比如IE对URL长度的限制是2083字节(2K+35字节)。对于其他浏览器,如FireFox,Netscape等,则没有长度限制,这个时候其限制取决于服务器的操作系统;即如果url太长,服务器可能会因为安全方面的设置从而拒绝请求或者发生不完整的数据请求。

POST

post 理论上讲是没有大小限制的,HTTP协议规范也没有进行大小限制,但实际上post所能传递的数据量大小取决于服务器的设置和内存大小。

因为我们一般post的数据量很少超过MB的,所以我们很少能感觉的到post的数据量限制,但实际中如果你上传文件的过程中可能会发现这样一个问题,即上传个头比较大的文件到服务器时候,可能上传不上去。

14、常见的HTTP状态码

1XX,信息性状态码,接收的请求正在处理

100 continue:表明到目前为止,客户端可以继续发送请求或者忽略这个响应

2XX,成功状态码,请求正常处理完毕

200 OK
200表示请求在服务器端被正常处理了。在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。

204 No Content
204表示服务器接收的请求已经成功处理,但是在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。当浏览器在发送请求后接收到204响应,它的显示页面不会发生更新。

通常应用在只需要客户端往服务端发送信息,而服务端不需要发送新信息的情况下使用。

206 Partial Content
206表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文内包含由Content-Range指定范围的实体内容。

3XX,重定向状态码,需要进行附加操作以完成请求

301 Moved Permanently
永久重定向,301状态码表示请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。

302 Found
临时重定向,302表示请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问。和301不同的是,这种资源的URI变更是临时的额,而不是永久的,因此不用去更新书签。

303 See Other
该状态码和 302 有着异曲同工之妙,表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。

如果浏览器原本是用POST方法去请求服务器,收到303状态码之后,会改用GET并访问资源新的URI。

304 Not Modified
304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。例如,客户端请求的资源在客户端本地已有缓存,会在请求头部中加入“If-Modified-Since", "If-None-Match"等字段,服务端根据这些字段信息判断这些资源信息是否经过修改,如果没有则返回 304 状态码,客户端可以直接使用缓存中的资源。

304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。

PS:附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部。

307 Temporary Redirect
临时重定向,和 302 Found 状态码有相同的含义。区别在于 307 不会强制浏览器将 POST 方法改为 GET 方法,而是遵循浏览器自身的标准。

4XX,Client Error,客户端状态码错误,服务器无法处理请求

400 Bad Request
400 状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。

401 Unauthorized
401 状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。第一次收到 401 状态码表示需要进行用户认证,第二次再收到 401 状态码说明用户认证失败。

403 Forbidden
403 状态码表明对请求资源的访问被服务器拒绝了,当未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能发生 403 。

404 Not Found
404 是我们最常见的状态码之一,它表示服务器上无法找到请求资源。此外,也可能是服务器端在拒绝请求且不想说明原因的时候使用。

5XX ,服务器错误状态码,服务器本身错误

500 Internal Server Error
500 状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。

503 Service Unavailable
503 状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值