经历了残酷的秋招之后,我总结出了全面的HTTP面试题。

HTTP 状态码

2XX 成功
200 OK,服务器已成功处理了请求.通常,这表示了服务器提供了请求的网页
201:表示请求成功并且服务器创建了新的资源,且其URL已经Location头信息返回.
202:服务器已接受请求,但尚未处理.
204 No Content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

3XX 重定向
301 Moved Permanently:永久性重定向,所请求的资源已永久移动到新位置.并且将来任何对此资源的引用都应该使用本响应返回的若干URL之一.
302 Found:临时性重定向,所请求的资源现在临时从不同的URL响应请求.由于这样的重定向是临时的,客户端应该继续向原有的低地址发送以后的请求.
注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会把 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。
304 Not Modified:如果请求报文首部包含一些条件,例如:If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since,但是不满足条件,则服务器会返回 304 状态码。
307 Temporary Redirect:临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

4XX 客户端错误
400 Bad Request:请求报文中存在语法错误
401 Unauthorized:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。如果之前已进行过一次请求,则表示用户认证失败。
403 Forbidden:请求被拒绝,服务器端没有必要给出拒绝的详细理由。
404 Not Found,服务器找不到请求的页面.

5XX 服务器错误
500 Internal Server Error:服务器正在执行请求时发生错误
503 Service Unavilable:该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

HTTP的请求方法:

  • GET
    获取资源
    当前网络请求中,绝大部分使用的是GET方法
  • HEAD
    获取报文首部
    和GET方法类似,但是不返回报文实体部分 *
    主要用于确认URL的有效性以及资源更新的日期时间。
  • POST
    传输数据,而GET主要用来获取资源
  • PUT
    上传文件
    由于自身不带验证机制,任何人都可以上传文件,因此存在安全性的问题,一般不使用
  • PATCH
    PUT也可以用于修改资源,但是只能完全替代原始资源,PATCH允许部分修改
  • DELETE
    删除文件,并且不带验证机制
  • option
    查询支持的方法
    查询执行URL支持的方法,会返回Allow,GET,POST,HEAD,OPTION这样的内容。
  • CONNECT
    要求与代理服务器通信时建立隧道
    使用SSL和TLS把协议通信内容加密后经网络隧道传输
  • TRACE
    追踪路径
    服务器会将通信路径返回给客户端
    发送请求时,在MAX-Forwards首部字段中填入数值,每经过一个服务器就会减1,当数值为0时就停止传输。

GET和POST的区别?

作用:
GET用于获取资源,而POST用于传输实体主体。
参数

  • get参数用过url传递,post放在request body中
  • get请求在url中传递的参数是有长度限制的,而post没有(因为浏览器和服务器的原因,但是http协议没有长度限制)
  • get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息
  • get请求参数会被完整的保留在浏览历史记录中,而post的参数不会被保留
    安全(对服务器是否安全)
    GET方法是安全的,而POST不是。服务器可能根据收到的数据动态创建资源,也可能更新原有的资源。
    幂等性
    Get方法是幂等的,即同样的请求执行一次与连续执行多次的效果是一样的。
    POST不是幂等的,如果多次调用,就会更新服务器的状态,返回的数据不相同。
    可缓存
    get请求会被浏览器主动缓存,而post不能缓存
    发送次数来说
    使用了XMLHttpRequest的POST方法时,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200ok
    对于GET方式请求,浏览器会把http header和data一并发送出去,服务器响应200ok.
    XMLHttpRequest是一个API,它提供了一个通过URL来获取数据的简单方式,并且不会使整个页面刷新,使得网页只更新一部分页面而不会打扰到用户。

HTTP协议概念和特点:

是面向事务的应用层协议,是一个客户端和服务器端之间请求和响应的交互所遵循的规则标准。用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加的高效,使网络传输减少。

1.HTTP协议是无状态的
也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器响应与第一次被访问时的相同。因为服务器并不记得曾经访问过这个客户,也不记得为这个客户服务过多少次。HTTP的无状态协议简化了服务器的设计,更容易支持大量的并发HTTP请求。
2.多次HTTP请求
在客户端请求页面时多数情况下并不是一次请求就能成功的,服务器首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,css,js文件,图片等等,还会自动发送请求这些需要的资源。现在HTTP协议支持管道机制,可以同时请求和响应多个请求,大大地提高了效率。
3.基于TCP协议
HTTP协议目的是规定客户端和服务器端数据传输的格式和交互行为,并不负责数据传输的细节。底层是基于TCP实现的,所以其本身是无连接的。现在使用的版本当中默认使用持续连接,也就是说多次HTTP请求使用一个TCP连接。

什么是长连接?什么是短连接?

  • 短连接:当客户的一个http请求之后,Web服务器就将TCP连接关闭了.此后,同一个客户要再发送一个HTTP请求的话,就必须与服务器再建立一个新的连接.也就是说,同一个客户的多个http请求不能共用一个TCP连接.
  • 长连接:多个请求可以使用同一个TCP连接.
    长连接的优点:极大的减少网络上为建立TCP导致的负荷,同时对每次请求而言缩减了处理时间.

HTTPS的基本概念和工作原理

:是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
https协议的主要作用可以分为两种:一种是建立一个信息安全的通道,来保证数据传输的安全;另一种就是确认网站的真实性。

工作原理:
我们知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
在这里插入图片描述
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示:

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。客户端发送自己的版本号,还有自己支持的算法到服务器端。
(2)Web服务器收到客户请求之后,将自己的版本号,所支持的算法,还有网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端开始匹配对方的版本号以及算法,然后利用证书里的公钥去解密证书的数字签名,解开了则说明证书有效。然后生成一个随机的明文字符串,用网站的公钥加密,传送给服务器。
(4)Web服务器利用自己的私钥解密得到这个明文字符串,然后利用它生成会话密钥然后发送给客户端。
(5)之后双方通过会话密钥进行加密通信

在这里插入图片描述
在这里插入图片描述

HTTP与HTTPS有什么区别?

  • HTTPS和HTTP的区别主要如下:
    1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
    2.http 是超文本传输协议,信息是明文传输,https则是有安全性的ssl加密传输协议。
    3.http和https使用的端口也不一样,前者是80,后者是443.
    4.连接方式不同,安全性不同。http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

说一下数字证书是什么?里面都包含着哪些内容?

概念:数字证书在一个身份和该身份的所拥有的公/私钥对之间建立了一种联系,由认证中心颁发.

颁发过程:

用户产生自己的密钥对,并将公共密钥及部分个人身份信息传送给一家认证中心.认证中心在核实身份后,将执行一些必要的步骤,以确信请求由用户发送而来,然后,认证中心将发给用户一个数字证书.
内容及作用:
该证书附和了用户和他的密钥信息,同时还有中心公共密钥加以确认的数字签名.当用户想证明其公开密钥的合法性时,就可以提供这一数字证书.

什么是数字签名

保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

  • 数字签名技术是将摘要信息用发送者的私钥(ca的私钥)加密,与原文一起传送给接收者。接收者只有用发送者的公钥(ca的公钥,它通过web在公共领悟发布它的公钥)才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

HTPP1.0和HTTP1.1的区别:

(1)HTTP1.1支持长连接和流水线工作方式
(2)HTTP1.1增加了 host字段
(3)HTTP1.1更加节约带宽(新的状态100,continue)
(4)HTTP1.1发送方可以将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志.这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载.
(5)HTTP1.1引入Cookie来保存信息

HTTP2.0的特点:

1)HTTP/2采用二进制格式而非文本格式
2)HTTP/2是完全多路复用的,而非有序并阻塞的,只需一个HTTP连接就可以实现多个请求响应
3)使用报头压缩,HTTP/2降低了开销
4)HTTP/2让服务器可以将响应主动"推送"到客户端缓存中

Session和Cookie以及Token区别:

Cookie是解决交互式WEB应用程序,HTTP无状态特性不适应的情况。Cookie是服务器发送给客户端的特殊信息(通过HTTP的应答头部Set-Cookie),存放在客户端以键值对的方式存在,客户端每次向服务器发送请求的时候都要带上这些信息(HTTP请求的头部Cookie)。这样服务器就可以区分不同的客户了。基于浏览器的自动登录功能就是Cookie实现的。

Session和Cookie的不同是,Session将用户信息存储在服务器端,效率更高,也更安全。
过程如下:

  • 用户进行登录时,用户提交包含用户名和密码的表单,放入HTTP请求报文中;
  • 服务器验证该用户和密码,如果正确则生成一个sessionID存储到本地的Redis数据库中,key值称为SessionID。
  • 服务器返回的响应报文中Set-Cookie首部字段包含了这个Session ID,之后客户端对同一网站进行请求时包含该SessionID值,服务器取Session ID,从Redis中取出用户信息,继续之前的操作。
  • 当用户离开网站之后开后再对这个SessionID进行销毁。

但是Session有一个缺陷,就是可扩展性问题:

就是如果web服务器做了负载均衡,那么下一个操作请求到另一台服务器上时,session会丢失。就算再做一个粘连操作,或者session单点机器操作也会有相应的问题。这是就用到了Token.
而且每次请求服务器都创建一个记录存储用户信息,当用户数量非常多时,内存的开销在不断的增加。

Token是什么?

基于Token的验证是无状态的。
1.用户通过用户名和密码发送请求,程序验证之后会返回一个加密且签名的token给客户端。
2.客户端储存token,并且每次用于发送请求携带。
3.服务器端验证token之后返回数据。

Token的优势?

1.无状态,可扩展。它是由客户端存储,服务器不用对齐进行存储,并且服务器可扩展,负载均衡器能够将用户信息从一个服务传到其他服务器上去。
2.安全性高。采用md5进行加密和数字签名技术。
3.多平台跨域。只要有一个通过了验证token,数据和资源就能够在任何域上被请求到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值