1.1 HTTP协议简介
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,现在使用的协议版本是1.1(http0.9已经成为过去,http2.0尚在开发中)。
1.2 在TCP/IP协议栈中的位置
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示 协议族.png默认HTTP的端口号为80,HTTPS的端口号为443。
1.3 TCP/IP通信传输流
客户端 | 服务端 | |
---|---|---|
应用层 | HTTP | HTTP |
传输层 | TCP | TCP |
网络层 | IP | IP |
数据链路层 | 网络 | 网络 |
在进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则从数据链路层往上走。发送端每经过一层传输数据时,就会被打上对应层所属的首部信息进行封装,接收端在层与层之间传输数据时,每经过一层就会把对应的首部去掉。
在传输数据时,http主要承载的协议是IP、TCP、DNS
IP层主要用于网络传输,确保数据能够正确传输给对方,在这里就会用到IP地址和Mac地址,IP和mac地址是相互绑定和映射的关系,传输过程中,使用ARP协议就可以通过IP地址反查出Mac地址。为了将数据准确可靠的传给对方,我们使用传输层的TCP协议(UDP协议不可靠),TCP协议通过三次握手策略进行传输确认,(发送端)SYN—(接收端)SYN/ACK—(发送端)ACK,代表握手成功。DNS服务和http协议一样位于应用层 ,提供域名到IP地址之间的解析服务。
1.4 HTTP是不保存状态的协议
即无状态协议,对请求和响应之间的通信状态不尽兴保存。每当有新的请求发送,就会有新的响应产生。
1.5 HTTP请求方式
请求方式 | 作用 |
---|---|
GET | 获取资源 |
POST | 传输实体主题 |
PUT | 传输文件 |
DELETE | 删除文件 |
GET和POST的区别:
HTTP超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文。HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。GET请求:参数在地址后拼接,没有请求数据,不安全(因为所有参数都拼接在地址后面),不适合传输大量数据(长度有限制,为1024个字节)。GET提交、请求的数据会附在URL之后,即把数据放置在HTTP协议头中。
以?分割URL和传输数据,多个参数用&连接。如果数据是英文字母或数字,原样发送,
如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
POST请求:参数在请求数据区放着,相对GET请求更安全,并且数据大小没有限制。把提交的数据放置在HTTP包的包体中.GET提交的数据会在地址栏显示出来,而POST提交,地址栏不会改变。传输数据的大小:
GET提交时,传输数据就会受到URL长度限制,POST由于不是通过URL传值,理论上书不受限。安全性:
POST的安全性要比GET的安全性高;通过GET提交数据,用户名和密码将明文出现在URL上,比如登陆界面有可能被浏览器缓存。
1.6 HTTP状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
-
200 - 请求成功
-
301 - 资源(网页等)被永久转移到其它URL
-
404 - 请求的资源(网页等)不存在
-
500 - 内部服务器错误
HTTP状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
1.7 确保Web安全的HTTPS
1.7.1 HTTP 的缺点
-
通信使用明文(不加密),内容可能会被窃听
-
不验证通信方的身份,因此有可能遭遇伪装
-
无法证明报文的完整性,所以有可能已遭篡改
1.7.2 HTTP+加密+认证+完整性保护=HTTPS
HTTPS并非是一种新的协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信,所谓HTTPS,实际上就是身披SSL协议的外壳的HTTP。
应用(HTTP) | 应用(HTTPS) |
---|---|
SSL | |
TCP | TCP |
IP | IP |
HTTP | HTTPS |
采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。HTTPS采用共享密钥加密(对称密钥加密)和公开密钥加密(非对称加密)两者并用的混合加密机制。在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。公开密钥加密处理起来比共享密钥方式更为复杂,因此若在通信时使用公开密钥加密方式,效率很低。
共享密钥加密方式加密和解密公用一个密钥的方式,公开密钥非对称,一把叫做私用密钥,另一把叫做公开密钥。发送密钥方使用公开密钥,接收方收到加密信息后使用私钥对数据进行解密。
1.7.3 HTTPS的安全通信机制
HTTPS通过十次握手确立SSL连接成功,连接建立后,通信受到SSL的保护,从此开始进行应用层协议的通信,发送HTTP请求。
当然HTTPS也存在一些问题
当使用SSL时,它的处理速度会变慢。由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源。
1.8 使用浏览器进行全双工通信的WebSocket
WebSocket,即Web浏览器与Web服务器之间全双工通信标准。一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可以互发XML,JSON,HTML,图片等任一格式的数据。任何一方都可以向对方发送报文。
1.8.1 推送功能
支持服务器向客户端推送数据的推送功能,服务器可直接发送数据,不用等客户端的请求。
1.8.2 减少通信量
只要建立起WebSocket连接,就会一直保持连接状态,和HTTP相比,不但每次连接的总开销少了,而且WebSocket的首部信息很小,通信量也相应减少了。
GET /chat HTTP/1.1
Host:Server.example.com
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Key:Dhgersaferasftgsdsgswe==
Origin:http://example.com
Sec-WebSocket-Protocol:chat,superchat
Sec-WebSocket-Version:13
为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次握手;要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手目的。成功握手确立WebSocket连接之后,通信不再使用HTTP的数据,而采用WebSocket独立的数据帧。
网友评论