美文网首页
base64 和 url base64 和 encodeURIC

base64 和 url base64 和 encodeURIC

作者: 霡霂976447044 | 来源:发表于2021-03-09 14:42 被阅读0次
    1 先来看base64编码
    In [15]: base64.b64encode(b"http://a.com/c?a=3&c=34")                                                                                                                     
    Out[15]: b'aHR0cDovL2EuY29tL2M/YT0zJmM9MzQ='
    
    2 再看url base64编码
    In [18]: base64.urlsafe_b64encode(b"http://a.com/c?a=3&c=34")                                                                                                             
    Out[18]: b'aHR0cDovL2EuY29tL2M_YT0zJmM9MzQ='
    

    可以看出,非url base64不会对斜杠进行编码。
    准确的说:url base64 会将 +和/分别替换为- _两个字符

    假设是路径参数:http://a.com/aHR0cDovL2EuY29tL2M/YT0zJmM9MzQ= 这样传输肯定是后端解析不到完整的路径参数,所以要使用urlsafe_b64encode。

    假设是url查询参数, http://a.com?c=aHR0cDovL2EuY29tL2M/YT0zJmM9MzQ=http://a.com?c=aHR0cDovL2EuY29tL2M_YT0zJmM9MzQ 后端也肯定是可以正常解析的

    3 encodeURIComponent
    encodeURIComponent("http://a.com/c?a=3&c=34")
    "http%3A%2F%2Fa.com%2Fc%3Fa%3D3%26c%3D34"
    

    当前端需要传递一个查询参数带有特殊字符的时候,可以使用encodeURIComponent,后端Flask能够正常解析出,明文传输会导致解析出来参数不完整

    此处如果不使用encodeURIComponent编码会导致 callback_url=http://a.com/c?a=3&c=34 后端解析到参数是callback_url: http://a.com/c?a=3

    @bp.route('/test/c')
    def c():
        """
        http ':9006/api/v1/test/c?callback_url=http://a.com/c?a=3&c=34'
        http ':9006/api/v1/test/c?callback_url=http%3A%2F%2Fa.com%2Fc%3Fa%3D3%26c%3D34'
        """
        res = request.args.get('callback_url', '')
        return success_json({
            'ccc': 'ccc',
            'res': res
        })
    
    other

    py 解析encodeURIComponent

    from urllib import parse
    parse.unquote(xxx)
    

    js urlsafe_b64encode

    atob(data.replace(/_/g, '/').replace(/-/g, '+'))
    

    相关文章

      网友评论

          本文标题:base64 和 url base64 和 encodeURIC

          本文链接:https://www.haomeiwen.com/subject/xotbqltx.html