6、说说你知道的几种HTTP响应码。

      ☆ 200 OK:表示客户端请求成功。
      ☆ 400 Bad Request 语义有误,不能被当前服务器理解。
      ☆ 401 Unauthorized 当前请求需要用户验证。
      ☆ 403 Forbidden 服务器收到消息,但是拒绝提供服务。
      ☆ 404 Not Found 请求资源不存在。
      ☆ 408 Request Timeout 请求超时,客户端没有在服务器预备等待的时间内完成发送。
      ☆ 500 Internal Server Error 服务器发生不可预期的错误。
      ☆ 503 Server Unavailable 由于临时的服务器维护或过载,服务器当前不能处理请求,此状况知识临时的,可恢复。

7、当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤。

     (1)、解析域名。
     (2)、发起TCP的3次握手。
     (3)、建立TCP请求后发起HTTP请求。
     (4)、服务器相应HTTP请求。
     (5)、浏览器得到HTML代码,进行解析和处理JSON数据,并请求HTML代码中的静态资源(JS、CSS、图片等)。
     (6)、浏览器对页面进行渲染。

8、TCP/IP如何保证可靠性,说说TCP头的结构。

      (1)、三次握手。
      (2)、将数据截断为合理的长度。应用数据被分割成TCP认为最合适发送的数据块。
      (3)、超时重发。
      (4)、对于收到的请求,给予确认响应。
      (5)、校验出包有错,丢弃报文段,不响应。
      (6)、对失序数据进行重新排序,发送于客户端。
      (7)、能够丢弃重复数据。
      (8)、流量控制。TCP连接的两端都有缓存大小控制,接收端只允许发送端发送自己缓存剩余大小的数据。有效防止缓存溢出。
      (9)、拥塞控制。当网络阻塞时,减少数据的发送。

TCP头结构:
   (1)、源端口(source port)16位的字段,定义了发送这个报文段的主机中的应用程序的端口号。
   (2)、目的端口(destination port)16位的字段,定义了接收这个报文段的主机中的应用程序的端口号。
   (3)、序列号(sequence number)32位的字段,定义了指派给本报文段第一个数据字节的编号。为了保证连接性,要发送的每一个字节都要编上号。序号可以告诉终点,报文段中的第一个字节是这个序列中的哪一个字节。在建立连接是,双方使用各自的随机数生成器生产一个初始序号(inital squence number,ISN),通常两个方向上的ISN是不同的。
   (4)、确认号(acknowledgment nimber)32位字段定义了报文段的接收方期望从对方接收的字节编码。如果报文段的接收方成功地接收了对方发来的编号为x的字节,那么它就返回x+1作为确认号,确认可以和数据捎带在一起发送。
   (5)、头部长度(Hlen)(header length)这个4字节字段指出TCP段的头部长度,以32位字段来衡量,头部长度并不规定并可以根据选项字段中设置的参数面改变。
   (6)、保留(reserved)这个保留字段占用6位,它被保留以提供将来使用。
   (7)、URG 紧急数据(urgent data)---这是一条紧急信息。
   (8)、ACK 确认已收到段
   (9)、PSH 请求在缓冲区尚未填满时发送消息,注意TCP可以等待缓冲区填满之后再发送段,如果需要立即传送,应用程序必须利用push参数来通知协议。
   (10)、RST 申请重置连接。
   (11)、SYN 此消息用于在建立连接时同步传输数据的计时器。
   (12)、FIN 该属性申明发送端已经发送出被传输数据的最后一个字节。
   (13)、窗口大小(window)16位字段,这个字段定义的是发送TCP的窗口大小,以字节为单位。窗口最大长度是65535字节,这个值通常被称为接收窗口(rwnd),并由接收方来决定。这种情况下,发送方必须服从接收方的指示。
   (14)、校验和(checksum)16位字段包含的是检验和,检验和是差错控制的手段之一。
   (15)、紧急指针(urgent point)该字段占用2字节,与URG代码位一起使用并且申明及时使存在着缓冲区溢出也必须紧急接收的数据末端。因此,如果有些数据需要不按照顺序被送往目的应用程序,那么发送端的应用程序必须利用紧急数据参数通知TCP。
   (16)、选项(option)该字段为变长且可以忽略。他的最大长度为3字节,用于解决一些辅助任务----比如,选择最大段长。选项可以位于TCP头部的末端,其长度必须是8的倍数。
   (17)、填充(padding)该字段长度不固定,这是个用于补充头部字段使得它的长度为32位字的整数倍的一个伪字段9

9、如何理解HTTP协议的无状态性。

       HTTP协议是无状态的,指的是HTTP协议对于事务处理没有记忆功能,服务器不知道客户端是什么状态。相当于,打开一个服务器上的网页与上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不代表HTTP使用的是UDP协议(无连接)。

10、简述Http请求get和post的区别以及数据包格式。

    ▶ GET请求可被缓存,POST请求不能被缓存。
    ▶ GET请求被保留着浏览器历史记录中,POST请求不会被保留。
    ▶ GET请求能被收藏至书签中,POST请求不能被收藏至书签。
    ▶ GET请求不应在处理敏感数据时使用,POST可以用户处理敏感数据。
    ▶ GET请求有长度限制,POST请求没有长度限制。
    ▶POST不限制提交的数据类型,所以POST可以提交文件到服务器。
    数据包格式 == TCP头结构

11、HTTP有哪些method。

      ★ GET:获取资源。
      ★ POST:表单提交。
      ★ HEAD:获取报头信息,HEAD 方法与 GET 方法类似,但并不会返回响应主体。
      ★ PUT 与PATCH:更新资源,PUT 对后台来说 PUT 方法的参数是一个完整的资源对象,它包含了对象的所有字段,PATCH 对后台来说 PATCH 方法的参数只包含我们需要修改的资源对象的字段。
      ★ DELETE:删除资源。
      ★ OPTIONS:获取目标资源所支持的通信选项,使用 OPTIONS 方法对服务器发起请求,以检测服务器支持哪些 HTTP 方法。

12、简述HTTP请求的报文格式。

        客户端与服务端通信时传输的内容我们称之为报文。
        客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。
         
                                                                        图3 POST请求 报文格式
    
                                                                        图4  GET请求 报文格式

                                                                             图5 报文响应格式

13、HTTP的长连接是什么意思。

       长连接是指客户端与服务端建立连接后,不会因完成了一次请求后,它们之间的连接主动关闭。后续的读写操作会继续使用这个链接。 如果一个连接两小时内都没有任何动作,服务器会向客户端发送一个探测报文段、根据客户端主机相应探测4个客户端状态,①、客户端正常时,且服务器可达。此时客户端TCP响应正常,服务器将定时器复位。②、客户端已经崩溃,并且关闭或正在重启,客户端不能响应TCP,服务器将无法收到客户端对探测器的响应。服务器总共发送10个这样的探测,每间隔75秒。如服务器没有收到任何响应,他就认为客户端已经关闭并终止连接。③、客户端崩溃,但已重启。服务器将对其保持探测响应,这个响应是一个复位,使得服务器终止这个连接。④、 客户机正常运行,但是服务器不可达。这种与②类。
       由上可以看出,长连接可以省去较多的TCP建立和关闭操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。在长连接的应用场景下,client端一般不会主动关闭连接,当client与server之间的连接一直不关闭,随着客户端连接越来越多,server会保持过多连接。这时候server端需要采取一些策略,如关闭一些长时间没有请求发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件允许则可以限制每个客户端的最大长连接数,这样可以完全避免恶意的客户端拖垮整体后端服务,例如:数据库的连接用长连接。

14、HTTPS的加密方式是什么,讲讲整个加密解密流程。

 加密方式: 1)、对称密码算法:指加密和解密使用相同的密钥,速度高,可加密内容较大,用来加密会话过程中的消息。典型算法DES、AES、RC5、IDEA(分组加密)RC4。
                    2)、非对称密码算法:又称为公钥加密算法,是指加密和解密使用不同的密钥,加密速度较慢,但能提供更好的身份认证技术,用来加密对称加密的密钥(公开的密钥用于加密,私有的密钥用于解密)典型的算法RSA、DSA、DH。
                   3)、散列算法:将文件内容通过此算法加密变成固定长度的值(散列值),这个过程可以使用密钥也可以不使用。这种散列变化是不可逆的,也就是说不能从散列值编程原文,因此散列变化通道常用语验证原文是否被篡改。典型的算法MD5、SHA、BASE64、CRC等。
注意:SSL协议在建立链路时,SSL首先对对称加密的密钥进行对公加密,链路建立好之后,SSL对传输内容使用对称加密。

 SSL加密过程:参考15问题图7 双向认证:  单向认证作为了解加密过程简化流程。

                                                          图6  单向认证
   第三步:客户端使用服务端返回的信息验证服务器的合法性,包括:
                 1)、证书是否过期。
                 2)、发布服务器证书的CA是否可靠。
                 3)、返回的公钥是否能正确解开返回证书中的数字签名。
                 4)、服务器证书上的域名是否和服务器实际域名相匹配。

15、Http和Https的三次握手有什么区别。

       题目2中所说的握手为HTTP握手的流程,Https在Http的基础上加入了SSL/TSL协议,SSL依靠证书来验证服务器的身份,并为服务器与浏览器之间的通信加密。下图为HTTPS的握手流程。
       
                                                             图7 双向认证

17、Session和cookie的区别。

       (1)、Cookie保存在客户端,未设置存储时间的Cookie,关闭浏览器会话Cookie就会被删除;设置了存储时间的Cookie保存在用户设备的磁盘中知道过期,同时Cookie在客户端所以可以伪造,不是十分安全,敏感数据不易保存。Session保存在服务器端,存储在IIS的进程开辟的内存中,而Session过多会消耗服务器资源,所以尽量少使用Session。
       (2)、Session是服务器用来跟踪用户的一种手段,每个Session都有一个唯一标识:session ID。当服务端生成一个Session时就会向客户端发送一个Cookie保存到客户端,这个Cookie保存的是Session的SessionId这样才能保证客户端发起请求后,用户能够与服务器端成千上万的Session进行匹配,同时也保证了不同页面之间传值的正确性.
       (3)、存储数据类型不同:Session能够存储任意的JAVA对象,Cookie只能存储String类型的对象。
       (4)、长于10K的数据,不要用到Cookies。

18、DNS使用的协议(既使用TCP也是用UDP)?

       1)、首先了解一下TCP与UDP传送字节的长度限制:
               UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
       2)、区域传送时使用TCP,主要有一下两点考虑:
               辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
TCP是一种可靠的连接,保证了数据的准确性。
       3)、域名解析时使用UDP协议:
              客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。