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的区别?


  1. https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的;
  4. HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


session与cookie的对比?


  1. session数据存储在服务器,cookie数据存储在客户端浏览器上
  2. cookie不是很安全,我们可以查询伪造存储再客户端的cookie进行欺骗请求,考虑到安全应该使用session
  3. session会在一定时间内保存在服务器,当访问量增多时,会比较占用服务器性能,考虑到性能时可以使用cookie
  4. 单个cookie保存的数据不能超过4kb,很多浏览器会限制一个站点最多保存的cookie数
  5. cookie具有不可跨域名性
  6. 会话cookie和持久cookie:
  7. 会话cookie即不设置过期时间,会随着浏览器关闭就消失的cookie,一般存储在内存中;
  8. 持久cookie即设置了过期时间,即使关闭了浏览器也不会消失的cookie,一般存在硬盘中;再次打开浏览器仍然有效,直到达到过期时间。
  9. session共享:
  10. 对于多网站单服务器(同一父域名不同子域名)如何解决不同网站之间的SessionId共享问题?由于域名不同(a.test.com,b.test.com),而sessionId又分别存储再不同的cookie中,我们的思路就是改变cookie的存储范围到父域名,达到共享cookie的目的,从而实现SessionId的共享。
  11. 由此带来的弊端是子站之间的cookie信息也被共享了
  12. 比较好的实践是:把登录信息等敏感数据保存到session中,其他非敏感数据保存在cookie中


输入一个网址到浏览器渲染出页面的流程是什么?


  1. 在客户端浏览器中输入网址URL。
  2. 发送到DNS(域名服务器)获得域名对应的WEB服务器的IP地址。
  3. 客户端浏览器与WEB服务器建立TCP(传输控制协议)连接。
  4. 客户端浏览器向对应IP地址的WEB服务器发送相应的HTTP或HTTPS请求。
  5. WEB服务器响应请求,返回指定的URL数据或错误信息;如果设定重定向,则重定向到新的URL地址。
  6. 客户端浏览器下载数据,解析HTML源文件,解析的过程中实现对页面的排版,解析完成后,在浏览器中显示基础的页面。
  7. 分析页面中的超链接,显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部显示。
相关文章
|
6月前
|
JavaScript 前端开发 Java
【GoWails】Go做桌面应用开发?本篇文章带你上手Wails框架!一步步带你玩明白前后端双端的数据绑定!
wails是一个可以让你使用Go和Web技术编写桌面应用的项目 可以将它看作Go的快并且轻量级的Electron替代品。可以使用Go的功能,并结合现代化UI完成桌面应用程序的开发
1232 5
|
6月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
563 1
|
6月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
539 4
|
8月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
815 0
|
9月前
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
412 1
|
9月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
405 24
|
10月前
|
算法 Java Go
Go内存原理-GC原理
本文介绍了Go语言中垃圾回收(GC)机制的发展与实现原理,涵盖从标记-清除算法到三色标记法,再到三色标记加混合写屏障的演进过程,重点解析各版本GC的核心思想、优缺点及性能优化方向。
324 4
|
10月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
10月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
10月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。