一 URI编码
① ASCII wiki
说明: man ascii '观察'
② 为什么要进行URI编码
RFC3986规定:uri中只允许包含'a-zA-Z、0-9'、-_.~'4个特殊字符'以及所有'保留'字符
URI特殊字符
③ 保留字符与非保留字符
④ URI百分号%编码方式
说明: 一般是'非法'字符才进行'URI'编码
重要: 某些库对uri的编码'不尽相同',这些库在'不同的安全环境'中对'不同字符'处理策略不同
⑤ perl进行URI编码
+++++++++++++++ "perl的" +++++++++++++++
cpan URI::Escape
perl -MURI::Escape -le 'print uri_escape("http://example.com")'
思考: 'URI'编码和'URI'转义是一个'含义'吗?
+++++++++++++++ "python的" +++++++++++++++
# coding=utf-8
import urllib
from urllib import parse
txt = 'http://example.com'
#URL编码
new_txt = urllib.parse.quote(txt)
print(new_txt)
⑥ 理解nginx中归一化
curl --data-urlencode URI编码 encoding (normalizing) part of URI $request_uri vs $uri
nginx日志打印请求参数中文件流乱码问题 nginx日志中文显示为16进制问题解决
nginx没有正确开启支持SSL的情况下,access日志会出现$request字段是十六进制字符串
思考: 'proxy_pass'中透传的'uri'是什么格式?
proxy_pass uri编码和解码问题 proxy_pass 避免url decode的三种方法
如何避免proxy_pass中nginx将url decode nginx1.9.2 uri编码
++++++++++++ "proxy_paas必须带attach_url 不解码的最佳实践" ++++++++++++
location ~ ^/gate {
if ($request_uri ~* ^/gate/(.*)$) {
proxy_pass http://127.0.0.1:8081/$1;
}
}