Http和Https常见问题

Http和Https的区别?

  1. Http是明文传输;
  2. Https在Http基础之上加了一层ssl/tls加密,保证数据传输过程的安全性;
  3. Http和Https使用的是不一致的连接方式,默认使用的端口也不一致,Http是80,Https是433端口。

Https是如何保证安全传输的?

通过秘钥的方式对数据进行加解密,秘钥主要为:对称秘钥非对称秘钥

对称秘钥:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。

假如服务器用明文的方式传输密钥给客户端,然后密钥被中间人给捕获了,那么在之后服务器和客户端的加密传输过程中,中间人也可以用他捕获的密钥进行解密。这样的话,加密的数据在中间人看来和明文没啥两样,加密也变得毫无意义。

非对称秘钥:让客户端和服务器都拥有两把钥匙,一把钥匙是公开的(全世界知道都没关系),我们称之为公钥;另一把钥匙则是保密的(只有自己本人才知道),我们称之为私钥。这且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密

Http无状态协议,怎么理解无状态协议,如何实现有状态的请求?

无状态协议就是服务器不会记录客户端是谁,Java可以通过session/cookie实现无状态请求。

由服务器生成session,并返回sessionId给客户端的cookie中,cookie访问会通过sessionId去对应的session值。

Http中的302状态码的作用?

302是用来实现重定向的。

304缓存的原理

如果客户端(浏览器)发送的是一个条件验证请求,则web服务器可能会返回304响应,这就表明了客户端中所请求资源的缓存仍然是有效的,也就是说该资源从上次缓存到现在没有被修改过,浏览器会自动识别并读取缓存中的文件来显示。

在进行条件请求时,一般请求头会带上  If-Modified-Since、 If-None-Match,这两个值分别对应响应头 Last-Modified、 ETag 返回的值

服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回304 Not Modified响应,客户端收到304响应后,就会从缓存中读取对应的资源.

另一种情况是,如果服务器认为客户端缓存的资源已经过期了,那么服务器就会返回200 OK响应,响应体就是该资源当前最新的内容.客户端收到200响应后,就会用新的资源覆盖掉旧的缓存资源.

只有在客户端缓存了对应资源且该资源的响应头中包含了Last-Modified或ETag的情况下,才可能发送条件请求.如果这两个头都不存在,则必须无条件请求该资源,服务器也就必须返回完整的资源数据.

Http协议 1.0和Http协议1.1的区别

  • HTTP 协议1.1支持长连接, HTTP1.1 中有一个 Transport 段。会携带一个 Connection:Keep-Alive,表示希望将此条连接作为持久连接。可以通过将Connection属性设置close关闭持久连接。
  • HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

  • 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

  • HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径。

  • HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

  • HTTP/1.1中引入了Chunked transfer-coding来解决大内存数据传输,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

如何保证基于Hppt协议的接口安全性

  • 选择拦截器过滤:在请求的时候对请求方法进行一次拦截处理。比如非正常访问的方法已经注入插入可执行语句参数验证等在拦截中进行一次安全校验保证请求不是非法请求。
  • 数据加密:我们知道目前大部分APP接口都是通过Http协议进行调用的容易被抓包拦截。我们可以对客户端和服务端都对数据传输的时候进行一个加密处理。常用的MD5 AES等。

  • 签名:根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。在请求后台,后台获取http的head中的token,校验是否合法。在使用Base64方式的编码后,Token字符串还是有20多位,有的时候还是嫌它长了。由于GUID本身就有128bit,在要求有良好的可读性的前提下,很难进一步改进了。那我们如何产生更短的字符串呢?还有一种方式就是较少Token的长度,不用GUID,而采用一定长度的随机数,例如64bit,再用Base64 由于这里只用了64bit,此时得到的字符串为Onh0h95n7nw的形式,长度要短一半。这样就方便携带多了。但是这种方式是没有唯一性保证的。不过用来作为身份认证的方式还是可以的(如网盘的提取码)。

Http协议上传文件,数据如何传输

  • 通过对数据进行压缩的方式进行传输。
    • 首先服务端需要能支持文件的压缩功能,其次浏览器能够针对被压缩的文件进行解压缩。浏览器可以指定 Accept-Encoding 来高速服务器我当前支持的编码类型Accept-Encoding:gzip,deflate。
  • 进行分割传输
    • 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)。

Http的优点

  • 支持客户/服务器模式。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

Http缺点

它是明文传输,明文传输就意味着报文中的所有信息都是暴露的,就可以通过监听报文,就可以获取到所有数据,进行窃取和修改,存在不安全性。

http是应用层协议,它是基于传出层协议tcp来实现的,也就意味它的性能虽然不算太差,但不能完全适用于现在的互联网。

一次Http请求的完整交互流程

客户端先发送请求报文(包括:请求方式,请求地址,请求协议版本,请求头信息以及主体内容)

服务器处理完会发送响应报文给客户端(包括:协议版本,状态码,状态码短语,响应头,主体)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章