Http协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
Http是基于TCP/IP协议的应用程序协议,不包括数据包的传输,主要规定了客户端和服务器的通信格式,默认使用80端口。
特点:
- 简单快速:客户像服务器请求服务时,只需要传递请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:Http协议允许传输任意类型的对象数据。传输的类型由Content-Type加以标记。
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- 支持B/S(浏览器服务端)及C/S(客户端服务端)模式
Request: 请求由请求行(用来说明请求类型,要访问的资源以及所使用的HTTP版本)、请求头(紧接着请求行之后的部分,用来说明服务器要使用的附加信息)、空行(空行,请求头部后面的空行是必须的)、请求数据(请求数据也叫主体,可以添加任意的其他数据)四个部分组成。


Response: 一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。 HTTP响应也由四个部分组成,分别是:状态行(由HTTP协议版本号, 状态码, 状态消息 三部分组成)、消息报头(用来说明客户端要使用的一些附加信息)、空行(消息报头后面的空行是必须的)和响应正文(务器返回给客户端的文本信息)。
说明一下请求头和响应头的部分字段:
Host:指定服务器域名,可用来区分访问一个服务器上的不同服务
Connection:keep-alive表示要求服务器不要关闭TCP连接,close表示明确要求关闭连接,默认值是keep-alive
Accept-Encoding:说明自己可以接收的压缩方式
User-Agent:用户代理,是服务器能识别客户端的操作系统(Android、IOS、WEB)及相关的信息。作用是帮助服务器区分客户端,并且针对不同客户端让用户看到不同数据,做不同操作。
Content-Type:服务器告诉客户端数据的格式,常见的值有text/plain,image/jpeg,image/png,video/mp4,application/json,application/zip。这些数据类型总称为MIME TYPE。
Content-Encoding:服务器数据压缩方式
Transfer-Encoding:chunked表示采用分块传输编码,有该字段则无需使用Content-Length字段。
Content-Length:声明数据的长度,请求和回应头部都可以使用该字段。
HTTP之状态码:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:

Get和Post方法的区别:
- GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
- 传输数据的大小有限制(Http协议无限制,实际开发浏览器和服务器都会有限制),Get方式浏览器对URL的长度有限制,Post理论来说无限制。
- POST的安全性要比GET的安全性高。
三次握手:
那么,为什么一定要三次握手呢,一次可以吗?两次可以吗?
第一次握手,A向B发送信息后,B收到信息。B可确认A的发信能力和B的收信能力 第二次握手,B向A发消息,A收到消息。A可确认A的发信能力和收信能力,A也可确认B的收信能力和发信能力 第三次握手,A向B发送消息,B接收到消息。B可确认A的收信能力和B的发信能力
通过三次握手,A和B都能确认自己和对方的收发信能力,相当于建立了互相的信任,就可以开始通信了。
Https协议
Https协议是以安全为目标的Http通道,简单来说就是Http的安全版。主要是在Http下加入SSL层(现在主流的是SLL/TLS),SSL是Https协议的安全基础。Https默认端口号为443。
Http协议存在的风险:
1.窃听风险:Http采用明文传输数据,第三方可以获知通信内容
2.篡改风险:第三方可以修改通信内容
3.冒充风险:第三方可以冒充他人身份进行通信
SSL/TLS协议就是为了解决这些风险而设计。
SSL原理及运行过程: SSL/TLS协议基本思路是采用公钥加密法(最有名的是RSA加密算法)。大概流程是,客户端向服务器索要公钥,然后用公钥加密信息,服务器收到密文,用自己的私钥解密。为了防止公钥被篡改,把公钥放在数字证书中,证书可信则公钥可信。公钥加密计算量很大,为了提高效率,服务端和客户端都生成对话秘钥,用它加密信息,而对话秘钥是对称加密,速度非常快。
大概流程:
- 客户端给出协议版本号、一个客户端随机数A(Client random)以及客户端支持的加密方式
- 服务端确认双方使用的加密方式,并给出数字证书、一个服务器生成的随机数B(Server random)
- 客户端确认数字证书有效,生成一个新的随机数C(Pre-master-secret),使用证书中的公钥对C加密,发送给服务端
- 服务端使用自己的私钥解密出C
- 客户端和服务器根据约定的加密方法,使用三个随机数ABC,生成对话秘钥,之后的通信都用这个对话秘钥进行加密。
Http和Https的区别如下:
- https协议需要到CA申请证书,大多数情况下需要一定费用
- Http是超文本传输协议,信息采用明文传输,Https则是具有安全性SSL加密传输协议
- Http和Https端口号不一样,Http是80端口,Https是443端口
- Http连接是无状态的,而Https采用Http+SSL构建可进行加密传输、身份认证的网络协议,更安全
- Http协议建立连接的过程比Https协议快。因为Https除了Tcp三次握手,还要经过SSL握手。连接建立之后数据传输速度,二者无明显区别
TCP和UDP协议
TCP(传输控制协议): 是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
UDP(用户数据报协议): 是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
TCP与UDP的区别:
1.TCP是面向连接的;UDP是无连接的,即发送数据之前不需要建立连接。
2.TCP提供可靠的服务,即传输的数据无差错,不丢失,不重复,按序到达;UDP尽最大努力交付,不保证交付可靠。
3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5.CP首部开销20字节;UDP的首部开销小,只有8个字节
6.CP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
UDP应用场景
1.面向数据报方式
2.网络数据大多为短消息
3.拥有大量Client
4.对数据安全性无特殊要求
5.网络负担非常重,但对响应速度要求高
TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
8、关闭监听;
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;