AWS负载均衡器默认情况下不会丢弃查询参数,但可以通过修改负载均衡器的配置来实现该功能。以下是一个解决方法的示例代码,使用AWS CLI命令行工具:
import urllib.parse
def lambda_handler(event, context):
request = event['Records'][0]['cf']['request']
# 解析查询参数
query_string = request['querystring']
# 删除某些不需要的查询参数
if 'param1' in query_string:
del query_string['param1']
# 重新构建URL
updated_url = urllib.parse.urlunparse((
request['scheme'],
request['headers']['host'][0]['value'],
request['uri'],
'',
urllib.parse.urlencode(query_string),
''
))
return {
'status': '200',
'statusDescription': 'OK',
'headers': {
'content-type': [{
'key': 'Content-Type',
'value': 'text/html'
}],
'cache-control': [{
'key': 'Cache-Control',
'value': 'max-age=100'
}],
'strict-transport-security': [{
'key': 'Strict-Transport-Security',
'value': 'max-age=63072000; includeSubdomains; preload'
}],
'content-encoding': [{
'key': 'Content-Encoding',
'value': 'UTF-8'
}],
'content-length': [{
'key': 'Content-Length',
'value': str(len(updated_url))
}]
},
'body': updated_url
}
aws lambda create-function \
--function-name remove-query-params \
--runtime python3.6 \
--role \
--handler lambda_handler \
--zip-file fileb://path/to/lambda_function.zip
aws lambda create-function \
--function-name modify-url \
--runtime python3.6 \
--role \
--handler lambda_handler \
--zip-file fileb://path/to/lambda_function.zip
aws cloudfront create-distribution \
--origin-domain-name \
--default-cache-behavior \
'LambdaFunctionAssociations={"Quantity":1,"Items":[{"LambdaFunctionARN":"","EventType":"viewer-request"}]}'
现在,当请求经过负载均衡器时,Lambda@Edge函数将会删除特定的查询参数并返回修改后的URL。