HTTP/TCP/UDP 都是通信协议,即通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。
TCP/HTTP/UDP三者的关系
TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
什么是HTTP协议
HTTP全称是HyperText Transfer Protocal,即:超文本传输协议,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
HTTPS通信原理
HTTPS全称是Secure Hypertext Transfer Protocol安全超文本传输协议,它是一个安全通信通道。
HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS:SSL (Secure Socket Layer,安全套接字层)、TLS (Transport Layer Security,传输层安全协议)、SSL使用40 位关键字作为RC4流加密算法。
HTTP是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会通过HTTP在Internet上进行数据的发送和接收。HTTP是一个基于请求/响应模式的、无状态的协议。即我们通常所说的Request/Response。
Https的作用
内容加密建立一个信息安全通道,来保证数据传输的安全。
身份认证确认网站的真实性。
数据完整性防止内容被第三方冒充或者篡改。
5.HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
Https和Http的区别
https协议需要到CA申请证书。
http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
http默认使用80端口,https默认使用443端口。
TCP:传送控制协议(Transmission Control Protocol)
UDP:用户数据报协议(User Datagram Protocol)
TCP与UDP基本区别
基于连接与无连接;
TCP要求系统资源较多,UDP较少;
UDP程序结构较简单;
流模式(TCP)与数据报模式(UDP);
TCP保证数据正确性,UDP可能丢包;
TCP保证数据顺序,UDP不保证;
TCP与UDP区别总结
TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
TCP首部开销20字节;UDP的首部开销小,只有8个字节6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
socket: 是为了实现以上的通信过程而建立起来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。
socket只是一种连接模式,不是协议,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
tcp/udp是两个最基本的协议,很多其它协议都是基于这两个协议,如http就是基于tcp的,用socket可以创建tcp连接,也可以创建udp连接,这意味着,用socket可以创建任何协议的连接,因为其它协议都是基于此的。
基于Socket传输的特点
优点
1) 传输数据为字节级,传输数据可自定义,数据量小(对于手机应用讲:费用低)。
2)传输数据时间短,性能高。
3)适合于客户端和服务器端之间信息实时交互。
4)可以加密,数据安全性强。
缺点:
1)需对传输的数据进行解析,转化成应用级的数据。
2)对开发人员的开发水平要求高。
3)相对于Http协议传输,增加了开发量。
基于http协议的传输特点
优点:
1)基于应用级的接口使用方便。
2)程序员开发水平要求不高,容错性强。
缺点:
1)传输速度慢,数据包大(Http协议中包含辅助应用信息)。
2)如实时交互,服务器性能压力大。
3)数据传输安全性差。
基于Socket传输适用范围
基于Socket传输方式适合于对传输速度,安全性,实时交互,费用等要求高的应用中,如网络游戏,手机应用,银行内部交互等。
基于Http协议传输的适用范围
基于http协议传输方式适合于对传输速度,安全性,要求不是很高,且需要快速开发的应用,如公司OA系统,互联网服务等。
Request的消息
Accept:浏览器端可以接受的媒体类型,通配符 * 代表任意类型。
Referer:提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的。
Accept-Language:浏览器申明自己接收的语言。
Content-Type:
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。
Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法。
User-Agent:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。
Connection:keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接;close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Content-Length:发送给HTTP服务器数据的长度。
Host:请求报头域主要用于指定被请求资源的Internet主机和端口号,通常从HTTP URL中提取出来的。
Pragma:防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样。
Cookie:将cookie的值发送给HTTP服务器。
Accept-Charset:浏览器申明自己接收的字符集。
Response消息
Cache-Control:指定Response-Request遵循的缓存机制。
Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集。
Expires: 浏览器会在指定过期时间内使用本地缓存。
Last-Modified: 用于指示资源的最后修改日期和时间。
X-AspNet-Version:如果网站是用ASP.NET开发的,这个header用来表示ASP.NET的版本。
X-Powered-By:表示网站是用什么技术开发的。
Connection:keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接; close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Content-Length:指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。
Date: 生成消息的具体时间和日期。
HTTP协议之GET和POST
HTTP协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET、POST、PUT、DELETE。
一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。
最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
GET和POST的区别
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说GET是通过地址栏来传值,而POST是通过提交表单来传值。
GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
网友评论