为什么AWS Cloudfront不将平板电脑设备分类为平板电脑?

时间:2017-11-14 17:02:47

标签: amazon-web-services lambda amazon-cloudfront aws-api-gateway

以下是我的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

1 个答案:

答案 0 :(得分:1)

  

根据User-Agent标头的值,CloudFront会在将请求转发到您的源之前将这些标头的值设置为true或false。 如果设备属于多个类别,则可能有多个值。例如,对于某些平板电脑设备,CloudFront可能同时设置CloudFront-Is-Mobile-Viewer和CloudFront-Is-Tablet - 查看为真。 (强调添加)

     

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device

因此,如果您将这些转换为单个设备分类,如果按此顺序测试它们,在第一场比赛中停止,则可能会获得最明智的结果:

CloudFront-Is-SmartTV-Viewer
CloudFront-Is-Tablet-Viewer
CloudFront-Is-Mobile-Viewer
CloudFront-Is-Desktop-Viewer