图解HTTP总结(常见面试题)

问题1.HTTP和HTTPS有什么区别

HTTP的URL是http://开头,而https的URL是https://开头
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 标准端口是80 ,而 HTTPS 的标准端口是443

引申问题:为什么有了HTTP还要https:
因为http存在信息窃听或身份伪装的不安全问题,使用https通信机制就可以有效的防止这些问题

引申问题:http是什么环节导致了它是不安全的?
1.http通信使用明文(不加密),内容可能会被窃听  =》http本身不具备加密的功能
2.http不对通信方进行身份认证,有可能出现身份伪装
3.无法证明报文的完整性,所有有可能已经遭到篡改


https针对上述三个问题进行了改进:
1.http通过和SSL和TSL组合使用,进行通信加密(通信线路加密)===》也有一种方式就是对通信的内容进行加密,但同样存在被篡改的风险
  SSL加密技术:
     1)公开加密方式:共享密钥加密,使用两把钥匙加密的公开密钥加密
2.http对于任何请求都会响应,不确认通信方,出现以下隐患:伪装的服务器,伪装的客户端,无法判定是否具有访问权限
  通信双方应有证书,从而判定对方真实的意图
3.无法确认收到的数据中途没有被篡改
完整性保护:
应用层发送数据时会附加一种叫做 MAC(MessageAuthentication Code)的报文摘要。MAC 能够查知报文是否遭到篡
改,从而保护报文的完整性

由此可见:http+加密+认证+完整性保护=https

HTTPS 通信
步骤 1: 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤 2: 服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。
步骤 5: SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec 报文。
步骤 9: 服务器同样发送 Finished 报文。
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL 连接
就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用
层协议的通信,即发送 HTTP 请求。
步骤 11: 应用层协议通信,即发送 HTTP 响应。
步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报
文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP
的通信。
补充知识:
http认证:
   1)basic:用户ID+密码
   2)digest认证:客户端请求认证要求,服务器发送质询码,客户端响应服务器
   3)SSL:服务器会发送证书请求报文,要求客户端提供证书,客户端按照一定格式提供证书,服务器进一步核验证书


2.HTTP格式:请求行,消息报头,请求正文



3.URI和URL有什么区别?

前者是统一资源标识符,后者是统一资源定位符,后者只是其中的一种
URN  Uniform Resource Name 统一资源名称

4.常用的http方法:

  1)GET:请求访问,获取资源
  2)post:传输信息给服务器
两者区别;前者从服务器获取数据,后者给服务器发送数据
          前者传输数据量小,效率高,后者可以传输大量数据,所以上传文件采用post
  3)获取报头,和get方法类似,但不返回报文主体,一般用于验证URI是否有效
  4)PUT传输文件
  5)DELETE:删除文件
  6)OPTIONS:查询相应URI支持的HTTP方法

5.请求报文格式:

  请求行:请求方法,URI,HTTP版本信息
  请求首部字段
  请求实体内容

6.响应报文格式:

  状态行:HTTP版本,状态码,状态码的原因短语
  响应首部字段
  响应内容实体


7.常见HTTP状态码:


1XX:表示请求已接收,继续处理
2XX:成功接收
3XX:重定向--要完成请求必须进一步的操作
4XX:客户端错误--请求语法错误或请求无法实现
5XX:服务器错误--服务器未能实现合法的请求

200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法

400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙


8.什么是http协议无状态协议,怎么解决?

无状态协议是指对于事务处理没有记忆能力
使用cookie解决无状态问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

9.http通信

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
1).建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建 Internet,
即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则, 只有低层协议建立之后
才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。


2).Web浏览器向Web服务器发送请求行
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET /sample/hello.jsp HTTP/1.1。


3).Web浏览器发送请求头
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。


4).Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。


5).Web服务器发送应答头


正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。


6).Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。


7).Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间
,还节约了网络带宽。

10.http1.1新特性

1)默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP
2)管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应
3)断点续传:实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输。

猜你喜欢

转载自blog.csdn.net/qq_38211852/article/details/80052071