一、http协议:

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的-缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

1、http的特点:

(1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

(2)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

(3)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

(4)无状态:HTTP协议是无状态协议。指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

(5)支持B/S及C/S模式。

2、http和https的区别:

(1)http是超文本传输协议,运行在TCP之上,明文传输,客户端与服务端都无法验证对方的身份;https是身披SSL(Secure Socket )外壳的http,运行在SSL上,SSL运行在TCP之上,是添加了加密和认证机制的http,更加安全。

(2)端口不同:http使用的是80端口,https使用的443端口。

(3)资源消耗:和http通信相比,https通信会由于加解密处理消耗更多的CPU和内存资源。

(4)开销:https通信需要证书,而证书一般需要向认证机构购买。

https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

3、https是如何保证数据传输的安全:

https实际就是在TCP层与http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。

(1)SSL/TLS协议作用:

①认证用户和服务器,确保数据发送到正确的客户机和服务器;

②加密数据以防止数据中途被窃取;

③维护数据的完整性,确保数据在传输过程中不被改变。

(2)对称加密与非对称加密:

①对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

②由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

4、http的长连接和短连接:

http的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在网络层使用IP协议,主要解决网络路由和寻址问题;在传输层使用TCP协议,主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致,具有可靠、面向连接的特点。

(1)短连接:在HTTP/1.0中,默认使用的短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接,在http1.0中,如果想使用长连接,需要在request中设置“keep-alive“ 才能够支持。

(2)长连接:从HTTP/1.1起,默认使用的是长连接,用于保持连接特性。使用长连接的HTTP协议,会在响应头有加入:Connection:keep-alive。当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

(2.5)TCP连接:

当网络通信采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时,它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的。

①TCP短连接: client向server发起连接请求=>server接到请求,然后双方建立连接=>client向server发送消息=>server回应client,然后一次读写就完成了。==>这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作,短连接一般只会在 client/server间传递一次读写操作。

②TCP长连接: client向server发起连接=>server接受client连接,双方建立连接=>Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

(3)长连接和短连接的优点和缺点:

①长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户,适用长连接。但在长连接下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,随着客户端连接越来越多,server早晚有扛不住的时候。

②短连接的优点是,管理简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和宽带。

(4)什么时候使用长连接和短连接:

①长连接多用于操作频繁,点对点的通信,而且连接数不能太多的情况。因为每个TCP连接都需要三次握手,如果每个操作都是先连接再操作的话,那么处理速度会降低很多,所以每个操作完后都不断开,下次处理时直接发送数据包就可以了。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

②向Web网站的http服务一般都使用短连接,因为长连接对服务端来说会耗费一定的资源,而像Web网站这么频繁操作的成千上万的甚至上亿客户端的连接,使用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

5、完整的HTTP请求过程,即从输入网址到获得页面的过程:

DNS域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

(1)浏览器查询DNS,获取域名对应的IP地址:具体过程包括浏览器抢搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此结果具有权威性)。如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址的映射关系,那么将根据其设置发起递归查询或者迭代查询。

(2)浏览器得到域名对应的IP地址之后,向服务器请求建立链接,发送三次握手;

(3)TCP/IP链接链接建立起来后,浏览器向服务器发送http请求;

(4)服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果以及相应的视图返回给浏览器。

(5)浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述的步骤并向服务器请求这些资源;

(6)浏览器根据请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

6、http/1.1和http/2.0的区别:

(1)多路复用:

在HTTP/1.1协议中,浏览器客户端在同一时间针对同一域名的请求有一定数据限制。超过限制数目的请求会被阻塞。
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

(2)首部压缩:

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

(3)服务器推送:

当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。 

(4)http2.0采用二进制而不是文本格式。

 

二、什么是URI和URL:

(1)URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的,URI一般由三部组成:

①访问资源的命名机制;②存放资源的主机名;③资源自身的名称,由路径表示,着重强调于资源。

(2)URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:

①协议(或称为服务方式);②存有该资源的主机IP地址(有时也包括端口号);③主机资源的具体地址。如目录和文件名等。

(3)在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流。

 

三、get和 post 请求的区别:

(1)从功能上,get一般用来从服务器上面获取资源,post一般用来更新服务器上面的资源。

(2)从REST服务角度上看,get是幂等的,即读取同一个资源,总是得到相同的资源,而post不是幂等的,因为每次请求对资源的改变并不是相同的。也就是,get请求不会改变服务器上的资源,而post请求会对服务器上面的资源造成改变。

(3)get请求提交,请求的数据会附在URL之后,以?号分割URL和请求参数,多个参数之间使用&号进行连接。而post请求则会把提交的数据放置在http请求报文的请求体中。

(4)从安全性,post的安全性要比get的安全性高,因为get请求的提交的数据明文出现在URL上,而post请求提交的数据则被封装到请求体中,相对更安全。

(5)传输数据量的大小:get请求的数据量受限于浏览器或者服务器对URL长度的限制,允许发送的数据量比较小,而post请求则是没有大小限制的。

(6)get请求可以被缓存,可以被保留在浏览器的历史记录中;post请求不会被缓存,不会被保留在浏览器的历史记录中。

 

四、Cookie、Session与Application:

1、什么是cookie、session和application:

Cookie和Session都是客户端和服务器之间保持状态的解决方法,cookie机制采用在客户端保持状态信息,而session机制采用的是在服务器端保持状态的方案。

(1)Cookie:Cookie实际上就是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,而客户端浏览器会把cookie保存起来。当浏览器再次请求该网站是,浏览器把请求的网站连同该cookie一起提交给服务器,服务器会检查该cookie,以此来辨认用户状态。

(2)Session:Session用于在服务器端记录用户的状态信息。当客户端请求服务器器是,如果服务器已经为该客户端创建过Session,服务器就按照Session id把这个session检索出来使用;如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,并将这个sessionid在本次响应中返回给客户端保存。客户端保存这个sessionid的方式可以使用cookie机制。这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器;若浏览器禁用Cookie的话,可以通过 URL重写机制 将sessionid传回服务器。

(3)Application:与一个web应用程序相对应,为应用程序提供了一个全局的状态,所有客户都可以使用该状态。

2、cookie和session的区别:

(1)保存位置:cookie采用在客户端保存状态信息,session采用在服务端保存状态信息。

(2)实现机制:session的实现依赖于cookie机制,通过cookie机制回传sessionID。

(3)大小限制:cookie有大小限制,并且浏览器对每个站点也有cookie的个数限制;session没有大小限制,理论上只跟服务器的内存大小有关。

(4)安全性:cookie存在安全隐患,通过拦截或本地文件找到cookie后可以进行攻击,而session由于保存在服务器端,相对更加安全。

(5)服务器资源消耗:session是保存在服务器上,会存在一段时间才消失,如果session数量过多,会增加服务器的压力。

 

五、应用层其他相关的协议:

1、DNS域名系统:

主要用于域名解析服务,将域名地址转换为IP地址,基于UDP服务,使用53端口。DNS底层既使用TCP又使用UDP协议:

(1)域名解析时使用UDP协议:

客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。

(2)区域传送时使用TCP,主要有一下两点考虑:

①辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。

②TCP是一种可靠的连接,保证了数据的准确性。

2、DHCP:

动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

3、FTP:定义了文件传输协议,使用21端口。上传下载文件,都要用到FTP服务。

4、Telnet:远程终端协议,它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,提供一种基于DOS模式下的通信服务。

5、SMTP:定义了简单邮件传送协议,用于发送邮件,使用25号端口。

6、POP3:与SMTP对应,POP3用于接收邮件。使用110端口。

7、SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。

8、TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在69端口上使用UDP服务。

 

六、HTTP常见状态码及方法:

HTTP请求结构:请求方法+请求URI+协议及其版本

HTTP响应结构:状态码+原因短语+协议及其版本

1、状态码:

(1)1xx:请求处理中,请求已被接受,正在处理。

(2)2xx:请求成功,请求被成功处理。

200 :OK,客户端请求成功;

(3)3xx:重定向,要完成请求必须进一步处理。

301:永久性转移。

302:暂时重定向。

304:已缓存。

(4)4xx:客户端错误,请求不合法。

400:请求语法有问题。

401:请求未经授权。

403:拒绝请求,服务器收到请求,但是拒绝提供服务。

404:客户端所访问的页面不存在。

(5)5xx:服务端错误,服务端不能处理合法请求。

500:服务器内部错误。

503:服务不可用,一段时间后可能恢复正常。

2、http的常见请求方法:

(1)get:客户端向服务端发起请求,获得资源。请求获得URL处所在的资源。

(2)post:向服务端提交新的请求字段,数据被包含在请求体中。

(3)head:请求获取URL资源的响应报告,即获得URL资源的头部

(4)patch:请求局部修改URL所在资源的数据。

(5)put:请求修改URL所在资源的数据。

(6)delete:请求删除指定URL的资源。

(7)connect:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

(8)options:允许客户端查看服务器的性能。

(9)trace:回显服务器收到的请求,主要用于测试或诊断。

 

参考博客:https://blog.csdn.net/justloveyou_/article/details/78303617

收藏 打印