Go 做 Web 开发,有哪些必懂的概念和底层原理呢?
Go 天生支持高并发等特性,不仅适合做服务器端开发、分布式存储,同样适合 Web 网络应用开发。
TCP 协议和 UDP 协议的对比?
TCP 协议的优点:
可靠稳定
TCP 在传输数据之前,会有三次握手来建立连接
TCP 在传输数据时,有确认、窗口、重传、拥塞控制机制
TCP 在传输数据完成后,会断开连接用来节省系统资源
TCP 协议的缺点:
慢,传输效率低
占用系统资源高
容易被攻击(DOS/DDOS/CC 攻击)
UDP 协议的优点:
快
无连接的方式,占用系统资源少
比 TCP 安全
UDP 协议的缺点:
不可靠,不稳定
没有可靠的机制,当网络条件不好时,容易丢包
各种攻击的名词解释
DOS 攻击
Denial of Service,即拒绝服务攻击,其目的是使计算机或网络无法提供正常的服务。常见的 DOS 攻击有:
计算机网络带宽攻击:以极大的通信量冲击网络,使所有可用的网络资源消耗殆尽,最终导致合法的用户请求也无法通过。
连通性攻击:用大量的连接请求冲击计算机,使得所有可用的操作系统资源消耗殆尽,最终计算机无法处理正常用户的请求。
DDOS 攻击
Distributed Denial of Service,即分布式拒绝服务攻击,是在 DOS 攻击上发展而来的。
因为个人黑客攻击者很难使用高带宽的资源,为了克服这个缺点,黑客们开发了分布式的攻击。
攻击者简单工具,集合许多网络带宽同时对一个目标发动大量的攻击请求,这就是 DDOS 攻击。
CC 攻击
Challenge Collapsar Attack,挑战黑洞攻击,是 DDoS 攻击的一种类型。
使用代理服务器向受害服务器发送大量貌似合法的请求
阻塞调用和同步调用的区别?
首先说明一下,阻塞调用和同步调用是不同的
从底层来讲,同步调用的当前线程还是激活的,只是从逻辑上来讲没有返回而已。当前线程还可以处理其他各种各样的信息。
但是阻塞调用则不然,阻塞调用是说当前线程是阻塞不可用的状态,不仅没有返回。而且当前线程不可以处理其他信息。
关于同步异步 I/O 和 阻塞非阻塞 I/O 更深刻的理解
准备阶段和操作阶段
首先说明一下针对网络 IO 的操作,可以分为两个阶段,准备阶段和操作阶段
准备阶段:判断能否进入准备阶段,即等待数据是否可用,这一阶段在内核进程中完成
操作阶段:执行实际的 IO 调用,数据从内核缓冲区拷贝到用户进程缓冲区。
同步或者异步 IO
是指访问数据的机制,也就是实际 IO 操作的完成方式
同步一般指主动发送请求并等待 IO 操作完毕的方式,IO 操作未完成前,会导致应用程序挂起
异步是指用户触发 IO 操作后就开始做自己的事情,当 IO 操作已经完成的时候会得到 IO 完成的通知(异步的特点就是通知),这样可以使进程在数据读写时不阻塞。
阻塞或者不阻塞 IO
主要是指 IO 操作第一阶段的完成方式(内核缓冲区的数据未就绪),数据还没有准备好的时候,应用程序的表现,如果这里进程挂起,就是阻塞 IO,否则是非阻塞 IO。
阻塞和非阻塞是针对于进程在访问数据的时候,根据 IO 操作的就绪状态来采取不同的方式。
更简单点说:阻塞和非阻塞是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待;非阻塞方式下,读取或者写入函数会立即返回一个状态值。
http 与 https 的区别?
https 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。
http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl/tls 加密传输协议。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。http 的连接很简单,是无状态的;
HTTPS 协议是由 SSL/TLS+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
session 与 cookie 的对比?
session 数据存储在服务器,cookie 数据存储在客户端浏览器上
cookie 不是很安全,我们可以查询伪造存储再客户端的 cookie 进行欺骗请求,考虑到安全应该使用 session
session 会在一定时间内保存在服务器,当访问量增多时,会比较占用服务器性能,考虑到性能时可以使用 cookie
单个 cookie 保存的数据不能超过 4kb,很多浏览器会限制一个站点最多保存的 cookie 数
cookie 具有不可跨域名性
会话 cookie 和持久 cookie:
会话 cookie 即不设置过期时间,会随着浏览器关闭就消失的 cookie,一般存储在内存中;
持久 cookie 即设置了过期时间,即使关闭了浏览器也不会消失的 cookie,一般存在硬盘中;再次打开浏览器仍然有效,直到达到过期时间。
session 共享:
对于多网站单服务器(同一父域名不同子域名)如何解决不同网站之间的 SessionId 共享问题?由于域名不同(a.test.com,b.test.com),而 sessionId 又分别存储再不同的 cookie 中,我们的思路就是改变 cookie 的存储范围到父域名,达到共享 cookie 的目的,从而实现 SessionId 的共享。
由此带来的弊端是子站之间的 cookie 信息也被共享了
比较好的实践是:把登录信息等敏感数据保存到 session 中,其他非敏感数据保存在 cookie 中
输入一个网址到浏览器渲染出页面的流程是什么?
在客户端浏览器中输入网址 URL。
发送到 DNS(域名服务器)获得域名对应的 WEB 服务器的 IP 地址。
客户端浏览器与 WEB 服务器建立 TCP(传输控制协议)连接。
客户端浏览器向对应 IP 地址的 WEB 服务器发送相应的 HTTP 或 HTTPS 请求。
WEB 服务器响应请求,返回指定的 URL 数据或错误信息;如果设定重定向,则重定向到新的 URL 地址。
客户端浏览器下载数据,解析 HTML 源文件,解析的过程中实现对页面的排版,解析完成后,在浏览器中显示基础的页面。
分析页面中的超链接,显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部显示。
一起学习,升级打怪
我们搞了一个对学 Go 真正有帮助的群,欢迎加入:
公众号:程序员升级打怪之旅
微信号:wangzhongyang1993
版权声明: 本文为 InfoQ 作者【王中阳Go】的原创文章。
原文链接:【http://xie.infoq.cn/article/bdb3255e43ace5060dc831f89】。文章转载请联系作者。
评论 (1 条评论)