以下是我的Lambda代码。
当我点击lambda时,我可以得到'桌面'或'移动'。当我发送Tablet UserAgent时,它不会将其归类为Tablet。
exports.handler = (event, context, callback) => {
var region = process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1';
console.log(region);
console.log(event);
var device = {};
if( event.headers['CloudFront-Is-Mobile-Viewer'] === "true" )
device.device = 'Mobile';
else if ( event.headers['CloudFront-Is-Tablet-Viewer'] === "true" )
device.device = 'Tablet';
else
device.device = 'Desktop';
var response = {
statusCode: 200,
body: JSON.stringify(device)
};
callback(null, response);
};
我还检查了收到的lambda标头。
'CloudFront-Is-Desktop-Viewer': 'true',
'CloudFront-Is-Mobile-Viewer': 'false',
'CloudFront-Is-SmartTV-Viewer': 'false',
'CloudFront-Is-Tablet-Viewer': 'false',
'CloudFront-Viewer-Country': 'US',
用户代理:
Mozilla / 5.0(iPad; CPU OS 8_1,如Mac OS X)AppleWebKit / 600.1.4(KHTML,类似Gecko)版本/ 8.0 Mobile / 12B410 Safari / 600.1.4
答案 0 :(得分:1)
根据User-Agent标头的值,CloudFront会在将请求转发到您的源之前将这些标头的值设置为true或false。 如果设备属于多个类别,则可能有多个值。例如,对于某些平板电脑设备,CloudFront可能同时设置CloudFront-Is-Mobile-Viewer和CloudFront-Is-Tablet - 查看为真。 (强调添加)
因此,如果您将这些转换为单个设备分类,如果按此顺序测试它们,在第一场比赛中停止,则可能会获得最明智的结果:
CloudFront-Is-SmartTV-Viewer
CloudFront-Is-Tablet-Viewer
CloudFront-Is-Mobile-Viewer
CloudFront-Is-Desktop-Viewer