HTTP协议与HTTPS协议

1、概念

HTTP:超文本传输协议,本质上是一种通信协议。用来将html从服务端传送到客户端。端口号为80。

HTTPS :安全的超文本传输协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。端口号为443。


我们先主要来看下HTTP的一些知识~

2、HTTP协议特点:

  • 支持客户/服务器模式
  • 简单快速。客户向服务器请求服务时,只需传送请求方法和路径
  • 灵活。允许传输任意类型的数据对象
  • 无连接。其含义是限制每次连接只处理一个请求,服务器处理完客户的请求并收到客户的回应后,断开连接
  • 无状态。即对处理事务没有记忆力

3、HTTP通讯

       通过HTTP协议浏览器和wab服务器进行通讯, 并且HTTP协议规定浏览器请求web服务器的数据格式和web服务器应答浏览器的数据格式。主要分为请求报文段和应答报文段。

       请求报文段 :浏览器发送给web服务器                                                                                                

       应答报文段 :web服务器发送给浏览器

 1)HTTP的常见请求方式:

  • GET:请求获得资源;申请获得资源,不对服务器产生任何其他影响
  • POST:客户端向服务器提交数据的方法,这种方法会影响服务器,服务器可能根据收到的数据动态创建新的资源,很有可能是更新原有的资源。连续发送同一个请求可能进一步影响服务器上的资源
  • HEAD:和GET类似,不过仅要求服务器返回头部信息,而不需要传输任何实际内容。
  • PUT:上传某个资源
  • DELETE:删除某个资源

  2)我们来看一个例子来分析学习一下HTTP请求的部分内容:

    

  •  第一行是请求行,其中“GET”是请求方法,表示客户端以只读的方式来申请资源,不会对服务器产生影响。

          “http://www.baidu.com/index.html”是目标资源的URL(统一资源定位符,指定组员的位置以及用于访问它的协议)。其中“http”是表示获取目标资源需要使用的应用层协议。“www.baidu.com”指定资源所在的目标主机。“index.html”指定资源文件的名。“HTTP/1.0”表示客户端使用的HTTP的版本号是1.0.目前主流其实是“HTTP/1.1”。稍后会给大家介绍下两个版本之间的区别。

  • 第二行表示客户端使用的程序是wget。
  • 第三行表示的是目标主机名是www.baidu.com。http协议规定http请求中必须包含的头部字段就在目标主机名。
  • 第四行表示wget命令时传入的。用以告诉服务器处理完这个请求就关闭连接,在1.0版本中,web客户端和web服务器之间的一个TCP连接只能为一个HTTP请求服务。当处理完客户的一个HTTP请求后,web服务器就(主动)将TCP连接关闭了。此后,同一个客户如果再发送一个HTTP请求的话,就必须与服务器建立一个新的TCP连接。也就是说,同一个客户的多个HTTP请求不能共用同一个连接,称为短连接。长连接与之相反,是指多个请求可以同时使用一个TCP连接。长连接减少了网络上为建立TCP连接导致的负荷。同时对每次请求而言缩减了处理时间。“Connection”头部字段就是专门用于高速对方一个请求完成之后该如何处理连接的。此处为关闭。
  • 另外在所有字段之后,http请求必须包含一个空行,以标识头部字段的结束。在空行之后,HTTP请求可以包含可选的消息体,如果有,请求中必须包含描述该信息体长度的字段“Conntent-Length”。3)我们接着看一个例子来了解HTTP应答的部分内容:

   

  • 第一行是状态行,“HTTP/1.0”是服务器使用的HTTP协议的版本号,通常与客户端使用版本一样。“200 OK”是状态码和状态信息。

      常用的应答状态码

  • 1XX:指示信息——表示请求已接收,继续处理
  • 2XX:成功——表示请求已被成功接收、理解、接受
  • 3XX:重定向——要完成请求必须进行更进一步的操作
  • 4XX:客户端错误——请求有语法错误或者请求无法实现
  • *400——客户端请求有语法错误,不能被服务器理解
  • *401——请求未经授权
  • *403——服务器收到请求,但拒绝提供服务
  • *404——请求资源不存在
  • 5XX:服务器端错误——服务器未能实现合法的请求
  • *500——服务器发生不可预期的错误
  • *503——服务器当前不能处理客户端的请求,一段时间后可能恢复正常
  • 第2行到第7行的HTTP应答的头部字段,其表示方法与HTTP请求中的头部字段相同。

      “Content-Type: texthtml;charset =gbk”表示目示文档的MIME炎型。其中“text"是主文档类型,“html” 是子文档类。“texthtml"表示目示文档index.html是text类型中的html文档。“ charset"是text文档类型的一个参数,用于指定文档的字符编码。

       “Set-Cookie”:表示服务器传送了一个Cookie给客户端,其中,“BAIDUID”指定Cookie的名字,“expires”指定cookie的生存时间,“path”指定该cookie生效的域名和路径。下面我们简单说下cookie的作用。

       在交互式Web应用程序兴起之后,HTTP协议的这种无状态特性就显得不适应了,因为交互程序通常要承上启下。因此,我们要使用额外的手段来保持HTTP连接状态,常见的解决方法就是Cookie。Cookie 是服务器发送给客户端的特殊信息(通过HTTP应答的头部字段“Set-Cookie"),客户端每次向服务器发送请求的时候都需要带上这些信息(通过HTTP请求的头部字段“Cookie")。这样服务器就可以区分不同的客户了。基于浏览器的自动登录就是用Cookie实现的。

        “Via: 1.0 localhost (squid/3.0 STABLE18)”表示HTTP应答在返回过程中经历过的所有代理服务器的地址和名称。这里的localhost实际上指的是“192.168.1.108”。这个头部字段的功能有点类似于IP协议的记录路由功能。


       到现在为止,我们已了解到 HTTP 具有相当优秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具两面性,它也是有不足之处的。HTTP 主要有这些不足,例举如下。

  • 通信使用明文(不加密),内容可能会被窃听;
  • 不验证通信方的身份,因此有可能遭遇伪装;
  • 无法证明报文的完整性,所以有可能已遭篡改。
  • 某些特定的 Web 服务器和特定的 Web 浏览器在实际应用中存在的不足(也可以说成是脆弱性或安全漏洞)

       因为HTTP有以下三个缺点:无加密,无身份认证,无完整性保护,因此所谓的HTTPS,它其实就是HTTP+加密+身份认证+完整性保护。HTTPS并不是一种新的协议,在通信接口使用了SSL和TLS协议而已。HTTP通常直接和TCP通信,而HTTPS中HTTP先和SSL通信,再由SSL和TCP进行通信。下一篇将详细讲解HTTPS的加密技术。这里就简单说下两者的区别。

4、HTTP和HTTPS的区别

  • HTTPS协议需要申请ca证书,一般免费证书很少,需要交费
  • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样(HTTPS端口号为443,HTTP是80)
  • HTTP协议连接很简单,是无状态的
  • HTTPS协议是由SSL+HTTP协议构成的可进行加密传输、身份认证的网络协议     

5.Cookie和Session

1)Cookie

        在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

        Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

2)Session

        session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

3)Cookie和Session结合使用

         web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:

        1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

        2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。

课外小知识:

        Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。Flask主要包括Werkzeug和Jinja2两个核心函数库它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。

        Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。

        Jmja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值