Lambda函数URL的rawQueryString事件是否不支持冒号和斜杠?
问题原因与解决方案
你的问题不是rawQueryString不支持冒号和斜杠,而是未编码的特殊字符会导致请求被Lambda URL的前置处理层拦截,根本没到达你的Lambda函数执行。
当你在URL里直接传?http://yahoo.com时,://属于URL中的特殊分隔符,浏览器或请求客户端会默认认为这是不符合规范的查询字符串格式,Lambda URL的前置服务(比如AWS的请求路由层)会直接返回{"Message":null}的错误响应,你的函数代码根本没被执行。
解决方法
1. 客户端对参数进行URL编码
把要传递的URL参数做URL编码,比如http://yahoo.com会被编码为http%3A%2F%2Fyahoo.com,此时请求URL变为:https://nu7xvoo6niguuqtkqs7qpp6zq0fnzlo.lambda-url.us-east-1.on.aws/?http%3A%2F%2Fyahoo.com
2. Lambda函数解码参数
修改你的函数,对拿到的rawQueryString进行URL解码,这样就能还原出原始的带冒号和斜杠的内容:
import json import urllib.parse def lambda_handler(event, context): tempurl = urllib.parse.unquote(event['rawQueryString']) return { 'statusCode': 200, 'headers': {"content-type": "application/json; charset=utf-8"}, 'body': json.dumps(tempurl, ensure_ascii=False) }
这样处理后,不管客户端传的是编码后的参数,还是某些场景下自动编码的参数,函数都能正确解析出你想要的http://yahoo.com并返回。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

