GET 和 POST 的区别
(GET)请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=value2css
-
GET 请求可被缓存html
-
GET 请求保留在浏览器历史记录中linux
-
GET 请求可被收藏为书签面试
-
GET 请求不该在处理敏感数据时使用浏览器
-
GET 请求有长度限制缓存
-
GET 请求只应当用于取回数据POST 方法(POST)请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:POST /test/demo_form.asp HTTP/1.1Host: w3schools.comname1=value1&name2=value2安全
-
POST 请求不会被缓存服务器
-
POST 请求不会保留在浏览器历史记录中cookie
-
POST 不能被收藏为书签网络
-
POST 请求对数据长度没有要求
dns使用的协议
既使用TCP又使用UDP
- 首先了解一下TCP与UDP传送字节的长度限制:
- UDP报文的最大长度为512字节,而TCP则容许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。一般传统的UDP报文通常不会大于512字节。
- 区域传送时使用TCP,主要有一下两点考虑:
- 辅域名服务器会定时(通常时3小时)向主域名服务器进行查询以便了解数据是否有变更。若有变更,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,由于数据同步传送的数据量比一个请求和应答的数据量要多得多。
- TCP是一种可靠的链接,保证了数据的准确性。
- 域名解析时使用UDP协议:
- 客户端向DNS服务器查询域名,通常返回的内容都不超过512字节,用UDP传输便可。不用通过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也能够指定向DNS服务器查询的时候使用TCP,但事实上,不少DNS服务器进行配置的时候,仅支持UDP查询包。
你们以为本次面试题总结的写得不错的朋友,你们能够转发+关注,而后扫描下方二维码获取更多面试题以及答案— 扫描添加暗号:【CSDN】
幂等
一个幂等操做的特色是其任意屡次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可使用相同参数重复执行,并能得到相同结果的函数。这些函数不会影响系统状态,也不用担忧重复执行会对系统形成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数.
Cookies和session区别
-
Cookies是一种可以让网站服务器把少许数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个很是小的文本文件,它能够记录你的用户ID、密码、浏览过的网页、停留的时间等信息。session: 当用户请求来自应用程序的 Web 页时,若是该用户尚未会话,则 Web 服务器将自动建立一个 Session 对象。当会话过时或被放弃后,服务器将终止该会话。cookie机制:采用的是在客户端保持状态的方案,而session机制采用的是在服务端保持状态的方案。同时咱们看到因为服务器端保持状态的方案在客户端也须要保存一个标识,因此session机制可能须要借助cookie机制来达到保存标识的目的。
-
Session是服务器用来跟踪用户的一种手段,每一个Session都有一个惟一标识:session ID。当服务器建立了Session时,给客户端发送的响应报文包含了Set-cookie字段,其中有一个名为sid的键值对,这个键值Session ID。客户端收到后就把Cookie保存浏览器,而且以后发送的请求报表都包含SessionID。HTTP就是经过Session和Cookie这两个发送一块儿合做来实现跟踪用户状态,Session用于服务端,Cookie用于客户端
TCP粘包和拆包产生的缘由
- 应用程序写入数据的字节大小大于套接字发送缓冲区的大小
- 进行MSS大小的TCP分段。MSS是最大报文段长度的缩写。MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。因此MSS并非TCP报文段的最大长度,而是:MSS=TCP报文段长度-TCP首部长度
- 以太网的payload大于MTU进行IP分片。MTU指:一种通讯协议的某一层上面所能经过的最大数据包大小。若是IP层有一个数据包要传,并且数据的长度比链路层的MTU大,那么IP层就会进行分片,把数据包分红托干片,让每一片都不超过MTU。注意,IP分片能够发生在原始发送端主机上,也能够发生在中间路由器上。
TCP粘包和拆包的解决策略
- 消息定长。例如100字节。
- 在包尾部增长回车或者空格符等特殊字符进行分割,典型的如FTP协议
- 将消息分为消息头和消息尾。
- 其它复杂的协议,如RTMP协议等。
三次握手
第一次握手:创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据
四次挥手
- 客户端先发送FIN,进入FIN_WAIT1状态
- 服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态
- 服务端发送FIN,进入LAST_ACK状态
- 客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态
TIME_WAIT的状态就是主动断开的一方(这里是客户端),发送完最后一次ACK以后进入的状态。而且持续时间还挺长的。客户端TIME_WAIT持续2倍MSL时长,在linux体系中大概是60s,转换成CLOSE状态
TIME_WAIT
TIME_WAIT 是主动关闭连接时造成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。 因为TIME_WAIT 的时间会很是长,所以server端应尽可能减小主动关闭链接
CLOSE_WAIT
CLOSE_WAIT是被动关闭链接是造成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,所以进入CLOSE_WAIT状态。但若是服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在不少CLOSE_WAIT状态的链接。此时,多是系统忙于处理读、写操做,而未将已收到FIN的链接,进行close。此时,recv/read已收到FIN的链接socket,会返回0。
为何须要 TIME_WAIT 状态?
假设最终的ACK丢失,server将重发FIN,client必须维护TCP状态信息以即可以重发最终的ACK,不然会发送RST,结果server认为发生错误。TCP实现必须可靠地终止链接的两个方向(全双工关闭),client必须进入 TIME_WAIT 状态,由于client可能面 临重发最终ACK的情形。
为何 TIME_WAIT 状态须要保持 2MSL 这么长的时间?
若是 TIME_WAIT 状态保持时间不足够长(好比小于2MSL),第一个链接就正常终止了。第二个拥有相同相关五元组的链接出现,而第一个链接的重复报文到达,干扰了第二个链接。TCP实现必须防止某个链接的重复报文在链接终止后出现,因此让TIME_WAIT状态保持时间足够长(2MSL),链接相应方向上的TCP报文要么彻底响应完毕,要么被 丢弃。创建第二个链接的时候,不会混淆。
TIME_WAIT 和CLOSE_WAIT状态socket过多
若是服务器出了异常,百分之八九十都是下面两种状况:
1.服务器保持了大量TIME_WAIT状态
2.服务器保持了大量CLOSE_WAIT状态,简单来讲CLOSE_WAIT数目过大是因为被动关闭链接处理不当致使的。
一次完整的HTTP请求过程
域名解析 --> 发起TCP的3次握手 --> 创建TCP链接后发起http请求 --> 服务器响应http请求,浏览器获得html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
讲一下长链接
1、基于http协议的长链接
- 在HTTP1.0和HTTP1.1协议中都有对长链接的支持。其中HTTP1.0须要在request中增长”Connection: keep-alive“ header才可以支持,而HTTP1.1默认支持.
- http1.0请求与服务端的交互过程:
- 客户端发出带有包含一个header:”Connection: keep-alive“的请求
- 服务端接收到这个请求后,根据http1.0和”Connection: keep-alive“判断出这是一个长链接,就会在response的header中也增长”Connection: keep-alive“,同是不会关闭已创建的tcp链接.
- 客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长链接,不关闭这个链接。并用该链接再发送request.转到a)
2、发心跳包。每隔几秒就发一个数据包过去
TCP如何保证可靠传输?
- 三次握手。
- 将数据截断为合理的长度。应用数据被分割成 TCP 认为最适合发送的数据块(按字节编号,合理分片)
- 超时重发。当 TCP 发出一个段后,它启动一个定时器,若是不能及时收到一个确认就重发
- 对于收到的请求,给出确认响应
- 校验出包有错,丢弃报文段,不给出响应
- 对失序数据进行从新排序,而后才交给应用层
- 对于重复数据 , 可以丢弃重复数据
- 流量控制。TCP 链接的每一方都有固定大小的缓冲空间。TCP 的接收端只容许另外一端发送接收端缓冲区所能接纳的数据。这将防止较快主机导致较慢主机的缓冲区溢出。
- 拥塞控制。当网络拥塞时,减小数据的发送。
详细介绍http
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
特色
-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
-
灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
-
无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。
-
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快。
-
支持B/S及C/S模式。
请求消息Request
- 请求行,用来讲明请求类型,要访问的资源以及所使用的HTTP版本.
- 请求头部,紧接着请求行(即第一行)以后的部分,用来讲明服务器要使用的附加信息从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,而且在每一个请求中自动发送等等
- 空行,请求头部后面的空行是必须的
- 请求数据也叫主体,能够添加任意的其余数据。
响应消息Response
- 状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
- 消息报头,用来讲明客户端要使用的一些附加信息
- 空行,消息报头后面的空行是必须的
- 响应正文,服务器返回给客户端的文本信息。
状态码
- 200 OK //客户端请求成功
- 301 Moved Permanently //永久重定向,使用域名跳转
- 302 Found // 临时重定向,未登录的用户访问用户中心重定向到登陆页面
- 400 Bad Request //客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用
- 403 Forbidden //服务器收到请求,可是拒绝提供服务
- 404 Not Found //请求资源不存在,eg:输入了错误的URL
- 500 Internal Server Error //服务器发生不可预期的错误
- 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
http的方法
- get:客户端向服务端发起请求,得到资源。请求得到URL处所在的资源。
- post:向服务端提交新的请求字段。请求URL的资源后添加新的数据。
- head:请求获取URL资源的响应报告,即得到URL资源的头部
- patch:请求局部修改URL所在资源的数据项
- put:请求修改URL所在资源的数据元素。
- delete:请求删除url资源的数据
URI和URL的区别
URI,是uniform resource identifier,统一资源标识符,用来惟一的标识一个资源。Web上可用的每种资源如HTML文档、图像、视频片断、程序等都是一个来URI来定位的
URI通常由三部组成:
- 访问资源的命名机制
- 存放资源的主机名
- 资源自身的名称,由路径表示,着重强调于资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL能够用来标识一个资源,并且还指明了如何locate这个资源。URL是Internet上用来描述信息资源的字符串,主要用在各类WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL能够用一种统一的格式来描述各类信息资源,包括文件、服务器的地址和目录等。
URL通常由三部组成:
- 协议(或称为服务方式)
- 存有该资源的主机IP地址(有时也包括端口号)
- 主机资源的具体地址。如目录和文件名等
HTTPS和HTTP的区别
- https协议须要到CA申请证书,通常免费证书不多,须要交费。
- http是超文本传输协议,信息是明文传输;https 则是具备安全性的ssl加密传输协 议。
- http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。
- http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
- http默认使用80端口,https默认使用443端口
https是如何保证数据传输的安全
https实际就是在TCP层与http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书,等技术进行客户端与服务器的数据加密传输,最终达到保证整个通讯的安全性。
- SSL/TLS协议做用:
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取;
- 维护数据的完整性,确保数据在传输过程当中不被改变。
PS:若是以为个人分享不错,欢迎你们随手点赞、转发。
以上即是这次分享的面试题以及答案,若是以为还不过瘾,你们能够关注个人公众号-【Java烂猪皮】,里面有往期的面试题以及最新的面试分享,关注后回复:【666】便可免费获取更多的Java架构进阶vip学习资料