• HTTP vs HTTPS


    HTTP和HTTPS的概念     
         HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,

           优点:扩展性强、速度快、跨平台支持性好
          http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改,严重情况下,会造成恶意的流量劫持等问题,甚至造成个人          隐 私泄露(比如银行卡卡号和密码泄露)等严重的安全问题。

       HTTP 通信过程:

    • 服务器在 80 端口等待客户的请求。
    • 浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。
    • 服务器接收来自浏览器的 TCP 连接。
    • 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
    • 关闭 TCP 连接。

    -HTTP请求方法   8种方法    pcdot

     get post区别

    1.Get 向特定的资源发出请求,Get是不安全的,因为在传输过程,数据被放在请求的URL中;POST向指定资源提交数据进行处理请求。Post的所有操作对用户来说都是不可见的, 数据放在请求体中。

    2.Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。

    3.Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

    4. Get执行效率却比Post方法好。Get是form提交的默认方法。

    post put 区别

    PUT是幂等的,POST是非幂等的  幂等:对于相同的输入,每次得到的结果都是相等的,

    PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)

    Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源

    HTTP请求/响应报文结构

    HTTP请求报文

    一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。

    请求行

    请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔

    空行

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

    请求头部

    请求头部通知服务器有关于客户端请求的信息 ,关键字/值对组成

    https://www.flysnow.org/tools/table/http-request-headers/

    Content-Length:表示请求消息正文的长度。Cookie。User-Agent:产生请求的浏览器类型。

    请求数据

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

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

    HTTP响应报文

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

    1.响应行

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

    2.响应头

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

    Allow:服务器支持哪些请求方法(如GET、POST等)。Transfer-Encoding:告诉浏览器数据的传送格式。

    3.响应体

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

     

         HTTP 是不保存状态的协议, 如何保存用户状态?

        Session 的主要作用就是通过服务端记录用户的状态。保存在服务器。一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个 Session)。

        在服务端保存 Session 的方法很多,最常用的就是内存和数据库(比如是使用内存数据库 redis 保存)。

        既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。 

        Cookie 被禁用怎么办?

        最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面。

        

       (1)Cookie 一般用来保存用户信息 。例如:在 Cookie 中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你把登录的一些基本信息给填了。

       Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的         Session 之后就可以标识这个用户并且跟踪这个用户了。

       (2)Cookie 数据保存在客户端(浏览器端)。Session 数据保存在服务器端。

       (3)相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密,然后使用到的时候再去服务器端解密。

         简述http状态码和对应的信息
         1xx - 信息提示
         2xx-成功  200表示从客户端发来的请求在服务器端被正确处理
         3xx -重定向 302 found,临时性重定向,表示资源临时被分配了新的 URL

        
         4xx-客户端错误 404 not found,表示在服务器上没有找到请求的资源
         5xx-服务器错误  500 internal sever error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
          简述HTTP短连接与长连接区别
          HTTP中的长连接短连接指HTTP底层TCP的连接。
         短连接: 客户端与服务器进行一次HTTP连接操作,就进行一次TCP连接,连接结束TCP关闭连接。
         长连接:如果HTTP头部带有参数keep-alive,即开启长连接网页完成打开后,底层用于传输数据的TCP连接不会直接关闭,会根据服务器设置的保持时间保持连接,保持时间过后连接关闭

       

    HTTP 1.0 vs HTTP 1.1

    • 响应状态码  HTTP/1.0仅定义了16种状态码。HTTP/1.1中新加入了大量的状态码  如 409 (Conflict)——请求与当前资源的规定冲突
    • 缓存处理   

    •  1.0  :服务器端使用Expires标签来标志(时间)一个响应体,在Expires标志时间内的请求,都会获得该响应体缓存。
      服务器端在初次返回给客户端的响应体中,有一个Last-Modified标签,该标签标记了被请求资源在服务器端的最后一次修改。
    • 在请求头中,使用If-Modified-Since标签,该标签标志一个时间,意为客户端向服务器进行问询:“该时间之前,我要请求的资源是否有被修改过?

      如果服务器接收到了请求头,并判断If-Modified-Since时间后,资源确实没有修改过,则返回给客户端一个304 not modified响应头,表示”缓冲可用,你从浏览器里拿吧!”。

      如果服务器判断If-Modified-Since时间后,资源被修改过,则返回给客户端一个200 OK的响应体,并附带全新的资源内容,表示”你要的我已经改过的,给你一份新的”

      1.1 基本工作原理和HTTP/1.0保持不变,而是增加了更多细致的特性。其中,请求头中最常见的特性就是Cache-Control  ( Cache-Control 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中)。还有例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match
    • 连接方式 
    • HTTP/1.0 默认使用短连接 。每遇到这样一个 Web 资源,浏览器就会重新建立一个TCP连接,这样就会导致有大量的“握手报文”和“挥手报文”占用了带宽。
    • 为了解决 HTTP/1.0 存在的资源浪费的问题, HTTP/1.1 优化为默认长连接模式 。 
    • HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。实现长连接需要客户端和服务端都支持长连接

    • Host头处理 

    •  域名系统(DNS)允许多个主机名绑定到同一个IP地址上,但是HTTP/1.0并没有考虑这个问题.HTTP/1.0的请求报文中,就是不会加入主机名。这样的报文送到服务器端,服务器是理解不了客户端想请求的真正网址。

    • HTTP/1.1在请求头中加入了Host字段。这样,服务器端就可以确定客户端想要请求的真正的网址了。
    • 带宽优化

    • 范围请求  HTTP/1.1引入了范围请求(range request)机制,以避免带宽的浪费。HTTP/1.1可以在请求中加入Range头部,以请求(并只能请求字节型数据)数据的一部分。即返回码是 206

    • 状态码100 HTTP/1.1中新加入了状态码100。该状态码的使用场景为,存在某些较大的文件请求,服务器可能不愿意响应这种请求,此时状态码100可以作为指示请求是否会被正常响应

    • 压缩  HTTP/1.0对数据压缩的选项提供的不多,不支持压缩细节的选择,也无法区分端到端(end-to-end)压缩或者是逐跳(hop-by-hop)压缩。

      许多格式的数据在传输时都会做预压缩处理。数据的压缩可以大幅优化带宽的利用。然而,HTTP/1.0对数据压缩的选项提供的不多,不支持压缩细节的选择,也无法区分端到端(end-to-end)压缩或者是逐跳(hop-by-hop)压缩。

      HTTP/1.1则对内容编码(content-codings)和传输编码(transfer-codings)做了区分。内容编码总是端到端的,传输编码总是逐跳的。

      HTTP/1.0包含了Content-Encoding头部,对消息进行端到端编码。HTTP/1.1加入了Transfer-Encoding头部,可以对消息进行逐跳传输编码。HTTP/1.1还加入了Accept-Encoding头部,是客户端用来指示他能处理什么样的内容编码

      HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

                         SSL 通道通常使用基于密钥的加密算法,密钥长度通常是 40 比特或 128 比特

           优点:保密性好、信任度高

           HTTPS 的核心—SSL/TLS协议

           SSL 和 TLS 没有太大的区别。SSL 指安全套接字协议(Secure Sockets Layer)TLS 是基于 SSL 之上的,但由于习惯叫法,通常把 HTTPS 中的核心加密协议混成为 SSL/TLS。

            SSL/TLS 的核心要素是非对称加密。非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知

           非对称加密的公钥和私钥需要采用一种复杂的数学机制生成(密码学认为,为了较高的安全性,尽量不要自己创造加密方案)。公私钥对的生成算法依赖于单向陷门函数。

          单向陷门函数:一个较弱的单向函数。已知单向陷门函数 f,陷门 h,给定任意一个输入 x,易计算出输出 y=f(x;h);而给定一个输出 y,假设存在 f(x;h)=y,很难根据 f 来计算出 x,但可以根据          f  和  h 来推导出 x 

           对称加密

           对称加密:通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性。

          使用 SSL/TLS 进行通信的双方需要使用非对称加密方案来通信,但是非对称加密设计了较为复杂的数学算法,在实际通信过程中,计算的代价较高,效率太低,因此,SSL/TLS 实际对消息的加密使用的是           对称加密。

          为什么需要非对称加密

          我们知道网络通信的信道是不安全的,传输报文对任何人是可见的,密钥的交换肯定不能直接在网络信道中传输。因此,使用非对称加密,对对称加密的密钥进行加密,保护该密钥不在网络信道中被窃听         。这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。

           公钥即使做加密,也难以避免这种信任性问题

          为了公钥传输的信赖性问题,第三方机构应运而生——证书颁发机构(CA,Certificate Authority)。CA 默认是受信任的第三方。CA 会给各个服务器颁发证书,证书存储在服务器上,并附有 CA 的电子签名

          当客户端(浏览器)向服务器发送 HTTPS 请求时,一定要先获取目标服务器的证书,并根据证书上的信息,检验证书的合法性。一旦客户端检测到证书非法,就会发生错误。客户端获取了服务器的证书             后,由于证书的信任性是由第三方信赖机构认证的,而证书上又包含着服务器的公钥信息,客户端就可以放心的信任证书上的公钥就是目标服务器的公钥。

           数字签名

           数字签名要解决的问题,是防止证书被伪造。第三方信赖机构 CA 之所以能被信赖,就是靠数字签名技术。

            数字签名,是 CA 在给服务器颁发证书时,使用散列+加密的组合技术,在证书上盖个章,以此来提供验伪的功能。具体行为如下

            (1)CA 知道服务器的公钥,对该公钥采用散列技术生成一个摘要。CA 使用 CA 私钥对该摘要进行加密,并附在证书下方,发送给 服务器。

         (2)现在服务器将该证书发送给客户端,客户端需要验证该证书的身份。

                客户端找到第三方机构 CA,获知 CA 的公钥,并用 CA 公钥对证书的签名进行解密,获得了 CA 生成的摘要。

           (3)客户端对证书数据(也就是服务器的公钥)做相同的散列处理,得到摘要,并将该摘要与之前从签名中解码出的摘要做对比,如果相同,则身份验证成功;否则验证失败。

           验证身份的证书一定是由 CA 的私钥进行签名,而不能由发送者自己来签名。这是为了抵抗以下的攻击场景:

          攻击者使用某种手段,欺骗了客户端,将服务器的公钥替换为攻击者的诱饵公钥。

          假使证书的签名使用的是服务器的私钥,那么客户端在解码的时候,将会使用假的服务器公钥(实则为诱饵公钥)。

         那么,如果该证书实则由攻击者(使用自己的私钥签名)发出,那么客户端就会成功验证(攻击者的)身份为真,从而信赖了证书中的公钥。

          如果使用 CA 的私钥和公钥来对签名处理,则不会出现上述问题。

      HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性

           服务器与客户端传递数据的过程中HTTPS是如何保证数据的安全呢   答案就是上面的3点 对称加密 非对称加密 和数字签名

     

    两者的区别

    • 端口号 :HTTP 默认是 80,HTTPS 默认是 443。
    • UTL 前缀 :HTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://
    • 安全性和资源消耗 : HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
    • 在浏览器中输入 url 地址 ->> 显示主页的过程

      DNS 解析   
      TCP 连接  三次握手
      浏览器发送 HTTP 请求   请求报文 :空行 请求行 请求头 请求数据
      服务器处理请求并返回 HTTP 报文  相应报文:响应体 响应头 相应行
      浏览器解析渲染页面
      TCP 断开  四次握手 连接结束
      • 各种协议与 HTTP 协议之间的关系

      • 上面这张图片能够很好的解释发生了什么。首先发给DNS服务器,进行域名解析,得到IP地址后生成针对目标Web服务器的HTTP请求报文,然后报文由TCP协议负责传输,为了方便通信,HTTP请求报文被分为报文段,然后每个报文段可靠的传输给对方,然后报文段由IP层负责一边中转一遍传送,服务器收到报文段后重组报文段,然后由应用层的HTTP协议处理请求的内容,请求的结果以 同样的方式进行回传。

        URI 和 URL 的区别是什么?

        • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
        • URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

        URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。URL 是一种具体的 URI,它不仅唯一标识资源,而且还提供了定位该资源的信息

     url各字段的含义
     
     
     
     
     

    协议: http://为协议名,标明了请求需要使用的协议,通常使用的是HTTP协议或者安全协议 HTTPS.其他协议还有mailto:用户打开邮箱的客户端,和ftp:用来做文件的转换, file用来获取文件,data获取外部资源等

    域名或IP: 标明了需要请求的服务器的地址.

    端口: 标明了获取服务器资源的入口
    端口号用于区分服务的端口,一台拥有IP地址的服务器可以提供许多服务,比如Web服务、FTP服务、SMTP服务等.那么,服务器的资源通过“IP地址+端口号”来区分不同的服务.如果把服务器比作房子,端口号可以看做是通向不同服务的门,
    注意:80端口是默认隐藏的

    路由或文件路径: 表示服务器上资源的路径,过去这样的路径标记的是服务器上文件的物理路径,但是现在,路径表示的只是一个抽象地址,并不指代任何物理地址.

    参数(查询字符串): 是请求里提供的额外参数.这些参数是以键值对的形式,通过&符号分隔开来,服务器可以通过这些参数进行相应的个性化处理

    片段(锚点信息): fragment可以理解为资源内部的书签.用来向服务器指明展示的内容所在的书签的点

  • 相关阅读:
    jquery动态生成html代码绑定事件
    jQuery中如何给动态添加的元素绑定事件
    JAVA基础面试(一)
    JAVA基础面试(二)
    JAVA面试之集合框架(三)
    JAVA基础面试(四4)
    JAVA基础面试(五5)
    JAVA基础面试(五)
    JavaWeb面试(六)
    JavaWeb面试(七)
  • 原文地址:https://www.cnblogs.com/tingtin/p/15968981.html
Copyright © 2020-2023  润新知