• 有关HTTP及HTTP的浅学习


    前言

    当被问及HTTPS时发现自己不了解此类协议,因此来进行学习并总结如下,希望能对在学习的师傅有所帮助!

    HTTP

    什么是HTTP

    了解HTTPS之前,首先需要了解一下HTTP
    HTTP协议全称Hyper Text Transfer Protocol,中文含义是超文本传输协议,位于TCP/IP四层模型当中的应用层。
    在这里插入图片描述
    具体如下图所示
    在这里插入图片描述

    HTTP工作流程

    一次HTTP操作称为一个事务,其工作整个过程如下:
    
     (1 )地址解析
     如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
     从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
     协议名:http
     主机名:localhost.com
     端口:8080
     对象路径:/index.htm
     在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
    
    (2)封装HTTP请求数据包
     把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
     
     (3)封装成TCP包,建立TCP连接(TCP的三次握手)
       在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完
       成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP
       网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协
       议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口。
       
    (4)客户机发送请求命令     
       建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,
       后边是MIME信息包括请求修饰符、客户机信息和可内容。
    
     (5)服务器响应
     服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或
     错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
     实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,
     它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
    
     6)服务器关闭TCP连接
     一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器
     在其头信息加入了这行代码。
     
    Connection:keep-alive
    TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了
    为每个请求建立新连接所需的时间,还节约了网络带宽。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    实际上的话在这里面需要考虑请求头,请求方法这些,下面进行讲解。

    这里以帅气的快递小哥送快递为例,当快递小哥得到我们的住址,在给我们送快递的时候,可能会采用汽车或者三轮车的方式来送,当他送到指定位置的时候,会给我们打电话说他是某个快递公司的,让我们去固定地点签收,如果我们不想去的话就可以给物业打电话,给快递小哥放行,让他送货上门,当我们成功签收后,快递小哥就完成了一次快递任务。

    此时再看http,当以http协议向某个web服务器发送请求时,get和post方式就类似于我们快递小哥用的汽车,是一种传递方式,而服务器的ip就类似于快递的地址,而UA就相当于快递小哥声明自己是哪个快递公司的,cookie呢就是我们让物业给快递小哥放行,http 200+正文就相当于快递小哥完成一次快递任务
    在这里插入图片描述

    HTTP的特点

    1、http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
    2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST3、灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
    4、无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是
    却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做
    Cookie,一个叫做Session。
    5、无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    HTTP的请求方式

    1GET方法
    
    GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。
    
    说明:
    GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。
    注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。
    
    2POST方法
    
    POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。
    POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。
    
    3HEAD方法
    HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。
    
    4PUT方法
    PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。
    它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。
    
    5DELETE方法
    DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。
    
    6CONNECT方法
    CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。
    
    7OPTIONS方法
    OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URLHTTP策略。
    
    8TRACE方法
    TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    HTTP请求报文

    它由三部分组成,头部,请求行和数据体
    具体如下图所示(图中有部分标注错误,cookie不属于头部中的,cookie是一种用户凭证)
    在这里插入图片描述

    HTTP头字段

    HTTP头字段如下

    字段名							说明															示例
    Accept				能够接受的回应内容类型(Content-Types)								Accept: text/plain
    Accept-Charset		能够接受的字符集														Accept-Charset: utf-8
    Accept-Encoding		能够接受的编码方式列表												Accept-Encoding: gzip, deflate
    Accept-Language		能够接受的回应内容的自然语言列表										Accept-Language: en-US
    Authorization		用于超文本传输协议的认证的认证信息										Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Cache-Control		用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令			Cache-Control: no-cache
    Connection			该浏览器想要优先使用的连接类型											Connection: keep-alive Connection: Upgrade
    Cookie				服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议			Cookie: $Version=1; Skin=new;
    Content-Length		以 八位字节数组 (8位的字节)表示的请求体的长度							Content-Length: 348
    Content-Type		请求体的 多媒体类型													Content-Type: application/x-www-form-urlencoded
    Date				发送该消息的日期和时间												Date: Tue, 15 Nov 1994 08:12:31 GMT
    Expect				表明客户端要求服务器做出特定的行为										Expect: 100-continue
    Host				服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号			Host: en.wikipedia.org:80 Host: en.wikipedia.org
    If-Match 			仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要
    					作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被
    					修改的情况下,才更新该资源	 										If-Match: "737060cd8c284d8af7ad3082f209582d"
    If-Modified-Since	允许在对应的内容未被修改的情况下返回304未修改							If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
    If-None-Match		允许在对应的内容未被修改的情况下返回304未修改							If-None-Match: "737060cd8c284d8af7ad3082f209582d"
    If-Range			如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个
    					新的实体																If-Range: "737060cd8c284d8af7ad3082f209582d"
    Range				仅请求某个实体的一部分												Range: bytes=500-999
    User-Agent			浏览器的浏览器身份标识字符串											User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
    Origin				发起一个针对 跨来源资源共享 的请求										Origin: http://www.example-social-network.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
    该怎么简单的说呢,举个例子吧,就好比你直接搜索网易云音乐的url,和在百度上搜网易云,再进入网易云中,两者是不同的,后者会多个referer头,告诉web服务器你从哪里来

    (1)防盗链
    比如办事通服务器只允许网站访问自己的静态资源,那服务器每次都需要判断Referer的值是否是zwfw.yn.gov.cn,如果是就继续访问,不是就拦截。
    
    (2)防止恶意请求
    比如静态请求是.html结尾的,动态请求是.shtml,那么所有的*.shtml请求,必须 Referer为我自己的网站才可以访问,这就是Referer的作用。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    响应状态码

    访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。

    1XX- 信息型,服务器收到请求,需要请求者继续操作。
    2XX- 成功型,请求成功收到,理解并处理。
    3XX - 重定向,需要进一步的操作以完成请求。
    4XX - 客户端错误,请求包含语法错误或无法完成请求。
    5XX - 服务器错误,服务器在处理请求的过程中发生了错误。
    
    常见响应状态码如下所示
    
    200 OK - 客户端请求成功
    301 - 资源(网页等)被永久转移到其它URL
    302 - 临时跳转
    400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    404 - 请求资源不存在,可能是输入了错误的URL
    500 - 服务器内部发生了不可预期的错误
    503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    HTTP缺点

    1、请求信息明文传输,容易被窃听截取。
    2、数据的完整性未校验,容易被篡改
    3、没有验证对方身份,存在冒充危险
    
    • 1
    • 2
    • 3

    HTTPS的出现正是解决这些问题,下面来介绍HTTPS

    HTTPS

    什么是HTTPS

    HTTPS全称Hypertext Transfer Protocol over Secure Socket Layer,中文含义是超文本传输协议在安全加密字层,简单来说就是加密数据传输,通俗的说就是安全连接。
    简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
    在这里插入图片描述

    什么是SSL

    SSL全称Secure Socket Layer,中文含义是安全套接字层。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

    SSL 是指安全套接字层,简而言之,它是一项标准技术,是为网络通信提供安全及数据完整性的一种安全
    协议。
    SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
    
    • 1
    • 2
    • 3

    那它的作用是什么呢,如下所示

    SSL/TLS 协议实现的功能有三个主要组成部分:加密、认证和完整性。
    1、加密:隐藏从第三方传输的数据。为了提供高度隐私,对传输的数据进行加密。这意味着,任何试图
    截取此数据的人都只会看到几乎无法解密的乱码字符。
    2、身份验证:在两个通信设备之间启动称为握手的身份验证过程,以确保两个设备确实是它们声称的真实
    身份。
    3、完整性:验证数据未被伪造或篡改。对数据进行数字签名,以提供数据完整性,验证数据是否在到达
    目标接收者之前被篡改过。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    HTTPS工作流程

    1、首先客户端通过URL访问服务器建立SSL连接。

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

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

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

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

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

    图示如下
    在这里插入图片描述
    这里对对称密钥和非对称密钥进行简单讲解

    对称密钥

    对称加密指的是加密和解密使用的秘钥都是同一个,是对称的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密性
    在这里插入图片描述

    非对称密钥

    非对称加密,存在两个秘钥,一个叫公钥,一个叫私钥。两个秘钥是不同的,公钥可以公开给任何人使用,私钥则需要保密。

    公钥和私钥都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密
    在这里插入图片描述

    那么在此过程中我们如何知道信息是否被修改了呢,这时候就需要介绍一下摘要算法了

    摘要算法

    实现完整性的手段主要是摘要算法,也就是常说的散列函数、哈希函数
    其实就是对明文进行了一种特殊加密,示例如下图
    在这里插入图片描述
    得到的字符串是独一无二的,想要验证其是否被修改,只需要验证其经过字符串是否一致即可
    在这里插入图片描述
    在HTTPS中还存在一个数字签名,我们再来接下来对其进行简单介绍

    数字签名

    数字签名可以验证消息是由发送方签名发出的,别人是伪造不了的,因为用的是私钥加密,公钥解密
    签名与公钥一样,任何人都可以进行访问,但这个签名只有私钥对应的公钥可以解开,拿到字符串后,对比字符串是否一致来判断是否被修改过,若一致则说明是发送方发出的
    在这里插入图片描述
    此时就存在了一个问题,就是公钥是任何人都可以发布的,黑客也可以自己编造公钥,这时候如何判断公钥就是发送方的那个公钥呢,这时候就需要一个第三方,也就是CA验证机构

    CA验证机构

    CA,全称未Certificate Authority,其中文含义是数字证书认证机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
    它的工作流程如下

    1、服务器的运营人员向数字证书认证机构提出公开密钥的申请
    2、数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名
    3、然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起
    4、服务器会将这份由数字证书认证机构颁发的数字证书发送给客户端,以进行非对称加密方式通信
    
    • 1
    • 2
    • 3
    • 4

    接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,通过则证明

    1、认证服务器的公开密钥的是真实有效的数字证书认证机构
    2、服务器的公开密钥是值得信赖的
    
    • 1
    • 2

    HTTPS缺点

    1HTTPS协议多次握手,导致页面的加载时间延长近50%2HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
    3、申请SSL证书需要钱,功能越强大的证书费用越高。
    4SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
    
    • 1
    • 2
    • 3
    • 4

    HTTP与HTTPS的区别

    1HTTPSHTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议
    进行了加密处理。
    2HTTPHTTPS使用连接方式不同,默认端口也不一样,HTTP80HTTPS443。
    使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书
    较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
    3HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器
    需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上SSL握手需要的9个包,所以一共是 12 个包。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    参考文献

    https://blog.csdn.net/Reme_mber/article/details/123927959
    https://www.cnblogs.com/librarookie/p/16373398.html
    https://blog.csdn.net/hudashi/article/details/50788595)
    https://zhuanlan.zhihu.com/p/158044137
    https://zhuanlan.zhihu.com/p/72616216
    https://blog.csdn.net/ccmlove123/article/details/104117058
    https://www.jianshu.com/p/30b8b40a671c
    https://www.jianshu.com/p/6bf2f9a37feb
    https://vue3js.cn/interview/http/HTTPS.html

  • 相关阅读:
    E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索
    大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-下
    MongoDB副本集成员如何复制新数据
    常见网站架构图
    Python逆向爬虫之scrapy框架,非常详细
    使用hash和history实现前端历史状态切换,触发事件驱动函数来完成部分数据的加载(使用hash和history实现前端路由切换,含完整源码+注释)
    arcPy与添加 shp 文件(显示在 ArcMap),通过Arcpy打开mxd文档并添加数据的方式
    MyBatis
    JavaWeb-JDBC-Mybatis-Junit-Maven-Lombok
    es(Elasticsearch)客户端Kibana安装使用(03Kibana安装篇)
  • 原文地址:https://blog.csdn.net/Reme_mber/article/details/125349768