前后端分离:
HTTP协议基础
什么是HTTP协议?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,适用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
超文本传输协议(HTTP,Htper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTTP页面的方法。
HTTP(HyperText Transfer Protocol,超文本传输协议)是Web系统最核心的内容,它是Web服务器和客户端直接进行数据传输的规则。Web服务器就是平时所说的网站,是信息内容的发布者。最常见的客户端就是浏览器,是信息内容的接受者。
HTTP(HyperText Transfer Protocol,超文本传输协议)协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,有请求和响应构成,是一个标准的客户端服务器模型。
HTTP的工作原理
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
- 客户与服务器建立连接;
- 客户向服务器提出请求;
- 服务器接受请求,并根据请求返回相应的文件作为应答;
- 客户与服务器关闭连接。
HTTP的请求方法:
HTTP/1.1协议中共定义了8种动作(方法)来表明Request-URI指定的资源的不同操作方式。
(1)OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送"*"的请求来测试服务器的功能性。
(2)HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
(3)GET:向特定的资源发出请求。注意:get方法不应当被用于产生“副作用”的操作中。例如在Web APP中,其中一个原因是GET可能会被网站蜘蛛等随意访问。
(4)POST:向指定资源提交数据进行处理请求(比如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
(5)PUT:向指定资源位置上传其最新内容。
(6)DELETE:请求服务器删除Request-URI所标识的资源。
(7)TRACE:回显服务器收到的请求,主要用于测试或者诊断。
(8)CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
在大部分情况下,只会用到GET和HEAD方法,并且这些方法是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405,当服务器不认 识或不支持对应的请求方法的时候,应当返回状态行501。
请求流程
分层设计
| OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
|---|---|---|
| 应用层 | 应 | HTTP、TTFTP、FTP、NFS、WAIS、SMTP |
| 表示层 | 用 | Telnet、Rlogin、SNMP、Gopher |
| 会话层 | 层 | SMTP、DNS |
| 传输层 | 传输层 | TCP、UDP |
| 网络层 | 网络层 | IP、ICMP、ARP、RARP、AKP、UUCP |
| 数据链路层 | 数 链 层 | FDDI、Ethernet、PDN、SLIP、PPP |
| 物理层 | 据 路 | IEEE 802.1A |
高内聚、低耦合、易复用、高扩展性
应用层设计
提供合理的API
-
可理解性: 如ctx.Body(),ctx.GetBody()
不要用 ctx.BodyA() -
简单性: 如ctx.Request.Header.Peek(key)
/ctx.GetHeader(key)
HTTP协议中的URL
URL,中文叫统一资源定位符,是互联网用来标记某一处的地址
以下面的URL为例:
[http://www.hetianlab.com:8080/test/1.html](https://)
| http: 协议名称 | // 分隔符 |
|---|---|
| www: 万维网 | . 分隔符 |
| hetianlab: 域名 | .com 代表域名格式 |
| : 分隔符 | 8080 端口 |
| /test/ 虚拟目录 | 1.html 文件名 |
工作原理
在浏览器输入URL回车后,发送到DNS服务器解析这个域名对应的ip地址
之后浏览器得到IP地址后与web服务器进行通信
通信过程用的是TCP三次握手
服务器和浏览器做出响应,并把对应的html文本发送给浏览器
最后释放tcp连接,浏览器将该HTML的内容显示出来
HTTP简要通信过程:
建立连接——发送请求数据包——返回响应数据包——关闭连接
- 浏览器建立与web服务器之间的连接
- 浏览器将请求数据打包(生成请求数据包)并发送到web服务器
- web服务器将处理结果打包(生成响应数据包)并发送给浏览器
- web服务器关闭连接
Request请求数据包数据格式
1.请求行:请求类型/请求资源路径、协议的版本和类型
2.请求头:一些键值对,浏览器与web服务器之间都可以发送,特定的某种含义
3.空行:请求头与请求体之间用一个空行隔开
4.请求体:要发送的数据(一般post提交会使用)eg:user=123&pass=123
#请求行:请求行由三个(https://)(https://)标记组成:请求方法、请求URL和HTTP版本,它们用空格分享
*eg:GET/index.html HTTP /1. *
#请求头:由关键字/值对组成,每行一对,关键字和值用冒号分享。请求头标通知服务器腾于客户端的功能和标识j
#空行:最后一个请求头标之后是空行,发送回车符和退行,通知服务器以下不再有标头。
#请求数据:使用post传送,最常使用的是Content-Type和Content-Length头标
Response返回数据包数据格式
一个响应由四个部分组成:状态行、响应标头、空行、响应数据
持久性连接与非持久性连接
浏览器与web服务器建立TCP连接后,双方就可以通过发送请求信息和应答信息进行数据传输。在HTTP协议中,规定TCP链接既可以是持久的,也可以是非持久的。具体采用哪种链接方式,可以由通用头域中的Connection指定。在HTTP/1.0版本中,默认使用的是非持久性连接,在HTTP/1.1版本中,默认使用的是持久性连接。
非持久性连接就是每个TCP连接只用于传输一个请求信息和一个响应消息。用户每请求一次web页面,就产生一个TCP连接。
持久性链接是指服务器在发出相应后让TCP连接继续打开着。
请求方法和请求包
请求方法:
1.GET 2.POST
GET
GET 请求文件 HTTP/1.1
HOST:www.hetianlab.com 域名
token每登陆一次就会刷新一次
响应方法和状态码
返回
状态码
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
301-资源(网页等)被永久转移到其他url
302-临时跳转
GET和POST区别
get请求--请求数据在url里面,在HTTP协议头中,以?的形式
会在地址栏里显示出来,而post不会改变地址栏
post请求--把数据存放在HTTP包的包题里面
多个参数用“&”连接
http 和https的区别:
前者无加密;后者有加密
- https的访问速度比http更慢一些*
性能
针对网络库的优化
go get
- 存下全部Header
- 减少系统调用次数
- 能够复用内存
- 能够多次d
go net with bufio
绑定一块缓冲区
netpoll
存下全部Header;拷贝出完整的Body
netpoll with nocopy peek
- 分配足够大的buffer
- 限制最大buffer size
不同的网络库优势
| go net | netpoll |
|---|---|
| 流式友好 | 中大包性能高 |
| 小包性能高 | 时延低 |