goweb服务器系列,使用Go搭建一个Web服务器

Web服务器的工作原理可以简单地归纳为:

客户机通过TCP/IP协议建立到服务器的TCP连接

客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档

服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调 用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端

客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果

URL的组成

url是(Uniform Resource Locator)"统一资源定位符"的英文缩写,用于描述网络上的资源,基本格式如下:

scheme://host[:port#]/path/.../[?query-string][#anchor]

scheme 指定低层使用的协议(例如:http, https, ftp)

host HTTP服务器的IP地址或者域名

port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必

须指明,例如 http://www.cnblogs.com:8080/

path 访问资源的路径

query-string 发送给http服务器的数据

anchor 锚

HTTP请求包和响应包

Request包分为3部分

第一部分叫Request line(请求行)

第二部分叫Request header(请求头)

第三部分是body(主体), header和body之间有个空行

POST http:/test.domain.net/manage/getTask HTTP/1.1 // 此处是请求行, 分别表示:请求方法 请求URI HTT协议/协议版本

Host: test.domain.net // 服务端的主机名

Content-Length: 72

Accept: application/json, text/plain, */*

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.55 // //浏览器信息

Content-Type: application/json;charset=UTF-8

Accept-Encoding: gzip, deflate // //是否支持流压缩

// 空行,用于分割请求头和消息体

{"taskStatus":"1","isTabCv":"1","execType":"SQL","pageSize":30,"page":1} // 消息体,请求资源参数,

Response包

Response包中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

HTTP/1.1 200 OK

Content-Encoding: gzip

Content-Type: application/json;charset=UTF-8

Date: Sun, 06 Dec 2020 07:35:26 GMT //发送时间

Content-Type: text/html //服务器发送信息的类型

Connection: keep-alive //保持连接状态

Content-Length: 90 //主体内容长度

//空行 用来分割消息头和主体

状态码告诉我们,http服务端是否产生的预期的Response,HTTP协议中,有如下几种状态码

1XX 提示信息 - 表示请求已被成功接收,继续处理

2XX 成功 - 表示请求已被成功接收,理解,接受

3XX 重定向 - 要完成请求必须进行更进一步的处理

4XX 客户端错误 - 请求有语法错误或请求无法实现

5XX 服务器端错误 - 服务器未能实现合法的请求

Go搭建一个Web服务器

Go语言里面提供了net/http标准包,可以很方便的搭建起来一个的Web服务。同时使用这个包能很简单地对Web的路 由,静态文件,模版,cookie等数据进行设置和操作。

// 设置访问的路由

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

r.ParseForm() //解析参数,默认是不会解析的

fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息

fmt.Println("path", r.URL.Path)

fmt.Println("scheme", r.URL.Scheme)

fmt.Println(r.Form["url_long"])

fmt.Fprintf(w, "hello word") //这个写入到w的是输出到客户端的

})

// 设置监听的端口

err := http.ListenAndServe(":7070", nil)

if err != nil {

log.Fatal(err)

}

使用浏览器访问 localhost:7070

4c896c26666e

1607242061(1).jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值