Http协议、TCP协议、WebSocket协议

网络编程大家都不陌生,但平时我们只是知道怎么用,对个中的网络协议倒是没花多少工夫去学习,所以,我们今天特意来对网络协议相关的知识加以总结记录。

1)网络七层协议,从上到下依次为: 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层
2)Http协议对应于应用层,TCP协议对应于传输层,Http协议是建立在TCP协议基础之上的
3)属于应用层的常用协议:Http(超文本传输协议)、FTP(文件传输协议)、SMTP(电子邮件传输协议)、Telnet(网络远程访问协议)、NNTP(网络新闻传输协议)等
4)属于传输层的常用协议:TCP(传输控制协议)、UDP(用户数据报协议)等
5)Http连接是一种无状态的短连接
6)TCP连接是一种有状态的长连接
7)WebSocket协议:一种在单个TCP连接上进行全双工通信的协议,本质上属于应用层协议,是一种持久化的协议(长连接)
8)综合5、6、7,很容易明白Http和WebSocket都基于TCP协议,但Http在每次请求结束后就把TCP连接关了,所以属于短连接;而WebSocket中我们可以用代码控制连接的打开和关闭,只要我们不关闭,连接一直有效存在,所以属于长连接。
9)在Http1.0协议中,我们发送一个Request,建立一个TCP连接,获取一个Response,Http请求结束,关闭TCP连接,这样明显是低效的,因为每次都需要重新建立一个TCP连接;
在Http1.1协议开始,默认都开启了Keep-Alive,用于保持连接特性,也就是说我们可以用同一个TCP连接来发送多个Request,接收多个Response,当然连接Keep-Alive不会永久保持连接,它有一个保持时间,时间到了依然会关闭TCP连接,所以我们依然可以把它看作是“每次连接完成后就会关闭”。
10)在Http中,一个Request只能对应一个Response,而且Response是被动返回的,不能主动发起(单向通信协议);
而WebSocket在建立连接之后,客户端和服务器都可以主动向对方发送或接受数据(双向通信协议)
11)WebSocket协议建立的前提需要借助HTTP协议来完成一部分握手,在握手阶段与Http是相同的,建立连接之后,持久连接的双向通信就与HTTP协议无关了。
12)正因为Http连接属于无状态连接(人生若只如初见),故而两种用于保持Http连接状态的技术就应运而生了:
● 在客户端存储信息使用Cookie
● 在服务端存储信息使用Session
13)Http协议默认端口为80,一般计算机上不会限制这个端口,所以Http协议能够顺利通过所有机器上的防火墙。
14) Http请求由三部分组成,分别是:请求行、消息报头、请求正文
Http响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

15)Http请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

16)Http响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

17)从网上找了两张图来说明一下Http的请求报文和响应报文(侵删):

Http请求报文
Http响应报文

18)说一下TCP和UDP这两种传输层协议的区别:
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

详情参考:https://www.cnblogs.com/dingjiaoyang/p/5326544.html

你可能感兴趣的:(Http协议、TCP协议、WebSocket协议)