当前位置 博文首页 > 眼里长着太阳,笑里全是坦荡:综合阐述http1.0/1.1/2和https

    眼里长着太阳,笑里全是坦荡:综合阐述http1.0/1.1/2和https

    作者:[db:作者] 时间:2021-08-08 19:16

    目录

    http协议(超文本传输协议)

    http1.0

    http1.1

    HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:

    http2

    https

    HTTPS的加密算法:?

    Http与Https的区别:

    http响应状态码


    http协议(超文本传输协议)

    是客户端和服务器端两者通信共同遵循的一些规则。主要内容是定义了客户端如何向服务器请求资源,服务器如何响应客户端请求。

    请求中的POST与 GET方法有什么区别?

    1. get是从服务器上获取数据,post是向服务器传送数据。
    2. ?在客户端,Get方式在通过URL提交数据数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交
    3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
    4. ?GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
    5. 安全性问题。正如在(1)中提到,使用?Get?的时候,参数会显示在地址栏上,而?Post?不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用?get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用?post为好。

    http1.0

    HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接服务器完成请求处理后立即断开TCP连接

    当一个网页文件中包含了很多图像的地址的时候,那就需要很多次的http请求和响应,每次请求和响应都需要一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。当一个网页文件中包含JavaScript文件,CSS文件等内容时,也会出现类似上述的情况。

    http1.1

    为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接(HTTP/1.1的默认模式使用带流水线的持久连接),在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接

    HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。

    在http1.1,request和reponse头中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。
    在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。

    HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题。

    HTTP 1.1通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。如,HTTP 1.0不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。HTTP/1.0不支持文件断点续传,RANGE:bytes是HTTP/1.1新增内容,HTTP/1.0每次传送文件都是从文件头开始,即0字节处开始。RANGE:bytes=XXXX表示要求服务器从文件XXXX字节处开始传送,这就是我们平时所说的断点续传!

    HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:

    1 缓存处理

    2 带宽优化及网络连接的使用

    3 错误通知的管理

    4 消息在网络中的发送

    5 互联网地址的维护

    6 安全性及完整性

    常用的请求方式

    GET 请求获取Request-URI所标识的资源

    POST 在Request-URI所标识的资源后附加新的数据

    HEAD 请求获取由Request-URI所标识的资源的响应消息报头

    PUT 请求服务器存储一个资源,并用Request-URI作为其标识

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

    TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

    CONNECT 保留将来使用

    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

    GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。GET是用于获取数据的,POST一般用于将数据发给服务器之用。

    http2

    相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化:

    (1) HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。

    (2)?HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。

    (3) 多路复用直白的说就是所有的请求都是通过一个TCP 连接并发完成。HTTP/1.x 虽然通过?pipeline?也能并发请求,但是多个请求之间的响应会被阻塞的,所以?pipeline?至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。

    (4)?Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。

    HTTP/2 主要是 HTTP/1.x 在底层传输机制上的完全重构,HTTP/2 是基本兼容 HTTP/1.x 的语义的(详细兼容性说明请戳这里)。Content-Type?仍然是?Content-Type,只不过它不再是文本传输了。

    https

    http本身不具备加密功能,报文使用明文(未经加密的报文)方式发送,通信内容在所有的通信线路上都有可能遭到窥视

    加密处理的两种方式:

    1)通信的加密:将http和SSL(安全套接层)或者TLS(安全传输层协议)组合使用,与SSL组合使用的HTTP被称为HTTPS(超文本传输安全协议)

    2)内容的加密:通信双方都要求有加密和解密的机制,仍有被篡改的风险

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

    HTTPS的加密算法:?

    ? ? ??首先介绍两个概念:

    ? ? ??对称秘钥:对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。通常有两种模式:流加密和分组加密。

    ? ? ??非对称秘钥非对称加密算法需要两个密钥:公开秘钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

    ??1.HTTPS保证数据安全的机制:

    ? ??? ? ??在HTTP的概念中介绍了HTTP是非常不安全的,那么在服务器与客户端传递数据的过程中HTTPS是如何保证数据的安全呢?

    ? ? ? ? ? ? 1.客户端向服务器端发起SSL连接请求;(在此过程中依然存在数据被中间方盗取的可能,下面将会说明如何保证此过程的安全)

    ? ? ? ? ? ? 2 服务器把公钥发送给客户端,并且服务器端保存着唯一的私钥;

    ? ? ? ? ? ? 3.客户端用公钥对双方通信的对称秘钥进行加密,并发送给服务器端;

    ? ? ? ? ? ? 4.服务器利用自己唯一的私钥对客户端发来的对称秘钥进行解密,在此过程中,中间方无法对其解密(即使是客户端也无法解密,因为只有服务器端拥有唯一的私钥),这样保证了对称秘钥在收发过程中的安全,此时,服务器端和客户端拥有了一套完全相同的对称秘钥。

    ? ? ? ? ? ? 5.进行数据传输,服务器和客户端双方用公有的相同的对称秘钥对数据进行加密解密,可以保证在数据收发过程中的安全,即是第三方获得数据包,也无法对其进行加密,解密和篡改。

    ? ?2.CA(电子商务认证机构)认证作用:?

    ? ?? ? ???在上面提到的 客户端向服务器端发起请求时存在数据被盗取的过程: ?假如服务器端经由中间方向客户端发送公钥的时候,中间方没有将公钥发送给客户端,而是伪造了医药公钥,并将伪造的公钥发送给客户端,此时客户端用中间方伪造的公钥对自己正确的对称秘钥加密并由中间方发送给服务器端,而中间方将用自己伪造的公钥的私钥对其进行解密,得到正确的对称秘钥,并将得到的正确的对称秘钥用服务器端发过来的公钥进行加密发给服务器端,服务器daunt再用正确的私钥进行解密,也得到正确的对称秘钥,此时客户端,服务器端,中间方三者都拥有一套正确的对称秘钥,可以对传送的数据进行加密,解密。

    ? ?为了解决上述问题,一般情况下,服务器端会向CA申请认证书,此证书包含了CA及服务器端的一些信息(可以理解为类似公章),这样,服务器端将证书发给客户端的过程中,中间方是无法伪造的,保证了,发给客户端的公钥是服务器端发送的。

    Http与Https的区别:

    1. HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头

    2. HTTP 是不安全的,而 HTTPS 是安全的
    3. HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
    4. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
    5. HTTP 无法加密,而HTTPS 对传输的数据进行加密
    6. HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

    http响应状态码

    1XX Informational(信息性状态码)接收的请求正在处理

    2XX Success(成功状态码):请求正常处理完毕

    3XX Redirection(重定向状态码):需要进行附加操作以完成请求

    4XX Client Error(客户端错误状态码):服务器无法处理请求

    5XX Server Error(服务器错误状态码):服务器处理请求出错

    HTTP响应状态码有很多,但是实际经常使用的大概只有14个。

    2XX Success

    200 OK?表示从客户端发来的请求在服务器端被正常处理了。

    204 No Content?该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。

    206 Partial Content?该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。

    ?

    3XX Redirection

    301?Moved Permanently?永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。 像下方给出的请求URI,当指定的资源路径的最后忘记添加斜杠"/",就会产生301状态码

    http://example.com/sample

    302 Found?临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

    303 See Other?该状态码表示由于请求对应的资源存在另外一个URI,应使用GET方法定向获取请求的资源。 303状态码和302状态码有着相同的功能,但303状态码明确表明客户端应当采用GET方法获取资源。?当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动再次发送。?301,302标准是禁止将POST方法改变成GET方法的,但实际上使用时大家都会这么做。

    304 Not Modified?该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。

    307 Temporary Redirect?临时重定向。该状态码与302 Found有着相同的含义。307会遵照浏览器标准,不会从POST变成GET。

    ?

    4XX Client Error

    400?Bad Request?该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次放松请求。

    401 Unauthorized?该状态码表示发送的请求需要有通过HTTP认证的认证信息,另外若之前已进行过1此请求,则表示用户认证失败。

    403 Forbidden?该状态码表明对请求资源的访问被服务器拒绝了。

    404?Not Found?该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

    5XX Server Error

    500?Internal Server Error?该状态码表明服务器端在执行请求时发生了错误。

    503 Service Unavailable?该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

    常见状态码

    ???????100 ?Continue ?继续,一般在发送post请求时,已发送了http、header之后服务端将返回此信息,表示确认,之后发送具体参数信息

    ???????200 OK ??正常返回信息

    ???????201 ?Created ?请求成功并且服务器创建了新的资源

    ???????301 ?Moved Permanently ?请求的网页已永久移动到新位置。

    ???????400 Bad Request ?服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

    ???????404 Not Found ?找不到如何与 URI 相匹配的资源。 ??

    ???????500 Internal Server Error ?最常见的服务器端错误。

    ?

    ?

    ?

    ?

    cs