zoukankan      html  css  js  c++  java
  • http和https协议

    http和https协议

    今日概要

    • http协议
    • https协议
    • https协议加密方式

    今日详情

    一 、HTTP协议

    • 官方概念

      • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
      • 想必这句话同学们都听烂了吧,但是也没办法,我们要彻底的理HTTP权威官方的概念解释。
    • 白话概念:

      • HTTP协议就是服务器(Server)和客户端(Client)之间的数据交互,(也就是相互传世数据)的一种形式。我们可以将Server和Client拟人化。

      • 智取威虎山

          				- 土匪:蘑菇,你哪路?什么价?(什么人?到哪里去?)
              - 杨子荣:哈!想啥来啥,想吃奶来了妈妈,想娘家的人,孩子他舅舅来了。(找同行)
              - 杨子荣:拜见三爷!
              - 土匪:天王盖地虎!(你好大的胆!敢来气你的祖宗?)
              - 杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死。)
              - 土匪:野鸡闷头钻,哪能上天王山!(你不是正牌的。)
              - 杨子荣:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)
              - 土匪:拜见过阿妈啦?(你从小拜谁为师?)
              - 杨子荣:他房上没瓦,非否非,否非否!(不到正堂不能说。)
              - 土匪:嘛哈嘛哈?(以前独干吗?)
              - 杨子荣:正晌午说话,谁还没有家?(许大马棒山上。)
              
              - 土匪:好叭哒!(内行,是把老手)
              - 杨子荣:天下大耷拉!(不吹牛,闯过大队头。)
              - 座山雕:脸红什么?
              - 杨子荣:精神焕发!
              - 座山雕:怎么又黄了?
              - 杨子荣:防冷,涂的蜡!
              - 座山雕:晒哒晒哒。(谁指点你来的?)
              - 杨子荣:一座玲珑塔,面向青寨背靠沙!(是个道人。)
        
      • 是不是看到这里,有得童鞋终于知道了传说中的‘天王盖地虎’是真正含义了吧。此黑话其实就是杨子荣和土匪之间进行交互沟通的方式(协议)。

    • HTTP工作原理:

      • HTTP协议工作于客户端-服务端架构之上。浏览器中作为HTTP客户端通URL向HTTP服务端即WEB服务器发送所有请求。WEP服务器更具收到的请求后,向客户端发送响应信息。

        img

    • HTTP四点注意事项:

      • HTTP允许传输任意类型的数据对象,正在传输的类型由content-type加以标记
      • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户请求,并收到客户应答,即断开连接,采用这种方式可以节省传输时间。
      • HTTP是媒体独立状态:这意味着、只要客户端和服务器知道如何处理的数据内容,任何类型都可以通过HTTP传输,客户端以及服务器指定使用合适的MIME-type内容类型。
      • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议无事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次连接传输的数据增大。另一方面,在服务器不需要先前信息的应答就较快。
    • HTTP之URL

      • HTTP使用统一资源(Uniform Resource Identifiers,URL) 来传输数据建立连接。URL是一种特殊类型URL,包含了用于查找某个资源的足够信息。

        URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name**从上面的URL可以看出,一个完整的URL包括以下几部分:

        • 协议部分
          • 该URL的协议部分为"http:",这代表网页使用的是HTTP协议,在internert中可以使用多种协议,如HTTP,FTP等等本例中使用的HTTP协议。在"http"后面的“//”为分割符
        • 域名部分
          • 该URL的域名部分为“www.aspxfans.com”.一个URL中的域名,也可以使用IP地址作为域名使用
        • 端口部分
          • 跟在域名后面的是端口,域名和端口之间使用":"作为分割符。端口不是一个URL,如果省掉端口部分,将采用默认端口
        • 虚拟目录部分
          • 从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
        • 文件部分
          • 从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
        • 锚部分
          • 从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
        • 参数部分
          • 从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
    • HTTP之Request

      • 客户端发送一个HTTP请求到服务器的请求消息都包括以下组成部分

        img

        • 报文头:常被叫做请求头,请求头中存储的是该请求的一些主要说明(自我介绍)。服务器据此获 取客户端的信息。

          常见的请求头:

           	           accept:浏览器通过这个头告诉服务器,它所支持的数据类型
                  Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
                  Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
                  Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
                  Host:浏览器通过这个头告诉服务器,想访问哪台主机
                  If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
                  Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
                  Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接
                  X-Requested-With: XMLHttpRequest 代表通过ajax方式进行访问
          
                  User-Agent:请求载体的身份标识
          

          报文体:常被叫做请求体,请求体中存储的是将要传输/发送给服务器的数据信息。

    • HTTP之Response:

      • 服务器回传一个HTTP响应到客户端的响应消息包括以下组成部分:

        img

        •  状态码:以“清晰明确”的语言告诉客户端本次请求的处理结果。

          • HTTP的响应状态码由5段组成:

              1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
              2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
              3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
              4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
              5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
            
        • 相应头:响应的详情展示

          • 常见的相应头信息:

             									 Location: 服务器通过这个头,来告诉浏览器跳到哪里
                        Server:服务器通过这个头,告诉浏览器服务器的型号
                        Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
                        Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
                        Content-Language: 服务器通过这个头,告诉浏览器语言环境
                        Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
                        Refresh:服务器通过这个头,告诉浏览器定时刷新
                        Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据
                        Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
                        Expires: -1 控制浏览器不要缓存
                        Cache-Control: no-cache
                        Pragma: no-cache
            
          • 相应体:根据客户端指定的请求信息,发送给客户端的指定数据

    二、HTTPS协议

    • 官方概念:

      • HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。
    • 白话概念

      • 加密安全版的HTTP协议

        img

    • HTTPS才用的加密技术

      • SSL加密技术
        • SSL采用的加密技术叫做“共享密钥加密”,也叫做"对称密钥加密"

        • 这种加密方法是这样的,比如客户端向服务器发送一条信息,首先客户端会采用以知的算法对信息进行加密,如MD5或者base64加密

        • 接收端对加密信息进行解密的时候需要用到密钥,中间会传递密钥,(加密和解密的密钥是同一个),密钥在传输中间是被加密的。这种方式看起来很安全,但是仍有潜在危险,一旦被窃听,或者信息被挟持,就有可能破解密钥,而破解其中的信息。

        • 因此“共享密钥加密”(对称加密)这种方式存在安全隐患:

          img

        img

      • 非对称密钥加密技术
        • "非对称加密"使用的时候有两把锁 一把叫做“私有密钥”,一把是“公开密钥
        • 使用“非对称加密方式”的加密方式的时候,服务器首先告诉客户端按照自己给的公开密钥进行加密处理,
        • 客户端按照公开密钥加密以后,服务器接收到信息在通过自己的私有密钥进行解密
        • 这样做的好处 及时 解密的密钥(私有密钥)不会进行传输,因此也就避免了被挟持的风险 就算公开密钥被窃听者拿到了,它也很难进行解密,因为解密过程是对离散对数求值,这可不是轻而易举就能做到的事。以下是非对称加密的原理图
        • img
        • 但是"非对称加密技术"也存在如下缺点
          • 第一个是:如何保证接收端向发送端发出公开密钥的时候,发送端确保收到的是预先发送的,而不会被挟持,只要发送密钥 就会被挟持。
          • 第二个是:非对称加密方式效率比较低,他处理起来更复杂,通信过程中使用就有一定效率问题而影响通信速度
      • https的证书机制
        • 在上面我们讲了非对称密钥的缺点,其中就是公钥很可能被挟持的情况,无法保证客户端收到公钥就是你服务器发出公开密钥。此时就引出了公开密钥证书机制。数字证书认证机构是客户端与服务器都可信赖第三方机构,证书具体传播过程如下:

          • 服务器的开发者携带公开密钥,向数字证书认证机构提出公开密钥的申请,数字证书认证机构在认清申请者的身份,审核同过以后,会对开发者申请公开密钥数据签名,然后分配这个已经签名的公开密钥,并将密钥放在证书里面绑定在一起。

          • img

          • 服务器将这份证书发送给客户端,因为客户端也认可证书机构,客户端也可以通过数字证书中数字签名来验证公钥的真伪。来确保服务器传过来的公开密钥是否真实。一般情况下,证书的数字签名是很难被伪造的,这取决于认证机构的公信力。一旦确认信息无误之后,客户端就会通过公钥对报文进行加密发送,服务器接收到以后用自己的私钥解密。

  • 相关阅读:
    PyQt作品 – PingTester – 多点Ping测试工具
    关于和技术人员交流的一二三
    Pyjamas Python Javascript Compiler, Desktop Widget Set and RIA Web Framework
    Hybrid Qt applications with PySide and Django
    pyjamas build AJAX apps in Python (like Google did for Java)
    PyQt 维基百科,自由的百科全书
    InfoQ:请问为什么仍要选择Java来处理后端的工作?
    Eric+PyQt打造完美的Python集成开发环境
    python select module select method introduce
    GUI Programming with Python: QT Edition
  • 原文地址:https://www.cnblogs.com/jiangchunsheng/p/11950611.html
Copyright © 2011-2022 走看看