HTTP面试看我就够了

作者: 大爷的二舅 | 来源:发表于2018-02-12 23:16 被阅读270次

    1.1 HTTP协议简介

    HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,现在使用的协议版本是1.1(http0.9已经成为过去,http2.0尚在开发中)。

    1.2 在TCP/IP协议栈中的位置

    HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示 协议族.png

    默认HTTP的端口号为80,HTTPS的端口号为443。

    1.3 TCP/IP通信传输流

    客户端 服务端
    应用层 HTTP HTTP
    传输层 TCP TCP
    网络层 IP IP
    数据链路层 网络 网络

    在进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则从数据链路层往上走。发送端每经过一层传输数据时,就会被打上对应层所属的首部信息进行封装,接收端在层与层之间传输数据时,每经过一层就会把对应的首部去掉。

    在传输数据时,http主要承载的协议是IP、TCP、DNS

    IP层主要用于网络传输,确保数据能够正确传输给对方,在这里就会用到IP地址和Mac地址,IP和mac地址是相互绑定和映射的关系,传输过程中,使用ARP协议就可以通过IP地址反查出Mac地址。为了将数据准确可靠的传给对方,我们使用传输层的TCP协议(UDP协议不可靠),TCP协议通过三次握手策略进行传输确认,(发送端)SYN—(接收端)SYN/ACK—(发送端)ACK,代表握手成功。DNS服务和http协议一样位于应用层 ,提供域名到IP地址之间的解析服务。

    1.4 HTTP是不保存状态的协议

    即无状态协议,对请求和响应之间的通信状态不尽兴保存。每当有新的请求发送,就会有新的响应产生。

    1.5 HTTP请求方式

    请求方式 作用
    GET 获取资源
    POST 传输实体主题
    PUT 传输文件
    DELETE 删除文件

    GET和POST的区别:

    HTTP超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文。HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。GET请求:参数在地址后拼接,没有请求数据,不安全(因为所有参数都拼接在地址后面),不适合传输大量数据(长度有限制,为1024个字节)。GET提交、请求的数据会附在URL之后,即把数据放置在HTTP协议头中。

    以?分割URL和传输数据,多个参数用&连接。如果数据是英文字母或数字,原样发送,

    如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。

    POST请求:参数在请求数据区放着,相对GET请求更安全,并且数据大小没有限制。把提交的数据放置在HTTP包的包体中.GET提交的数据会在地址栏显示出来,而POST提交,地址栏不会改变。传输数据的大小:

    GET提交时,传输数据就会受到URL长度限制,POST由于不是通过URL传值,理论上书不受限。安全性:

    POST的安全性要比GET的安全性高;通过GET提交数据,用户名和密码将明文出现在URL上,比如登陆界面有可能被浏览器缓存。

    1.6 HTTP状态码

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

    HTTP状态码的英文为HTTP Status Code。

    下面是常见的HTTP状态码:

    • 200 - 请求成功

    • 301 - 资源(网页等)被永久转移到其它URL

    • 404 - 请求的资源(网页等)不存在

    • 500 - 内部服务器错误

    HTTP状态码分类

    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

    分类 分类描述
    1** 信息,服务器收到请求,需要请求者继续执行操作
    2** 成功,操作被成功接收并处理
    3** 重定向,需要进一步的操作以完成请求
    4** 客户端错误,请求包含语法错误或无法完成请求
    5** 服务器错误,服务器在处理请求的过程中发生了错误

    1.7 确保Web安全的HTTPS

    1.7.1 HTTP 的缺点
    1. 通信使用明文(不加密),内容可能会被窃听

    2. 不验证通信方的身份,因此有可能遭遇伪装

    3. 无法证明报文的完整性,所以有可能已遭篡改

    1.7.2 HTTP+加密+认证+完整性保护=HTTPS

    HTTPS并非是一种新的协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信,所谓HTTPS,实际上就是身披SSL协议的外壳的HTTP。

    应用(HTTP) 应用(HTTPS)
    SSL
    TCP TCP
    IP IP
    HTTP HTTPS

    采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。HTTPS采用共享密钥加密(对称密钥加密)和公开密钥加密(非对称加密)两者并用的混合加密机制。在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。公开密钥加密处理起来比共享密钥方式更为复杂,因此若在通信时使用公开密钥加密方式,效率很低。

    共享密钥加密方式加密和解密公用一个密钥的方式,公开密钥非对称,一把叫做私用密钥,另一把叫做公开密钥。发送密钥方使用公开密钥,接收方收到加密信息后使用私钥对数据进行解密。

    1.7.3 HTTPS的安全通信机制

    HTTPS通过十次握手确立SSL连接成功,连接建立后,通信受到SSL的保护,从此开始进行应用层协议的通信,发送HTTP请求。

    当然HTTPS也存在一些问题

    当使用SSL时,它的处理速度会变慢。由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源。

    1.8 使用浏览器进行全双工通信的WebSocket

    WebSocket,即Web浏览器与Web服务器之间全双工通信标准。一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可以互发XML,JSON,HTML,图片等任一格式的数据。任何一方都可以向对方发送报文。

    1.8.1 推送功能

    支持服务器向客户端推送数据的推送功能,服务器可直接发送数据,不用等客户端的请求。

    1.8.2 减少通信量

    只要建立起WebSocket连接,就会一直保持连接状态,和HTTP相比,不但每次连接的总开销少了,而且WebSocket的首部信息很小,通信量也相应减少了。

      GET /chat HTTP/1.1
      Host:Server.example.com
      Upgrade:websocket
      Connection:Upgrade
      Sec-WebSocket-Key:Dhgersaferasftgsdsgswe==
      Origin:http://example.com
      Sec-WebSocket-Protocol:chat,superchat
      Sec-WebSocket-Version:13
    

    为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次握手;要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手目的。成功握手确立WebSocket连接之后,通信不再使用HTTP的数据,而采用WebSocket独立的数据帧。

    相关文章

      网友评论

        本文标题:HTTP面试看我就够了

        本文链接:https://www.haomeiwen.com/subject/fbwdtftx.html