版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky6even/article/details/90644329
OpenResty目前内建支持的有Base64和JSON两种格式,并通过opm安装扩展库支持MessagePack。
◆ Base64:
Base64格式使用64个字符,可以把任意数据转换为ASCII码可见字符串,应用得非常普遍。OpenResty使用ngx.encode_base64和ngx.decode_base64这两个函数实现了标准的Base64编码和解码:
local str = "1234"
local enc = ngx.encode_base64(str) -- 编码为“ MTizNA==”
local dec= ngx.decode_base64(enc) -- 解码还原
Base64编码有一个“padding”特性,编码后长度不是4 的倍数时会用“=”填补。向ngx.encode_base64传递第二个参数nopadding可以禁止填充。
ngx.encode_base64(str, true) -- 编码结果会是"MTizNA"
标准的Base64编码使用了字符“+”和“/”,不适合用在HTTP协议的URL里,因为“ + ”和“/”会被转换成“%2F ” “ %2B ”导致编码损坏,所以Base64编码还有一种改进形式,它用“-”和“_”替代了“+”和“/”,也不使用“=”填补,可以安全地用在URL 里。
OpenResty在库ngx.base64里提供两个函数: encode_base64url和decode_base64-url支持Base64URL 编码
local b64 = require "ngx.base64" -- 必须手工加载base64库
local str = "=>?@"
local enc_std = ngx.encode_base64(str)
local enc_url = b64.encode_base64url(str)
local dec = b64.decode_base64url(enc_url)
ngx.say(enc_std) -- 输出“PT4/QA==”,有“=”填补
ngx.say(enc_url) -- 输出“ PT4_QA ”,注意使用了"_"