Retrofit2软件工程师成长日记Http

HTTP与RESTful

2018-04-25  本文已影响7360人  Hey_Shaw

HTTP

HTTP是一个属于应用层的协议,特点是简介、快速

HTTP发展史

HTTP客户端发起请求,创建端口
HTTP服务器在端口监听客户端请求
HTTP服务器向客户端返回状态和内容

网络请求,页面渲染

1、域名解析

浏览器以一个随机端口向服务器的Web程序发起一个TCP连接请求,此连接请求通过层层路由设备到达网卡,然后进入内核的TCP/IP协议栈(有可能经过防火墙过滤),最终到达Web服务端。

HTTP交互过程
1、客户端发送SYN同步报文给服务端
2、服务端收到SYN同步报文之后,给客户端一个回复报文SYN,ACK报文
3、客户端收到第二条报文之后,会再给服务端回复一个ACK报文

连接建立完成之后,客户端和服务端就可以进行正常的HTTP网络请求

4、客户端发送一个HTTP请求报文到服务端
5、服务端收到客户端的HTTP请求报文,处理之后把数据返回给客户端,产生第五条HTTP响应报文

当客户端和服务端之间结束网络请求之后,这条TCP连接通道就会关闭
假如断开由客户端发起,流程:
6、客户端发送FIN终止信号报文
7、服务端收到客户端发送的终止信号之后,服务端会回复给客户端一个ACK确认报文

当客户端收到第七条报文之后,有客户端向服务端方向的连接就已经断开

8、过一段时间,服务端又会发送给客户端第八条FIN、ACK终止报文
9、客户端收到第八条报文之后,会回复给服务端一条ACK确认报文,此时由服务端到客户端方向的TCP连接通道关闭。

TCP 连接通道是一个全双工的通道,并不是两条通道

Wireshark工具查看HTTP工作流程

HTTP消息体 HTTP Request 协议格式
HTTP Request 协议格式
• {请求方法}{/相对路径} HTTP/{http版本}\r\n         \r\n = CRLF
• Header-Name-1:value\r\n
• Header-Name-2:value\r\n
• \r\n
• Optional Request Boby
HTTP Request 协议格式
HTTP Request 协议格式
• HTTP/{version} {status-code} {message}\r\n
• Header-Name-1:value\r\n
• Header-Name-2:value\r\n
• \r\n
• Optional Request Boby

Headers:头信息

Preview:资源预览

Response:么有处理的响应的响应的正文

Cookies:请求和返回的Cookies

Timing:图形化显示每个阶段耗费的时间

Stalled:等待时间:浏览器要发出请求到请求可以发出的等待时间,一般是代理协商以及要等到TCP连接释放的时间不包含DNS查询和建立TCP连接的时间。

Proxy negotiation:代理协商的时间

Request sent:请求时间:第一个字节发出前,到最后一个字节发出后的时间,可以理解为请求时间或上传时间

Watting(TTFB):请求发出以后到收到响应的第一个字节所花费的时间,包括整个数据在路由贯穿中所延迟的时间,以及服务器端响应这个请求做的处理时间

Content Download:收到第一个字节开始到收到最后一个字节结束所花费的时间

charles工具:抓取HTTP请求和响应数据

Telnet模拟HTTP请求

HTTPS:Hyper Text Transfer Protocol over Secure Socket Layer.基于SSL层的HTTP

HTTP与HTTPS不同之处

HTTP最大特点是无连接无状态。

安全套接字层SSL & 安全传输层TLS

SSL协议

为了解决以下风险而设计产生:

HTTP与HTTPS架构 SSL连接建立过程
1、客户端发送握手信息给服务端,2个内容:随机数number1,协商的加密算法(或者客户端支持的加密算法)
2、服务端给予客户端响应握手信息,随机数number2,匹配好的协商加密算法(一定是客户端传给服务器端的加密算法的一个子集)
3、服务端给客户端第一个响应报文之后,随即又会传递给客户端第二个响应报文,即服务端的证书
4、客户端收到服务端传递的证书之后,对证书进行验证,是否有效、合法(1、客户端验证服务端证书的数字摘要和证书解密后的内容是否被篡改;2、证书链。逐级验证服务端的证书,一直到根证书是否在我们的操作系统的可信任证书列表当中。根证书会被植入到浏览器中或操作系统中)
5、客户端组装会话秘钥(组装有三个内容:通过客户端自己保留的随机数number1、随机数number2,预主秘钥组装会话秘钥)
6、客户端将预主秘钥通过服务端传递过来的证书里面的公钥加密,然后传递给服务端
7、服务端拿到加密过的预主秘钥,通过私钥解密域主秘钥,服务端也获取到三个随机数
8、服务端拿到三个随机数开始组装会话密钥
9、客户端通过组装的会话密钥去加密一条消息,把加密后的握手消息传递给服务端,主要为了验证服务端能否正常接收客户端加密过的数据消息
10、服务端同样发送一个加密后的握手消息给客户端,来验证客户端是否能正常解析加密过的数据。9,10两步验证通过,客户端与服务端之间的SSL连接就建立完成了。

预主密钥:由客户端产生,传递给服务端,在会话中起着非常重要的作用,配合随机数1和随机数2生成最终的会话密钥。传递的随机数和预主秘钥完全可以只有预主秘钥承担,为什么产生三个随机数:协议设计之初,假设客户端所产生的随机数不是真正的随机数,为了保证随机数的随机性,我们通过产生多个随机数来达到最终产生的秘钥具有非常好的随机性,防止被中间攻击人随意窃取。

公钥、私钥:非对称加密中的专业术语。

对称加密算法:加密所使用的秘钥和解密所使用的秘钥相同。常见的有AES、DES。安全性差,因为需要将私钥传输给服务端。

对称加密

非对称加密:使用公钥进行加密,解密使用私密的算法。常见RSA。

非对称加密

请求方法

状态码

常用状态码

URL:同一资源定位符,偏重定位,说明了通过那种协议来访问一个资源。

URI:同一资源标识符,偏重标识,一个字符串格式规范。

URL是URI的子集。

Restful

设计概念和准则

资源:网络上的一个实体,或者说是网络上的一个具体信息。

schema://host[:port]/path [?query-string][#anchor]

SOAP WebService

WebService:是一种跨编程语言和操作系统平台的远程调用技术。

WebService通过HTTP协议发送请求和接收结果时采用XML格式封装,并增加了一些特点的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。

效率与易用性

SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。

RESTful由于其面向资源接口设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了http最初的应用协议设计理念。

安全性

RESTful对于资源型服务接口来说很合适,同时特别适合对效率要求很高,但是对于安全要求不高的场景。

SOAP的成熟性可以给需要提供给多开发语言,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。

如何设计RESTful API

HTTP动词

对于资源的操作(CRUD),由HTTP动词(谓词)表示。

请求类型 请求路径 功能
GET /books 获取列表
POST /book 创建一本书
GET /books/id 通过id查询一本书列表
PUT /book/id 通过id更新一本书
DELETE /book/id 通过id删除一本书

过滤信息

举例:

上一篇 下一篇

猜你喜欢

热点阅读