Http知识点

有道云地址:http://note.youdao.com/noteshare?id=b88e2ab8c92204da7842347f33c0decc&sub=815285D2B5ED4305ABD65E49A7252C05

1、HTTP、HTTPS基本概念

HTTP概念

HyperText Transfer Protocol,超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端服务器端请求和应答的标准,默认端口是80。

HTTP特点

1) HTTP协议是无状态的:每次HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是在实际应用当中并不是完全这样的,引入了Cookie和Session机制来关联请求。

2)多次HTTP请求:在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。

3)基于TCP协议:HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。

2、HTTP、HTTPS的区别

1)安全:http是明文传输,https是具有安全性的ssl加密传输协议

2)端口:http是80端口,https是443端口

3)花销:https协议需购买CA申请证书,免费的较少

4)状态:http连接无状态;https协议是ssl+http,可进行加密传输和身份认证

5)请求时间:https协议握手阶段,比http请求慢

3、HTTPS工作原理

客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤:

  (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

  (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

  (3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

  (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

  (5)Web服务器利用自己的私钥解密出会话密钥。

  (6)Web服务器利用会话密钥加密与客户端之间的通信。

 

4、Get、Post区别

1)GET参数通过URL传递,POST放在Request body中

2)get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制

3)GET请求只能进行url编码,而POST支持多种编码方式;

4)重点1:GET产生一个TCP数据包;POST产生两个TCP数据包;

5)重点2:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

 

5、Http的报文结构

请求报文

由四个部分组成:请求行、请求头部、空行、请求数据

1)请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1

方法字段就是HTTP使用的请求方法,比如常见的GET/POST

其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:

HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。

2)请求头部

HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。

3)空行

它的作用是通过一个空行,告诉服务器请求头部到此为止。

4)请求数据

若方法字段是GET,则此项为空,没有数据

若方法字段是POST,则通常来说此处放置的就是要提交的数据

 

响应报文

HTTP响应报文也由三部分组成:响应行、响应头、响应体

1)响应行

响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK

其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。

2)响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

设置HTTP响应头往往和状态码结合起来。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,……等等许多其他任务。

3)响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

 

参考地址:https://blog.csdn.net/shouwang666666/article/details/70232053/

请求头与响应头释义 https://blog.csdn.net/qq_29679397/article/details/78723016

 

6、Http的状态码含义

状态码:HTTP状态码被分成了五大类。状态码为客户端提供了一种理解事务处理结果的便捷方式。

100~199(信息性状态码):HTTP/1.1向协议中引入了信息性状态码

200~299(成功状态码):客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求

300~399(重定向状态码):重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容

400~499(客户端错误状态码):有时客户端会发送一些服务器无法处理的东西。浏览网页时,我们都看到过臭名昭著的404 Not Found错误码,这只是服务器在告诉我们,它对我们请求的资源一无所知

500~599(服务器错误状态码):有时客户端发送了一条有效请求,服务器自身却出错了,这些会返回5xx状态码

 

101 Switching Protocols:服务器正在根据客户端的指定,将协议切换成Update首部所示的协议。

200 OK:服务器已成功处理了请求并提供了请求的网页

204 No Content:服务器成功处理了请求,但没有返回任何内容

301 Moved Permanently:请求的网页已永久移动到新位置。响应的Location首部应包含资源现在所处的URL。

302 Found:与301类似,但这里的移除是临时的。将来的请求仍应使用老的URL。

304 Not Modified:客户的缓存资源是最新的,要客户端使用缓存。

400 Bad Request:告知客户端发送了一个错误的请求。

403 Forbidden:请求被服务器拒绝了。(可能是没有访问服务器的权限)

404 Not Found:服务器无法找到所请求的URL。

410 Gone:服务器曾经有这个资源,现在没有了,与404类似。

500 Internal Server Error:服务器遇到一个错误,使其无法为请求提供服务。

502 Bad Gateway:作为代理或网关使用的服务器收到了上游的无效响应。

503 Service Unavailable:服务器现在无法为请求提供服务,但过一段时间就可以恢复服务。

 

7、Http request的几种类型

1.  OPTIONS:允许客户端查看服务器的性能。

2.  HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

3.  GET:向特定的资源发出请求。

4.  POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。

5.  PUT:向指定资源位置上传其最新内容。

6.  DELETE:请求服务器删除Request-URI所标识的资源。

7.  TRACE:回显服务器收到的请求,主要用于测试或诊断。

8.  CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

post和put的区别:幂等:对于单个输入,如果每次都是同样的结果,则称其是幂等的

8、Http1.1和Http1.0的区别

1)长连接

HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。

2)节约带宽

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础

3)host域

在HTTP 1.1中增加Host请求头字段后,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点

4)文件上传

HTTP/1.1支持文件断点续传,RANGE:bytes,HTTP/1.0每次传送文件都是从文件头开始,即0字节处开始。RANGE:bytes=XXXX表示要求服务器从文件XXXX字节处开始传送,断点续传

5)状态码提示

HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。

此外,在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除

 

9、Http2.0与Http1.0的区别

1)多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

 

HTTP2.0把HTTP协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,并行地在同一个TCP连接上双向交换消息。

参考地址:https://www.zhihu.com/question/34074946

 

2)数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快

 

3)服务器推送

当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的

 

10、 Http怎么处理长连接

http的长连接和短连接,本质上是tcp层的长连接和短连接。

在HTTP1.0和HTTP1.1协议中都有对长连接的支持。其中HTTP1.0需要在request中增加Connection: keep-alive header才能够支持,而HTTP1.1默认支持。

http1.0请求与服务端的交互过程:

(1)客户端发出带有包含一个header:”Connection: keep-alive“的请求

(2)服务端接收到这个请求后,根据http1.0和”Connection: keep-alive“判断出这是一个长连接,就会在response的header中也增加”Connection: keep-alive“,同时不会关闭已建立的tcp连接.

(3)客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长连接,不关闭这个连接。并用该连接再发送request.转到(1)

http1.1请求与服务端的交互过程:

(1)客户端发出http1.1的请求

(2)服务端收到http1.1后就认为这是一个长连接,会在返回的response设置Connection: keep-alive,同时不会关闭已建立的连接.

(3)客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长连接,不关闭这个连接。并用该连接再发送request.转到(1)

 

短连接:当网络通信使用tcp协议时,在真正的读写操作前,需要完成3次握手,来建立连接。当读写完成时,需要四次握手来释放连接,每个连接的建立和释放都是需要资源和时间的,所以长连接比短连接

更节省资源,效率更高(RPC比http高效的原因)

11、长连接转短连接

长连接和短连接的优点和缺点

(1)长连接,可以省去较多的tpc建立和关闭操作,减少资源的浪费,节约时间。长连接多用于操作频繁,点对点的通讯,而且连接数不能太多。数据库的连接就是使用长连接,如果用短连接频繁通讯会造成socke错误

,而且频繁的Socket创建和销毁也是对资源的消耗比较大。

(2)短连接,短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段,web网站一般使用短连接,因为长连接对服务端来说会消耗一定资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的,对资源消耗过大

 

长连接转短连接

短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址。

短连接原理:将长连接地址通过算法,转为短地址;对应关系存入数据库;用户访问时根据对应关系找到对应的Url地址,实现跳转。

 

短连接算法:MD5的生成的 ,其实这个算法主要是把长字符串变小 ,这个算法是不可逆的,利用MD5的算法,其具体过程为:

1. 将原始长链接进行MD5加密,为了避免防止算法泄漏,可以在原链接上添加自定义的字符串作为密钥。

2. 把128位的MD分成四组,每组32位,对应一个候选短链接。

3. 对于每个32位的数,将它与0x3FFFFFFF进行位与运算,取其低30位的数据。把得到的值与0x0000003D进行位与运算,再把得到的结果作为下标在字符表中选取字符,再把原数字右移5位进行相同操作,重复进行6次得到6个字符,即组成一个候选短链接地址。

4. 在4个候选短链接中随机选择一个作为最终的短链接,把长短链接映射关系存入数据库中

 

短链接生成的算法原理 https://www.douban.com/note/602696828/

参考地址:https://blog.csdn.net/ghjzzhg/article/details/78534611

 

12. Cookie与Session

区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,会被模仿;session相对来说比较安全

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

   考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

 

Session原理

Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。Session是一种服务器端的机制,Session 对象用来存储特定用户会话所需的信息。

Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中

它的基本原理是服务端为每一个session维护一份会话信息数据,而客户端和服务端依靠一个全局唯一的标识来访问会话信息数据。用户访问web应用时,服务端程序决定何时创建session,创建session可以概括为三个步骤:

1)  生成全局唯一标识符(sessionid);

2)开辟数据存储空间。一般会在内存中创建相应的数据结构,但这种情况下,系统一旦掉电,所有的会话数据就会丢失,如果是电子商务网站,这种事故会造成严重的后果。不过也可以写到文件里甚至存储在数据库中,这样虽然会增加I/O开销,但session可以实现某种程度的持久化,而且更有利于session的共享;

3)将session的全局唯一标示符发送给客户端。

问题的关键就在服务端如何发送这个session的唯一标识上。联系到HTTP协议,数据无非可以放到请求行、头域或Body里,基于此,一般来说会有两种常用的方式:cookie和URL重写。

 

cookie禁用后session是否还能使用?

可以使用。使用url重定向方法,在每个要使用session的页面的链接中都加上sessionid,然后在每个页面中都去请求这一份session文件就可以解决问题。这里我将使用商城来做案例讲解。如果没有禁用cookie的话,下面的代码是可以使用的

 

 

13、对称加密与非对称加密

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

 

14、RSA加密原理

RSA加密算法是一种非对称加密算法。RSA算法的基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解

 

三个数学概念:

质数(prime numbe):又称素数,为在大于1的自然数中,除了1和它本身以外不再有其他因数。

互质关系:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。

φ(N):叫做欧拉函数,是指任意给定正整数N,在小于等于N的正整数之中,有多少个与N构成互质关系。

如果n是质数,则 φ(n)=n-1。

如果n可以分解成两个互质的整数之积, φ(n) = φ(p1p2) = φ(p1)φ(p2)。即积的欧拉函数等于各个因子的欧拉函数之积。

参考地址:https://www.cnblogs.com/tinyxiong/p/7842839.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值