golang http client 使用gzip_HTTP协议及框架实现

一、HTTP协议描述

在OSI网络模型,HTTP协议运行于网络层,交换数据由以下几步

  1. client向server发送request
  2. server从socket里读取request
  3. server生成response
  4. server将response写入socket
  5. client从socket里读取response

socket由二元组 (ip, port) 组成,client, server端各自管理一个socket, 使用这个socket发送消息;因为总是client先发出request,server才会回复response,所以

  1. server必须一直运行(因此得名server)
  2. client必须知道server的(ip, port)

二、HTTP协议内容

request和response是具有一定格式的信息,计算机通过网络传输的为01011101这样的二进制串,它们是有意义的字符串(图片、视频等)通过编码得到的,HTTP协议的实现,从socket里读取信息的时候,一般将其解码为人类可读的字符串,字符串的格式和部分内容,由HTTP协议规定。

# Request内容如下
GET / HTTP/1.1                          # 请求行 Request-Line
Host: www.hello.com                     # 请求头 headers(CRLF*2)

# Response内容如下
HTTP/1.1 200 OK                         # response-line
Content-Length: 3059                    # headers
Server: whttp/1.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/plain
Cache-control: private
Connection: keep-alive

hello world!                            # response body

关于request:

请求方法,method,常用的有 get, post, put, delele, options, head, 亦可以定制;method 表示 client希望对资源做什么操作,一般来说,get表示查看资源,post表示建立新资源,每个method都有约定适应的场合。

请求的资源位置,由URL标志,URL格式如下

"http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

其中 host, port 体现再headers中,请求时,host首先转变为ip;之后的abs_path体现在 request-line 中

关于response:

状态码,status code,三位的数字,表示server对client所请求的资源的简略回复。200一般表示请求到了,404则表示未找到,500表示这个请求把server弄乱了。

response body,表示server回复的实际内容。

至此,client取得了server的回应,不管client是否满足,HTTP这个工具兢兢业业地发挥了自己地作用。满足client,是server的事情,可能server可以满足,但不想满足;也可能server鞠躬尽瘁,也满足不了client。

三、HTTP协议的实现

空谈误国,实干兴邦。HTTP只有用在实践中,才能在人民群众里实现它的价值,哇哈哈。

选择golang语言来实现。

HTTP协议的实现,一般包含常用的功能,大家称之为框架。这个框架取名为 whttp 因为我姓王wang : )

四、HTTP实现测试

功能测试

telnet localhost 80 (回车)
GET /questions HTTP/1.0
Host: localhost(两次回车)

查看返回的内容

也可以通过浏览器打开 localhost 查看

性能测试

待议

五、参考

HTTP协议标准 https://tools.ietf.org/html/rfc2616

Gin框架 gin-gonic/gin

golang相关源代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值