计算机网络知识总结

1.HTTP响应码 301 和 302 的意思及区别

301,302 都代表着某个URL发生了转移(重定向)。

区别:

  • 301 redirect: 301 代表永久性转移(Permanently Moved)。
  • 302 redirect: 302 代表暂时性转移(Temporarily Moved )。

2.forward 和 redirect 的区别

Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。

直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求。在请求对象request中,保存的对象对于每个信息资源是共享的。

间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

3.TCP和UDP的区别

  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。

  2. TCP提供可靠的服务。Tcp通过校验和重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

  3. UDP尽最大努力交付,即不保证交付的可靠;UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。

  5. TCP对系统资源要求较多,UDP对系统资源要求较少。

4.TCP为什么要三次握手

  为了实现可靠数据传输,TCP 协议的通信双方, 都必须维护一个序列号(Seq), 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。

  如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

5.OSI 的七层模型

  1. 应用层:网络服务与最终用户的一个接口。(协议:HTTP、FTP、DNS、SMTP、Telnet)
  2. 表示层:数据的表示、安全、压缩。
  3. 会话层:建立、管理、终止会话。
  4. 传输层:定义传输数据的协议端口号,以及流控和差错校验。(协议:TCP、UDP)
  5. 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。(协议:IP)
  6. 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。
  7. 物理层:建立、维护、断开物理连接。

6.GET和POST的区别

使用上的区别:

  1. GET使用URL或Cookie传参,而POST将数据放在BODY中。
  2. GET方式提交的数据有长度限制,则POST的数据则可以非常大。
  3. POST比GET安全,因为数据在地址栏上不可见。
  4. GET产生一个TCP数据包;POST产生两个TCP数据包。

终极区别:GET和POST最大的区别主要是GET请求是幂等性的,POST请求不是。

W3School

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET参数通过URL传递,POST放在Request body中。
  • GET请求在URL中传送的参数是有长度限制的,而POST没有。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

7.从浏览器中输入URL到页面展示的流程

  1. 输入URL:智能匹配(浏览器)、浏览器解析URL
  2. 浏览器查找域名IP地址:hosts文件——缓存——最近的DNS服务器——根域DNS服务器——域名服务器——域名解析器地址——缓存
  3. 浏览器根据获得的IP向web服务器发送一个HTTP请求:TCP连接请求(三次握手)——内核的TCP/IP协议栈——防火墙
  4. 服务器永久重定向:301、302
  5. 浏览器跟踪重定向地址:发送另一个HTTP请求到新地址
  6. 服务器处理请求:反向代理(Nginx)、负载均衡——MVC、是否调用其他RPC服务/异步消息——缓存——分库分表数据库(系统架构)
  7. 服务器响应HTTP请求,返回一个HTTP响应:状态行、响应头、响应正文
  8. 浏览器显示HTML:自上而下加载、渲染、DOM树
  9. 浏览器请求嵌入在HTML中的资源:CSS、JS、图片、音频、视频

8.如何实现跨域

方式一:图片ping或script标签跨域

图片ping常用于跟踪用户点击页面或动态广告曝光次数。
script标签可以得到从其他来源数据,这也是JSONP依赖的根据。

方式二:JSONP跨域

  JSONP(JSON with Padding)是数据格式JSON的一种“使用模式”,可以让网页从别的网域要数据。根据 XmlHttpRequest 对象受到同源策略的影响,而利用 <script>元素的这个开放策略,网页可以得到从其他来源动态产生的JSON数据,而这种使用模式就是所谓的 JSONP。用JSONP抓到的数据并不是JSON,而是任意的JavaScript,用 JavaScript解释器运行而不是用JSON解析器解析。所有,通过Chrome查看所有JSONP发送的Get请求都是js类型,而非XHR。

缺点:

  • 只能使用Get请求
  • 不能注册success、error等事件监听函数,不能很容易的确定JSONP请求是否失败
  • JSONP是从其他域中加载代码执行,容易受到跨站请求伪造的攻击,其安全性无法确保

方式三:CORS

  Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,确保安全的跨域数据传输。现代浏览器使用CORS在API容器如XMLHttpRequest来减少HTTP请求的风险来源。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。服务器一般需要增加如下响应头的一种或几种:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400

跨域请求默认不会携带Cookie信息,如果需要携带,请配置下述参数:

“Access-Control-Allow-Credentials”: true

// Ajax设置

“withCredentials”: true

方式四:window.name+iframe

  window.name通过在iframe(一般动态创建)中加载跨域HTML文件来起作用。然后,HTML文件将传递给请求者的字符串内容赋值给window.name。然后,请求者可以检索window.name值作为响应。

  • iframe标签的跨域能力;
  • window.name属性值在文档刷新后依旧存在的能力(且最大允许2M左右)。

  每个iframe都有包裹它的window,而这个window是top window的子窗口。contentWindow属性返回<iframe>元素的Window对象。你可以使用这个Window对象来访问iframe的文档及其内部DOM。

方式五:window.postMessage()

  HTML5新特性,可以用来向其他所有的 window 对象发送消息。需要注意的是我们必须要保证所有的脚本执行完才发送 MessageEvent,如果在函数执行的过程中调用了它,就会让后面的函数超时无法执行。

方式六:修改document.domain跨子域

  前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域,所以只能跨子域。

  在根域范围内,允许把domain属性的值设置为它的上一级域。例如,在”aaa.xxx.com”域内,可以把domain设置为 “xxx.com” ,但不能设置为 “xxx.org” 或者”com”。

方式七:WebSocket

  WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server push技术的一种很棒的实现。相关文章,请查看:WebSocket、WebSocket-SockJS

需要注意:WebSocket对象不支持DOM 2级事件侦听器,必须使用DOM 0级语法分别定义各个事件。

方式八:代理

同源策略是针对浏览器端进行的限制,可以通过服务器端来解决该问题

DomainA客户端(浏览器) ==> DomainA服务器 ==> DomainB服务器 ==> DomainA客户端(浏览器)

9.JSONP实现原理

  jsonp 即 json+padding,动态创建script标签。利用script标签的src属性可以获取任何域下的js脚本,通过这个特性(也可以说漏洞),服务器端不在返回json格式,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

谢谢你请我吃糖果!
0%