网络通信6:搭建HTTP服务器

栏目: 后端 · 发布时间: 5年前

内容简介:#1、Web工作方式我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要 浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢?Web服务器的工作原理可以简单地归纳为:

#1、Web工作方式

我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要 浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢?

对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的 时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过 IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request (请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回 HTTP Response(响应)包;客户端收到来自服务器的响应后开始渲染这个Response包 里的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。

网络通信6:搭建HTTP服务器

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

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

#2.Go如何使得Web工作

前面小节介绍了如何通过 Go 搭建一个Web服务,我们可以看到简单应用一个net/http包 就方便的搭建起来了。那么Go在底层到底是怎么做的呢?

###web工作方式的几个概念

  • Request:用户请求的信息,用来解析用户的请求信息,包括post、get、cookie、url等信息
  • Response:服务器需要反馈给客户端的信息
  • Conn:用户的每次请求链接
  • Handler:处理请求和生成返回信息的处理逻辑

###分析 http包运行机制

如下图所示,是Go实现Web服务的工作模式的流程图

网络通信6:搭建HTTP服务器
  1. 创建Listen Socket, 监听指定的端口, 等待客户端请求到来。
  2. Listen Socket接受客户端的请求, 得到Client Socket, 接下来通过Client Socket与 客户端通信。
  3. 处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST 方法, 还可能要读取客户端提交的数据,然后交给相应的handler处理请求, handler处理完 毕准备好客户端需要的数据, 通过Client Socket写给客户端。
    #实例

###导入依赖包

import (
	"net/http"
	"io/ioutil"
	_"net/http/pprof"
)

###定义路由处理,并监听在指定端口

func main() {

	//定义对/hello路由的响应
	http.HandleFunc(
		"/hello",
		func(responseWriter http.ResponseWriter, request *http.Request) {
			//向响应中写入客户端地址
			responseWriter.Write([]byte(request.RemoteAddr+";"))
			//向响应中写入客户端方法
			responseWriter.Write([]byte(request.Method))
			//向响应中写入内容
			responseWriter.Write([]byte("hello 祥哥 hello go"))
		})

	//定义对/sister路由的响应
	http.HandleFunc(
		"/sister",
		func(w http.ResponseWriter, r *http.Request) {
			w.Write([]byte("你妹"))
		})

	//定义对/fuck路由的响应
	http.HandleFunc("/fuck", func(writer http.ResponseWriter, request *http.Request) {
		//从本地html文件中读入HTML页面的原始字节
		contentBytes, _ := ioutil.ReadFile("/home/sirouyang/Desktop/demos/W3/day5/02HTTP/fuck.html")
		//向客户端写出响应
		writer.Write(contentBytes)
	})

	//开启服务器并监听在8080端口
	http.ListenAndServe("127.0.0.1:8080", nil)
}

学院Go语言视频主页

https://edu.csdn.net/lecturer/1928

[清华团队带你实战区块链开发]

( https://ke.qq.com/course/344443?tuin=3d17195d )

扫码获取海量视频及源码 QQ群:721929980

网络通信6:搭建HTTP服务器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Natural Language Processing with Python

Natural Language Processing with Python

Steven Bird、Ewan Klein、Edward Loper / O'Reilly Media / 2009-7-10 / USD 44.99

This book offers a highly accessible introduction to Natural Language Processing, the field that underpins a variety of language technologies, ranging from predictive text and email filtering to autom......一起来看看 《Natural Language Processing with Python》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具