HTTP中几个压缩算法的PHP实现分析

Publish: September 14, 2016 Category: WEB,编程,代码分享 No Comments

HTTP 协议中的 Accept-Encoding/Content-Encoding 机制。它可以很好地用于文本类响应正文的压缩,减少网络数据传输,所以一直被广泛使用。但 HTTP 请求的发起方浏览器,无法事先知晓要访问的服务端是否支持解压,所以现阶段的浏览器没有压缩请求正文。
有一些通讯协议基于 HTTP 做了扩展,他们的客户端和服务端是专用的,完全可以针对请求正文进行压缩,例如 WebDAV 客户端就是这么做的。

HTTP中各压缩算法

实际的 Web 项目中,会存在请求正文非常大的场景,例如发表长篇博客,上报用于调试的网络数据等等。这些数据如果能在本地压缩后再提交,就可以节省大量流量、减少传输时间。本文介绍如何对 HTTP 请求正文进行压缩,包含如何在服务端解压、如何在客户端压缩两个部分。

开始之前,先来介绍本文涉及的三种数据压缩格式:

  • DEFLATE,是一种使用 Lempel-Ziv 压缩算法(LZ77)和哈夫曼编码的压缩格式。详见 RFC 1951;
  • ZLIB,是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: deflate。详见 RFC 1950;
  • GZIP,也是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: gzip。详见 RFC 1952;
    Content-Encoding 中的 deflate,实际上是 ZLIB。为了清晰,本文将 DEFLATE 称之为 RAW DEFLATE,ZLIB 和 GZIP 都是 RAW DEFLATE 的不同 Wrapper。


阅读剩余部分...

HTTPS交互流程分析

Publish: August 1, 2016 Category: WEB No Comments

概念

先理解几个概念
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等,示意图如下:
20080419173658592.png

非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等,示意图如下:
20080419173659971.png




阅读剩余部分...

开源PHP视频管理系统CumulusClips

Publish: February 27, 2016 Category: WEB 2 Comments

CumulusClips 是一个开源的视频CMS,跨平台做的比较好,适合中小型的视频站点搭建。高度可定制的主题,开发上手很快。后续还将陆续推出,主题制作,插件开发以及二次开发相关的教程。下面将介绍CumulusClips 的安装过程。

系统要求

  • 服务器要求:

CumulusClips只适合在linux或unix系统上运行

Linux (Kernel 2.6.32+)
PHP 5.3+
MySQL 5.0+
Apache web server 2.x (with mod_rewrite enabled)

注意: 在vps服务器上至少1GB内存以用于视频解码。

阅读剩余部分...

七牛云存储PHP生成管理凭证以及查看文件(state)

Publish: January 8, 2016 Category: WEB No Comments

管理凭证(Access Token)是七牛云存储用于验证管理请求合法性的机制。官方建议仅在业务服务器端使用这一类凭证,避免意外授权导致滥用。

官方文档

  • 凭证算法
  1. 生成待签名的原始字符串:

抽取请求URL中<path><path>?<query>的部分与请求内容部分(即HTTP Body),用“n”连接起来。
如无请求内容,该部分必须为空字符串。
注意:当Content-Typeapplication/x-www-form-urlencoded时,签名内容必须包括请求内容(即HTTP Body)。

signingStr = "<path>?<query>\n"
或
signingStr = "<path>?<query>\n<body>"
  1. 使用SecertKey对上一步生成的原始字符串计算HMAC-SHA1签名:

    sign = hmac_sha1(signingStr, "<SecretKey>")

  2. 对签名进行[URL安全的Base64编码]:
encodedSign = urlsafe_base64_encode(sign)
  1. 最后,将AccessKey和encodedSign用:连接起来:
accessToken = "<AccessKey>:<encodedSign>"


阅读剩余部分...

CodeIgniter3 多次扩展核心类

Publish: December 15, 2015 Category: WEB No Comments

大多数应用中Codeigniter(以下简称ci)具有多种类型的页。前端公共页面,后端管理面板,也可能是需要某种特殊权限的页面, 对于这些类型的页面都各自不同的控制器,ci虽然提供了对核心类进行扩展的方法,缺省情况下是在applicationcore文件夹中添加添加MY_前缀的控制器类即可,但是这样页仅仅是做了一次扩展.我们想要的是 Public_Controller Admin_Controller这种形式.

这里有三种解决方案.

阅读剩余部分...