Http服务器又称Web服务器(通常使用http协议)。
1、Web工作方式:
![QQ截图20210906113528.png](resources/019B1E5972BC52C43B0FD8A7FF32AB53.png =1091x470)
- 1. 客户端 ——> 访问 www.baidu.com ——> DNS 服务器。 返回 该域名对应的 IP地址。
- 2. 客户端 ——> IP + port ——> 访问 网页数据。(TCP 连接。 HTTP协议。)
2、Http协议:
超文本传输协议(HTTP, HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,他详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
Http协议通常承载于TCP协议之上,有时也承载于TLS和SSL协议层之上,这个时候,就成了我们常说的HTTPS。
http:明文。 https:加密传输。
** varshark抓包工具**
http网站可以被抓包,用户名+密码
![QQ截图20210906115006.png](resources/E13E5833CCADC7ED90EAF05944835556.png =492x370)
3、地址(URL):
URL全称为 Unique Resource Location, 用来表示网络资源,可以理解为网络文件路径。
基于URL的结构包含模式(协议)、服务器名称(IP地址)、路径和文件名。
- 常见的协议/模式。如:Http、Https、ftp等。
服务器的名称或IP地址后面有时会跟一个冒号或一个端口号。再后面是到达这个文件的路径和文件本事的名称。
1 | http://192.168.1.90:5566/LJK3D/index.html |
** 注意⚠️:**
URL的长度有限制,不同的服务器的限制值不太相同,但是不能无限长。
4、HTTP报文解析:
![QQ截图20210906135538.png](resources/872EAABBE88E317C760280343862EB96.png =749x302)
![QQ截图20210906143051.png](resources/B7A3B4B9702E618226A38ECABBC7E094.png =955x483)
![QQ截图20210906142951.png](resources/55F035776BEBB4455FAD659C29A1021A.png =1037x451)
** 01、 请求报文格式: **
请求行:
- 请求方法 +(空格) + 请求文件URL “/” +(空格)+ 协议版本(http/1.1)+ “\r\n****”
- Get
- Post
请求头部
- Key1:Value1
- Key2:Value2
- Key3:Value3
- …
**空行:\r\n—-回车换行。 **
- 代表http请求头结束
请求包体
- 请求方法对应的数据内容
02、响应报文格式:
- 要想获取响应报文,必须先发送请求报文给Web服务器。服务器收到并解析浏览器(客户端)发送的请求报文后,借助http协议,回复相对应的响应报文。
- 借助net/http包,创建一个简单的服务器,给浏览器回发响应包。
- 首先注册处理函数http.HandleFunc(),设置回调函数handler。
- 绑定服务器的监听地址http.ListenAndServer()
- 这个服务器启动后,当有浏览器发送请求,回调函数被调用,会向浏览器回复“hello world”作为网页内容
- 按照http协议的格式进行回复。
![QQ截图20210906160549.png](resources/0EAA4BE59877632E7E7C2DBAE39FF308.png =626x283)
![QQ截图20210906160559.png](resources/87AD85CAB124E6FFE715EA470C5A81C2.png =552x232)
- 应答行
- 协议版本(http/1.1) + 空格 + 状态代码(200 OK)
- 应答头
- Key1:Value1
- Key2:Value2
- Key3:Value3
- …
- 空行
- 代表http应答头结束
- 应答包体
- 响应数据内容
使用 net/http包 创建 web 服务器
注册回调函数。
- http.HandleFunc(“/itcast”, handler)
- 参1:用户访问文件位置
- 参2:回调函数名 —— 函数必须是 (w http.ResponseWriter, r *http.Request) 作为参数。
- http.HandleFunc(“/itcast”, handler)
绑定服务器监听地址。
- http.ListenAndServe(“127.0.0.1:8000”, nil)
回调函数:
Var p *int
Var p func(int, string){} // 函数名—-函数的地址
本质:函数指针。
- 通过地址,在某一位置,调用函数。
在程序中,定义一个函数,但不显示调用,当某一条件满足时,该函数由操作自动调用。
回调函数是多态的体现,函数作为参数使用。
![IMAGE](resources/F7D634AA1F46F41497129A873AC8CCE6.jpg =460x196)
![IMAGE](resources/1D0F1AB39F0F1655B6D6F6DD2AF8544F.jpg =480x165)
- 本文作者: 梁俊可
- 本文链接: http://ljk3d.com/2021/10/19/goLangNote/goLangAdvance/04_GoLang语言正式课_Go网络编程_HTTP编程/
- 版权声明: 梁俊可工作室