HTTP协议学习笔记|青训营

342 阅读7分钟

前后端分离:

f99af73c0fea68ee700a2056f25b2e5.png

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事务处理有如下的过程:

  1. 客户与服务器建立连接;
  2. 客户向服务器提出请求;
  3. 服务器接受请求,并根据请求返回相应的文件作为应答;
  4. 客户与服务器关闭连接。

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。


请求流程

e7bb96461c44421d3c0aefa50e91947.png


分层设计

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

高内聚、低耦合、易复用、高扩展性

应用层设计

f9896ef04838d466fee1cf8ba37f984.png

提供合理的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 文件名



工作原理

9b43050140be660fe28b9c71b7eed17.png

在浏览器输入URL回车后,发送到DNS服务器解析这个域名对应的ip地址

        之后浏览器得到IP地址后与web服务器进行通信

        通信过程用的是TCP三次握手

        服务器和浏览器做出响应,并把对应的html文本发送给浏览器

         最后释放tcp连接,浏览器将该HTML的内容显示出来

0a5552ed1d1c932f271aeeb849f9c2e.png


HTTP简要通信过程:

建立连接——发送请求数据包——返回响应数据包——关闭连接

  1. 浏览器建立与web服务器之间的连接
  2. 浏览器将请求数据打包(生成请求数据包)并发送到web服务器
  3. web服务器将处理结果打包(生成响应数据包)并发送给浏览器
  4. 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返回数据包数据格式

一个响应由四个部分组成:状态行、响应标头、空行、响应数据

e5e2c2501426a5de373de165d01c7e0.png


持久性连接与非持久性连接

浏览器与web服务器建立TCP连接后,双方就可以通过发送请求信息和应答信息进行数据传输。在HTTP协议中,规定TCP链接既可以是持久的,也可以是非持久的。具体采用哪种链接方式,可以由通用头域中的Connection指定。在HTTP/1.0版本中,默认使用的是非持久性连接,在HTTP/1.1版本中,默认使用的是持久性连接。

非持久性连接就是每个TCP连接只用于传输一个请求信息和一个响应消息。用户每请求一次web页面,就产生一个TCP连接。

持久性链接是指服务器在发出相应后让TCP连接继续打开着。



请求方法和请求包

请求方法:

             1.GET                   2.POST

GET

b29a8fcb4aa0373dd5f4d6249620668.png GET 请求文件 HTTP/1.1

HOST:www.hetianlab.com 域名

efdebf5292be004348178a597a39c42.png

327d74072ede9ba6a8bf2db1f0d78ec.png

token每登陆一次就会刷新一次


响应方法和状态码

返回

33b5ad12dd8a8f870b353f9e34434c7.png

状态码

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

dbcc09bfdacefcffe8b3238b2ba3861.png

301-资源(网页等)被永久转移到其他url

302-临时跳转




GET和POST区别

759c91915b353c49e26968a7e4579fb.png

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 netnetpoll
流式友好中大包性能高
小包性能高时延低