http面试知识

一、Http和Https的基本概念

Http:超文本传输协议(Http,HyperText Transfer Protocol):是一种基于请求与响应模式的、无状态的、应用层协议,设计Http最初的目的是为了提供一种发布和接收HTML页面的方法。它可以使浏览器更加高效。Http协议是以明文方式发送信息的,如果黑客截取了Web浏览器和服务器之间的传输报文,就可以直接获得其中的信息。

 

Https:是以安全为目标的Http通道,是Http的安全版。Https的安全基础是SSL。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

 

二、Http协议的请求报文和响应报文由什么组成?

 

          请求报文包括三部分:

(1).请求行:包含请求方法,URI,HTTP版本协议

(2).请求首部字段

(3).请求内容实体

 

         响应报文包含三部分:

(1).状态行:包含HTTP版本,状态码,状态码原因短语

(2).响应首部字段

(3).响应内容实体

 

        常见HTTP首部字段

(1)、通用首部字段(请求报文与响应报文都会使用的首部字段)

Date:创建报文时间

Connection:连接的管理

Cache-Control:缓存的控制

Transfer-Encoding:报文主体的传输编码方式

(2)、请求首部字段(请求报文会使用的首部字段)

Host:请求资源所在服务器

Accept:可处理的媒体类型

Accept-Charset:可接收的字符集

Accept-Encoding:可接受的内容编码

Accept-Language:可接受的自然语言

(3)、响应首部字段(响应报文会使用的首部字段)

Accept-Ranges:用来告知客户端,服务器是否能处理范围请求

Location:令客户端重新定向到的URI

Server:HTTP服务器应用程序的信息

(4)、实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)

Allow:资源可支持的HTTP方法

Content-Type:实体主类的类型

Content-Encoding:实体主体适用的内容编码方式(内容编码是指在不丢失实体信息的前提下所进行的压缩)

Content-Language:实体主体的自然语言(指中文或者英文等语言)

Content-Length:实体主体的的字节数(若对实体主体进行内容编码传输时,不能再使用content-length首部字段)

Content-Range:实体主体的位置范围,一般用于发出部分请求时使用 

Last-Modified:指明资源最后一次修改的时间      

Expires:会将资源失效的日期告知客户端

Content-Location:报文主体返回资源对应的URI

Content-MD5:是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达

             

三、常见的http状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。

 

类别

原因短语

1XX

Informational(信息性状态码)

接收的请求正在处理

2XX

Success(成功状态码)

接收正常处理完毕

3XX

Redirection(重定向状态码)

需要进行附加操作以完成请求

4XX

Client error(客户端错误状态码)

服务器无法处理请求

5XX

Server Error(服务器错误状态码)

服务器处理请求出错

 

200:请求被正常处理
204:请求已成功处理,但没有资源可以返回
206:客户端资源的一部分请求服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。

301:永久性重定向该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
302:临时重定向该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
303:302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源被服务器拒绝了,(可能时无访问权限,或者访问权限出错之类的)
404:服务器无法找到对应资源
500:服务器处理请求时发生了错误,可能时web应用存在bug或临时某些故障。
503:服务器正忙或者正在停机维护,现在无法处理请求

 

四、常见的http的请求方法有哪些?

GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器

POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式

PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置

HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效

DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件

OPTIONS:查询响应URI支持的HTTP方法

 

五、GET方法与POST方法的区别

(1)、get重点在从服务器上获取资源,post重点在向服务器发送数据;

(2)、get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;

post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;

(3)、Get传输的数据量小,因为受URL长度限制,但效率较高;

Post可以传输大量数据,所以上传文件时只能用Post方式;

(4)、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;

post较get安全性较高;

(5)、get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。

post支持标准字符集,可以正确传递中文字符。

 

六、http和https的区别

(1)、连接方式不一样,http协议通过tcp三次握手成功之后,传输信息,https是先建立ssl连接,端口号也不一样,http的端口号是80,https的端口号是443。

(2)、http是超文本传输协议,信息是明文传输,内容可能会被窃听,也可能会被抓被分析;http不验证通信双方身份,可能会遭到伪装;无法验证报文的完整性,可能会被篡改。(http的缺点)

(3)、Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性;使用Https协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;Https是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。(https的优点)

(4)、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

 

七、Https的缺点(对比优点)

1、Https协议握手阶段比较费时,会使页面的加载时间延长近。

2、Https连接缓存不如Http高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响;

3、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

4、Https协议的加密范围也比较有限。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

 

八、https的通信步骤

步骤一:客户端向服务器端发送请求报文,报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度等)。

步骤二:服务器可进行ssl通信时,会发送响应报文,报文中包含ssl版本以及加密组件。服务器的加密组件内容是收到的客户端的加密组件筛选出来的。

步骤三:之后服务器发送certificate报文。报文中包含公开密钥证书

步骤四:最后服务器发送会再向客户端发送一个响应报文,通知客户端,最初阶段的ssl握手协商部分结束。

步骤五:ssl第一次握手结束之后,客户端向服务器发送报文作为回应,报文中包含通信加密使用的一种被称为per-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。

 步骤6:接着客户端继续发送ChangeCipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。

步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

 步骤8:服务器同样发送Change Ci -pher Spec报文。

步骤9:服务器同样发送Finished报文。

步骤10:服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。

步骤11:应用层协议通信,即发送HTTP响应。

 

九、HTTP1.1版本新特性

a、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求,好处是减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,另外,减少开销的时间使HTTP请求和响应能够更早地结束,这样web页面的显示速度也就相应提高了。

b、管线化,客户端可以发出HTTP请求之后,不用等待服务器响应,再接着发送下一个请求

c、断点续传,例:客户端下载文件过程中,网络中断,客户端记录下当前的下载进度,有网络之后,客户端可以向服务器端请求续传,向服务器发送带有当前下载进度的请求报文,

 

十、什么是无状态协议?怎么解决Http协议无状态协议?

(1)、无状态协议对于事务处理没有记忆能力。也就是说,无法根据之前的状态进行本次的请求处理。例如:要求登陆认证的web页面本身无法进行状态管理,那么每次跳转新页面都要再次登陆

(2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值