网络

119 阅读3分钟

说说网络的五层模型

从上到下分别为:应用层、传输层、网络层、数据链路层、物理层。在发送消息时,每一层会在上一层的基础上加包,而接收消息时,则会自下而上解包,最终得到原始信息。

其中: 应用层主要面向互联网中的应用场景、比如网页(http)、邮件(smtp/pop3)、文件中心(ftp)、域名解析为 ip 地址(DNS)等等。

传输层主要面向传输过程,比如 TCP 协议是为了保证可靠的传输(http),而 UDP 协议则是一种无连接的广播(直播场景),它们提供了不同的传输方式。

网络层主要解决如何定位目标以及如何寻找最优路径的问题,比如 IP 等等。

数据链路层的作用是将数据在一个子网(广播域)内有效传输,MAC地址、交换机都是属于该层的。

物理层是要解决二进制数据到信号之间的互转问题,集线器、双绞线、同轴电缆等都是属于该层的设备。

http 常见的请求方法有哪些

  • GET 表示向服务器获取资源
  • POST 表示向服务器提交信息,通常用于产生新的数据,比如注册
  • PUT 表示希望修改服务器的数据,通常用于修改
  • DELETE 表示希望删除服务器的数据
  • OPTIONS 发生在跨域的预检请求中,表示客户端向服务器申请跨域提交
  • TRACE 回显服务器收到的请求,主要用于测试和诊断
  • CONNECT 用于建立连接管道,通常在代理场景中使用,网页中很少用到

GET 和 POST 的区别

从 http 协议的角度来说,GET 和 POST 它们都只是请求行中的第一个单词,除了语义不同,其实并没有本质的区别。 之所以在实际开发中会产生各种区别,主要是因为浏览器的默认行为造成的。 受浏览器的影响,在实际开发中,GET 和 POST 有以下区别:

  • 浏览器在发送 GET 请求时,不会附带请求体
  • GET 请求的传递信息量有限,适合传递少量数据;POST 请求的传递信息量是没有限制的,适合传递大量数据
  • GET 请求只能传递 ASCII(阿sei可) 数据,遇到非 ASCII 数据需要进行编码,现代浏览器会自动编码,但现在也有一些需要我们手动编码的case,比如在做单点登录登出时,我们一般会将location.href作为回跳地址参数传递,此时我们应该对于这个地址手动 encodeURIComponent编码,消除潜在的“&”带来的影响;POST请求没有这个限制。
  • 大部分 GET 请求传递的数据都附带在 path 参数中,能通过分享地址完整的重现页面,但这样同时也就暴露了数据,所以敏感数据传递不应使用 GET 请求,至少不应该放到 path 中
  • 刷新页面时,若当前页面是通过 POST 请求得到的(form 标签 post 提交后返回了HTML),则浏览器会提示用户是否重新提交,若是GET请求得到的页面则没有提示。
  • GET 请求的地址可以保存为浏览器书签,POST 不可以。