HTTP 协议 与 golang web 应用服务

HTTP 协议 与 golang web 应用服务

本文仅是介绍 golang web 应用与服务的 hello world 的工作原理,开发工具等。

本文要点:
1. 分布式计算 “C/S架构”知识
2. HTTP 协议基础知识;协议分析工具 curl
3. Golang web 应用搭建、工作原理、源代码阅读、程序设计技巧
4. Web 应用框架,压力测试工具 ab

前提条件:
1. OO 思想在 Golang 应用
2. OS 并发基础知识
3. 了解 socket 通讯与 stream
4. 了解 python tornado 框架、Java web 应用服务器框架最好

本文档代码位置:https://github.com/pmlpml/golang-learning/tree/master/web

1、C/S 架构

在分布式计算中,计算机之间协作最基础、最简单的结构就是 C/S 架构 。一个 进程 扮演 Server 提供服务,一个或多个 进程 扮演 Client 发起服务请求。C/S架构( Client–Server model )应用及其广泛,从关系数据库服务、到web应用、电子邮局、FTP服务、以及我们现在见到的大多数 云服务 都是C/S架构应用。

C/S架构通讯模型如图所示:

+----------+           Request ->             +----------+
|          |--------------------------------->|          |
|  Client  |                                  |  Server  |
|          |<---------------------------------|          |
+----------+           <- Response            +----------+

这里,我们看出C/S架构通讯非常简单。如同 client 问“你吃过了吗?”,server 回答“吃了红烧肉”,但是,server 不能主动反问“你吃了吗?”。 问题是为什么要做这样的限制……
当然,在许多应用中也需要突破这样的限制,于是就有了一些辅助技术手段… 例如 websocket

C/S架构编程手段很多,用socket直接编程不是很方便吗?如果仅编写一个没有任何工业用途的 “toy” 程序,可以这样做。 但是,一个好的服务程序,必须满足 高可靠高可用(7*24)高性能可伸缩高开发效率安全可扩展 等特性。例如,做一个服务全球的订票服务系统开发,就必须支持这些特性。 基于 HTTP 协议的 web service,不仅开发简单,而且能满足产业界的要求,随着“云服务”技术的发展,近几年大规模普及。

2、HTTP 协议基础

The Hypertext Transfer Protocol ( HTTP ) is an application protocol for distributed, collaborative, hypermedia information systems.

HTTP 协议是一个复杂的协议, 支持虚拟主机、消息路由(负载均衡)、分段下载、缓存服务、安全认证等等。 HTTP 也是非常简单文本协议。 客户端与服务器建立 TCP 连接后,客户端发出 Request 文本, 服务器端返回 Response 文本。

HTTP 是应用层协议,传输建立在传输层 TCP 协议基础之上。 例如:用户在浏览器中输入 http://www.sysu.edu.cn/ 浏览器与服务器之间发生了什么呢?

  1. 浏览器:请求 DNS 解析 www.sysu.edu.cn 得到 121.46.26.52
  2. 浏览器:用 socket 与 服务器 121.46.26.52:80 发起 TCP 连接请求
  3. 服务器:Accept 客户端请求,建立该连接
  4. 浏览器:向服务器写信息(字符流),Request
  5. 服务器:按浏览器的请求,返回客户端信息(字符流)Response
  6. 浏览器:断开连接,让双方释放资源

其中: Request 与 Response 的约定,就是 HTTP 协议。 HTTP/1.1 标准就是 RFC 2616

2.1 HTTP 协议基本格式

Request 文本格式

它是三段式的文本(命令行、header、body)

GET / HTTP/1.1              #第一行:第一个单词 - 方法;第二个单词 - uri; 协议与版本     
Host: www.example.com       #第2-n行,都是  key:value 格式,称为 headers
...
CRLF                        #header 结束标识
message-body                #按heahder指令处理

Request methods

Request第一行第一个单词( 大写 ), 例如 GET、HEAD、POST、PUT、DELETE等。

  • GET 读取 uri 指向的信息
  • HEAD 查询 uri 指向的信息
  • PUT 写入 uri 指向的信息
  • DELETE 写入 uri 指向的信息
  • POST 提交表单

URI & URL

统一资源标识(URI),即要访问对象(文件)的路径和参数

统一资源定位符(URL)。例如:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值