HTTP1.1(五)URI编码

一  URI编码

①  ASCII wiki

说明: man ascii '观察'

②  为什么要进行URI编码

RFC3986规定:uri中只允许包含'a-zA-Z'、'0-9'、'-_.~'4个特殊字符'以及所有'保留'字符

备注: '~ 波浪线'虽然'不要求'编码,但一些'老网关或代理'会编码

URI特殊字符 

③  保留字符非保留字符

! * ’ ( ) ; : @ & = + $ , / ? # [ ] 

备注: 这些是'保留'字符,'路径'分隔,'参数'分隔等作用

④  URI百分号%编码方式

思考: 如何进行'URL'编码?

  1) 16进制表示形式,一个字节一个字节的表示,前面用'%百分号'

  2) 不要求编码的字符'可以不'编码,编码了也'不'影响,,比如'a <=> %61'

  备注: 一般是'非法'字符才进行'URI'编码

  3) 中文按字节表示,比如 "中" 三个字节'0xE4 0xB8 0xAD', 就是 '%E4%B8%AD'

重要: 某些库对uri的编码'不尽相同',这些库在'不同的安全环境'中对'不同字符'处理策略不同

nginx 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;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值