热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

goweb编程要点总结

web服务器的工作原理客户端通过TCPIP协议建立到服务器的TCP的连接客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档服务器向客户端发送HTTP协议应

web服务器的工作原理


  1. 客户端通过TCP/IP协议建立到服务器的TCP的连接
  2. 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
  3. 服务器向客户端发送HTTP协议应答包,如果请求的资源包含动态语言的内容,那么服务器会调用动态语言解释引擎负责处理动态内容,并将处理得到的数据返回给客户端
  4. 客户端与服务器断开。由客户端解释HTML文档,渲染图形结果

URL和DNS解析

URL(Uniform Resource Locator)

统一资源定位符的英文缩写,基本格式如下:


  • scheme://host[:port#]/path/.../[?query-string][#anchor]
  • scheme 指定底层使用协议(http,https,ftp)
  • host HTTP服务器的IP地址或者域名
  • port# HTTP服务器默认端口是80,可以省略。如果使用了别的端口必须指定
  • path 访问资源的路径
  • query-string 发送给http服务器的数据
  • anchor 锚

DNS(Domain Name System)

域名系统英文缩写,使用TCP/IP网络,从事将主机名或者域名转换为实际IP地址的工作

DNS解析过程


  1. 浏览器中输入域名,操作系统会先检查自己本地的hosts文件是否有这个网络映射关系,如果有,就先调用这个IP地址映射,完成域名解析
  2. hosts没有域名,查找本地DNS解析器缓存,如果有直接返回
  3. 还没找到,会查找TCP/IP参数中设置的首选DNS服务器,我们叫它本地DNS服务器,此服务收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务已经缓存了地址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性
  5. 上述过程实习,则根据本地DNS服务器的设置进行查询,如果未用转发模式,则把请求发给根服务器,根服务器返回一个负责该顶级服务器的IP,本地DNS服务器收到IP信息后,再连接该IP上的服务器进行解析,如果仍然无法解析,则发送下一级DNS服务器,重复操作,直到找到
  6. 转发模式则把请求转发至上一级DNS服务器,如果仍然不能解析,再转发给上上级。不管是否转发,最后都把结果返回给本地DNS服务器
  7. 上述一个是迭代查询,一个是递归查询。递归查询的过程是查询者发生了更替,而迭代查询过程,查询者不变

HTTP协议详解

HTTP是一种让web服务器与浏览器(客户端)通过internet发送与接受数据的协议

建立在TCP协议之上,一般采用80端口

它是一个请求、响应协议。客户端建立连接并发送请求。服务端不能主动去与客户端联系,也不能发送一个回调连接,客户端可提前中断连接。

HTTP请求是无状态的,每个请求之间没有关联。为了解决这个问题引入了COOKIE机制

Dos(拒绝服务攻击)和Ddos(分布式拒绝服务攻击),是一种利用TCP协议缺陷,发送大量伪造TCP连接请求,从而使被攻击方资源耗尽

HTTP请求包


  • Request line
  • Request header
  • body

请求方法

GET、PSOT、PUT、DELETE

GET和POST区别


  • GET提交的数据放在URL之后,以?分割URL和传输数据,参数之间以&相连。POST方法把提交数据放在HTTP的body中
  • GET提交数据大小有限制,因为浏览器对URL长度有限制,而POST方法提交数据没有限制
  • GET提交数据有安全问题,用户名和密码都出现在URL上,如果页面被缓存其他人可以访问这台机器就可以获得帐号和密码

HTTP响应包

状态行

服务器使用的WEB软件名及版本、发送时间、服务器发送信息的类型、表示http包的分段发送、保持连接状态、主题内容长度、空行用来分割消息头和主题、消息体

状态行由HTTP协议版本号、状态吗、状态消息三部分组成

状态吗


  • 1XX 提示信息--表示请求被成功接收,继续处理
  • 2XX 成功--表示请求被成功接收,理解,接受
  • 3XX 重定向--要完成请求必须进行更进一步处理
  • 4XX 客户端错误--请求语法错误或者请求无法实现
  • 5XX 服务器端错误--服务器未能实现合法请求

HTTP协议和Connection:keep_alive的区别

HTTP是一个无状态面向连接的协议,无状不代表HTTP不能保持TCP连接

keep-alive,当一个网页打开完成后,客户端和服务端之间用于HTTP数据的TCP连接不会关闭,,再次访问时,继续使用之前建立的连接

keep-alive不会永久保持连接,有一个保持时间

第一次请求url,服务器返回的是html页面,然后浏览器开始渲染HTML:当解析到HTML DOM里面的图片连接,css脚本和js脚本的连接,浏览器会自动发起一个请求静态资源的HTTP请求,获取相应静态资源,厚燃浏览器会渲染出来,最终将所有资源整合、渲染、完整展现在屏幕上。

网页优化有一向措施是减少HTTP请求次数,把尽量多的css和js资源合并在一起

http包运行机制

go web编程 要点总结

 

创建listen socket,监听指定端口,等待客户端请求到来

listen socket接受客户端的请求,得到client socket,接下来通过client socket与客户端通信

处理客户端请求,先从client socket读取http请求的协议头,如果是POST方法,还可能要读取客户端提交的数据,然后交给相应的handler处理请求,handler处理完毕后,通过client socket写给客户端

go web编程 要点总结

 

梳理代码执行过程


  1. 首先调用Http.HandleFunc,按顺序做如下操作
  2. 调用DefaultServerMux的HandleFunc
  3. 调用DefaultServerMux的Handle
  4. 往DefaultServeMux的map[string]muxEntry中增加对应的handler和路由规则
  5. 其次调用http.ListenAndServe,按顺序做如下操作
  6. 实例化Server
  7. 调用Server的ListenAndServe()
  8. 调用net.listen("tcp",addr)监听端口
  9. 启动一个for循环,在循环体中Accept请求
  10. 对每个请求实例化一个Conn,并且开启一个goroutine为这个请求进行服务go c.serve()
  11. 读取每个请求的内容w, err := c.readRequest()
  12. 判断handler是否为空,如果没有设置handler,handler就设置为DefaultServeMux
  13. 调用handler的ServeHttp
  14. 根据request选择handler,并且进入到这个handler的ServeHttp
  15. 选择handler
  16. 判断是否有路由能满足这个request
  17. 如果有路由满足,调用路由handler的ServeHttp
  18. 如果没有路由满足,调用NotFoundHandler的ServeHttp

表单

Request本身提供了FormValue()函数,如r.Form["username"]可以写成r.FormValue("username")

r.FormValue会自动调用r.ParseForm

模版使用

变量名首字母要大写,不然模版无法识别


推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
author-avatar
r_elease靜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有