从零开始学Go web——第一天

文章目录

  • 从零开始学Go web——第一天
    • 一、Go与web应用简介
      • 1.1 Go的可扩展性
      • 1.2 Go的模块化
      • 1.3 Go的可维护
      • 1.4 Go的高性能
    • 二、web应用
      • 2.1 工作原理
      • 2.2 各个组成部分
        • 2.2.1 处理器
        • 2.2.2 模板引擎
    • 三、HTTP简介
    • 四、HTTP请求
      • 4.1 请求的文本数据
      • 4.2 请求方法
        • 4.2.1 请求方法类型
        • 4.2.2 安全的请求方法
        • 4.2.2 幂等的请求方法
        • 4.2.2 浏览器对请求方法的支持
      • 4.3 请求首部
    • 五、HTTP响应
      • 5.1 响应状态码
      • 5.2 响应首部
      • 5.3 URI
    • 六、HTTP/2

从零开始学Go web——第一天

​ “工欲善其事必先利其器”!学习web的第一天,当然是要学习与web息息相关的就是HTTP协议等知识点,因此第一天让我们一起聊聊Go与web的关系、web应用、HTTP的简介/请求/响应以及HTTP2协议, 开启快乐学习Go web!

一、Go与web应用简介

​ Go语言是一门函数式和过程式并存语言,并且提供了现代化包管理系统、垃圾收集机制、以及各种功能强大的标准库。

​ 而web应用具备的四个条件:

  • 可扩展的:简单、快速地提升应用的性能以便处理更多的请求。比如管理者可以通过添加硬件来提升请求处理能力
  • 模块化:大规模的web应用应该由可替换的组件构成,使得可以快速添加、移除、修改,以便更好地复用。
  • 可维护
  • 高性能

1.1 Go的可扩展性

Go语言的扩展包括两个方面:

  • 水平扩展: Go语言可以编译为不包含动态依赖关系的静态二进制文件,从而可以在没有安装Go语言的系统里面部署Go web应用。
  • 垂直扩展: Go web应用只需要一个操作系统线程,就可以高效运行数十万个goroutine。

1.2 Go的模块化

Go语言的模块化包括以下两个方面:

  • Go语言的接口。接口可以实现动态类型匹配机制,其中Go语言的函数可以接受接口作为参数,用户只需要实现了接口的方法,就可以将接口作为参数传递给函数,实现动态类型传参。同时,Go语言也实现了一个空接口,可以把任何类型的值作为函数的实际参数。

  • 创建微服务。创建多个规模较小的Go服务(也就是一个个Go包)并且将它们组合为当个web应用。

1.3 Go的可维护

  • gofmt格式化源代码
  • godoc对go源代码以及注释进行语法分析,并且使用html、纯文本或者其他多种格式生成文档。
  • gotest自动寻找与源代码位于同一个包的测试代码,并进行功能测试和性能测试。同时也提供了web测试工具,如httptest。

1.4 Go的高性能

  • Go程序会编译为本地码,比一般的解释型语言要更加快
  • Go的goroutine对并发编程有了更好的支持。

二、web应用

2.1 工作原理

​ web服务器:对客户端发送的HTTP请求做出响应,并且将响应HTTP返回给客户端。一个web服务器就是一个web应用。
在这里插入图片描述

​ web应用:对请求进行处理,然后执行应用程序中预先设定好的操作。
在这里插入图片描述因此,web服务器是一种特殊的web应用,只会返回请求的文件。若我们要想构建一个web应用,必须符合以下两个条件:

  • 必须向发送命名请求的客户端返回HTML,而客户端会展示渲染后的HTML

  • 在向客户端传输数据的时候必须使用HTTP协议

2.2 各个组成部分

web应用主要包括如下三部分:

  • HTTP请求报文获取客户端输入
  • 处理请求报文
  • 生成HTML,并且以HTTP响应报文的形式返回给客户端。

为了完成这些步骤,web应用被分为处理器(handler)和模板引擎(template engine)两个部分。

2.2.1 处理器

​ 接收和处理客户端请求,调用模板引擎生成HTML并且将数据填充至响应报文中。

2.2.2 模板引擎

​ 通过模板和数据生成最终的HTML,分为静态模板和动态模板:

  • 静态模板:夹杂着占位符的HTML。将占位符替换为对应数据来生成最终的HTML,不包含或者只包含少量的逻辑代码,也称为无逻辑模板
  • 动态模板:包含HTML、占位符、编程语言结构,如条件语句、变量等。如JSP、ASP等及时动态模板引擎。

三、HTTP简介

​ HTTP是万维网的应用层通信协议。目前总共有两个版本:HTTP1.1和HTTP2.0(又称为HTTP/2),目前使用最广泛的还是HTTP1.1。

​ 那么什么是HTTP呢?HTTP是一种无状态、由文本构成的请求-响应协议,使用的是客户端-服务器的计算模型。

  • 无状态:只知道当前的请求和响应,后续的请求对之前的请求一无所知。

  • 请求和响应:发送端发送请求给接收端,接收端响应数据给发送端。

  • 客户端-服务端:客户端称为客户代理,服务端为客户端提供服务。

四、HTTP请求

4.1 请求的文本数据

​ HTTP请求的数据也称为HTTP请求报文,主要有以下四部分组成:

  • 请求行(request-line)
  • 请求首部(header,零个或者多个)
  • 空行(一个)
  • 报文主体(body,可选)

典型的HTTP请求报文如下所示:

GET / HTTP/1.1       		# GET代表的是请求方法(request method),之后跟的是URI,以及所用的HTTP版本
Host: 127.0.0.1:8083 		# 请求首部
User-Agent: curl/7.58.0 	# 请求首部
Accept: */* 				# 请求首部
(空行)   						# 空行,必须存在

注: #后添加的是注释

4.2 请求方法

4.2.1 请求方法类型

​ 请求方法表明了客户端想要对资源执行的操作。HTTP1.1具有GET、PUT、DELETE、OPTIONS、TRACE、CONNECT这六个方法。HTTP1.1只需要实现GET方法和HEAD方法,其它方法都是可选的。

  • GET:命令服务器返回指定的资源

  • HEAD:不要求服务器返回报文的主体。通常应用于只需要获取响应首部。

  • POST: 报文主体数据传递给URI指定资源,数据做啥由服务器本身决定。

  • PUT: 报文主体数据设置为URI指定资源,若URI指定位置有数据则进行替换,否则在URI指定位置上新建一个资源

  • DELETE:删除服务器指定URI资源

  • TRACE: 返回请求本身。

  • OPTIONS: 返回它支持的HTTP方法列表

  • CONNECT: 客户端和服务器建立网络连接。通过用于设置SSL隧道以开启HTTPS功能

  • PATCH: 使用报文主体中的数据对指定URI资源进行修改

4.2.2 安全的请求方法

​ 不会对服务器状态进行修改。GET、HEAD、OPTIONS、TRACE是安全的请求方法

4.2.2 幂等的请求方法

​ 第二次调用,不会对服务器状态进行改变。安全的请求方法是幂等的,此外PUT和DELETE也是幂等的。

4.2.2 浏览器对请求方法的支持

​ GET是所有浏览器支持的。

​ 对于传输的数据来说,HTML不支持除了GET和POST之外其他HTTP请求方法。但是用户可以通过XHR来获取PUT和DELETE的支持,该技术可以实现XML、JSON、纯文本等任何格式的请求和响应。

4.3 请求首部

​ 记录了与请求本身以及客户端相关的信息。由任意多个冒号分隔的纯文本键值对组成,以回车和换行结尾。

​ 注:Host首部字段是HTTP1.1强制要求的首部,其余的都是可选的。

​ 若请求报文中包含了请求主题,那么请求首部需要携带内容长度(Content-Length)或者传输编码(Transfer-Encoding)字段。
在这里插入图片描述
在这里插入图片描述

五、HTTP响应

​ HTTP响应报文是对HTTP请求报文的回复,主要有以下四部分组成:

  • 状态行(一个)
  • 响应首部(header,零个或者多个)
  • 空行(一个)
  • 报文主体(body,可选)

典型的HTTP响应报文如下所示:

HTTP/1.1 200 OK 								# 状态行,包含HTTP协议类型,状态码(status code)和相应的原因短语(reason phrase)
Content-Type: text/plain; charset=utf-8 		# 响应首部
Date: Mon, 27 Nov 2023 08:21:42 GMT 			# 响应首部
Content-Length: 12 								# 响应首部
(空行)
Hello World! 									# 报文主体

5.1 响应状态码

​ HTTP响应类型总共有5种,分别以不同的数字作为前缀:
在这里插入图片描述

5.2 响应首部

​ 格式和请求首部一样。为客户端提供更多与请求相关或者与客户端诉求相关的信息。常用的响应首部如下所示:
在这里插入图片描述

5.3 URI

​ 统一资源标识符(Uniform Resource Identifier,URI),使用位置字符串表示互联网资源。字符串表示资源名称:URN,字符串表示资源路径:URI。URL是一个涵盖的术语,包含了URI和URN。

​ URI的一般格式:

<方案名称>:<分层部分>[?<查询参数>][#片段]

注:只有方案名称和分层部分是必须的,其它是可选的。

  • 方案名称(scheme name):记录了URI使用的方案,定义了URI其余部分结构。URI具有大量的方案,在HTTP中使用的是HTTP方案。

  • 分层部分(hierarchical part):包含了资源的识别信息。若以//开头,则包含了可选的用户信息(以@结尾)。在用户信息(可选的)后面跟着的是分层路径,该路径由分段组成,各个分段之间由/分隔。

  • 查询参数:由一连串的键值对构成,它们之间由&分隔

  • 片段:由#为前缀,对URI定义的次级资源进行标识。

    由于URI的片段是由客户端处理的,而web浏览器在将URI发送给服务器之前,会将片段移除,若想要获取片段的信息,则需要使用JS或者某个HTTP客户端库,将URI片段包含在GET请求里面。

​ HTTP URI方案示例:

http://pzs:password@www.example.com/docs/file?name=pzs&location=china#summy      # http代表方案。@之前分段记录了用户名和密码,而之后的www.example.com/docs/file记录的是分层部分的其余部分,其中最高层为www.example.com,后面的两个层为doc何file,每个分层由/分隔。?之后是查询参数,最后有一个#结尾的片段。

​ Tips: 每个URL是一个独立字符串,不能使用空格。同时#和?有特殊意义,不能用于其它用途。若想要避开这些限制,则必须使用URL编码来将特殊符号进行转换。示例如下所示:

http://pzs@www.example.com/docs/file?name=p zs&location=china#summy 
经过转换后为:
http://pzs@www.example.com/docs/file?name=p%20zs&location=china#summy #空格的ASCII码为20,然后在前面再加上一个%形成URL编码 

六、HTTP/2

​ 一种二进制通信协议,使得语法分析更加高效、紧凑、健壮。当然这样的话就无法使用telnet程序进行调试了。

HTTP2是多路复用的,多个请求和响应可以同时使用一个连接。而HTTP1.1只能一个请求和响应对应一个连接。

​ HTTP2允许对首部进行压缩,减少数据传输量,并且允许服务器将响应推送给客户端。

​ 在新版本的Go语言中使用HTTPS则默认使用HTTP2协议

​ 好啦,第一天的web学习到此就结束喽!第二天让我们一起来写属于自己的第一个Go web程序!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达索系统3DEXPERIENCE WORKS 2024电磁仿真功能

在设计工作中&#xff0c;将复杂的模型进行网格分割是必不可少的一步&#xff0c;这样可以化繁而简&#xff0c;也可以让后续的工作更容易开展。 电磁仿真可帮助您在复杂、嘈杂的电磁环境中提高效率&#xff0c;在确保兼容性的同时&#xff0c;保障出众性能。 一系列专用求解器…

windows中打开psql命令行

一、第一种方式 1.点击下方的psql&#xff0c;打开命令行窗口 2.中括号中的是默认值&#xff0c;直接回车就行 3.成功 二、第二种方式 双击安装目录中的执行文件 “D:\soft\postgresql\catalogue\scripts\runpsql.bat” 三、第三种方式 1.加到环境变量 把“D:\soft\postg…

婴儿专用洗衣机哪个牌子比较好?好用迷你洗衣机品牌推荐

当婴儿的到来&#xff0c;确实会给家庭带来许多变化&#xff0c;就好比如对于宝宝相关衣物的清洗需求。对于新生儿及婴幼儿的衣服&#xff0c;一般都要给予特殊的照顾与清洗&#xff0c;以保证不含细菌及过敏原。尤其是刚刚出生的婴儿&#xff0c;这时候宝宝们的皮肤很是幼嫩。…

百度网盘PC端程序二维码刷新不出来

问题 百度网盘PC端程序二维码刷新不出来。 原因 下载的百度网盘PC端程序版本有问题。 解决办法 删除百度网盘PC端程序&#xff0c;从官网下载&#xff0c;选择“从microsoft获取”&#xff0c;安装后解决。

快速开发表单好用吗?优势在哪?

如果应用快速开发表单&#xff0c;对提升企业的办公效率帮助巨大。在快节奏的现代社会生活中&#xff0c;职场办公也需要采用更专业的办公软件实现高效率提升。低代码技术平台就是如今常用于职场办公中的优质平台&#xff0c;其可视化操作、简单灵活、组件丰富等优势特点&#…

【精选】SpringDI依赖注入及注解实现SpringIoC

SpringDI 什么是依赖注入 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;&#xff0c;它是Spring控制反转思想的具体实现。 控制反转将对象的创建交给了Spring&#xff0c;但是对象中可能会依赖其他对象。比如service类中要有dao类的属性&#xff0…

VBA高级应用30例:Ribbon(功能区)的介绍

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

Nginx性能调优策略

Nginx是一个高性能的Web服务器和反向代理服务器&#xff0c;常用于处理高并发的请求。以下是一些常见的Nginx性能调优策略&#xff1a; 一、调整worker_processes和worker_connections 在Nginx配置文件中&#xff0c;可以通过worker_processes和worker_connections参数来调整w…

JAVA将PDF转图片

前言 当今时代&#xff0c;PDF 文件已经成为了常用的文档格式。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将 PDF 文件转换为图片格式&#xff0c;以便更方便地分享和使用。这时&#xff0c;我们可以使用 Java 编程语言来实现这个功能。Java 提供了许多库和工具&a…

城市安全守护者:分析无人机在交通领域的应用

随着科技的进步&#xff0c;无人机在交通领域的应用不断增加&#xff0c;为智慧交通管理提供了新便利。无人机凭借其灵活性&#xff0c;在违章取证、交通事故侦查、交通疏导等方面展现出巨大的应用潜力。无人机在交通领域的应用有哪些&#xff1f;跟着我们一探究竟。 1、违章取…

系列二十四、Spring设计模式之策略模式

一、前言 对于我们Java开发人员来说&#xff0c;Spring框架的重要性不言而喻&#xff0c;可以说Java领域之所以发展这么壮大&#xff0c;生态这么丰富&#xff0c;功能这么强大&#xff0c;是离不开Spring以及由其衍生出来的各种子模块的&#xff0c;正是由它们共同奠定了JavaE…

ECShop 4.x collection_listSQL注入

漏洞描述 ECShop是一款B2C独立网店系统&#xff0c;适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序 影响版本&#xff1a;ecshop4.0.7及以下 漏洞环境及利用 docker环境搭建 访问8080端口&#xff0c;数据库主机为mysql&a…

如何确定先做哪件事情。

问题描述&#xff1a;工作或者生活中&#xff0c;有许多件事情&#xff0c;我们应该先做那件事情。 解决办法&#xff1a;重要紧急的四象限法则。具体如下所示&#xff1a; -----------------------------------------------------------------------------------------------…

基于OGG实现MySQL实时同步

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

海外ASO优化之如何优化应用程序预览

应用程序预览是演示应用的特性、功能的界面。通过简短视频吸引用户应用商店。由于应用程序预览自动播放&#xff0c;所以它们是帮助用户发现和了解我们应用的关键。 1、规划应用程序预览。 应用商店支持的多种语言&#xff0c;最多可以有三个应用预览&#xff0c;每个预览的时…

接口测试:Jmeter和Postman测试方法对比

前阶段做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xff0c;所以今天我们就来谈谈一大部分人…

【C/PTA —— 12.指针1(课内实践)】

C/PTA —— 12.指针1&#xff08;课内实践&#xff09; 6-1 交换两个整数的值6-2 利用指针找最大值6-3 字符串的连接6-4 移动字母 6-1 交换两个整数的值 void fun(int* a, int* b) {int* tmp *a;*a *b;*b tmp; }6-2 利用指针找最大值 void findmax(int* px, int* py, int* p…

超声波雪深监测站冬季雪景的智能守护者

随着冬季的到来&#xff0c;白雪皑皑的景象让人感到无比美丽。然而&#xff0c;雪景的美丽却给人们的生活和出行带来了一定的困扰。雪的深度和分布是影响道路交通、公共安全和旅游体验的关键因素。为了解决这一问题&#xff0c;WX-XS1 超声波雪深监测站在冬季应运而生&#xff…

DjiTello + YoloV5的无人机的抽烟检测

一、效果展示 注&#xff1a;此项目纯作者自己原创&#xff0c;创作不易&#xff0c;不经同意不给予搬运权限&#xff0c;转发前请联系我&#xff0c;源码较大需要者评论获取&#xff0c;谢谢配合&#xff01; 1、未启动飞行模型无人机的目标检测。 DjiTello YOLOV5抽烟检测 …

【自然语言处理】利用sklearn库函数绘制三维瑞士卷

一&#xff0c;原理介绍 sklearn.datasets.make_swiss_roll&#xff08;&#xff09;函数提供了三维瑞士卷的数据集&#xff0c;我们可以利用他来生成瑞士卷&#xff0c;该函数的用法见sklearn官方文档&#xff1a;官网文档&#xff1a;sklearn.datasets.make_swiss_roll&…