Client Hints - The-Next-Web-Research-Lab/the-next-web-research-lab.github.io GitHub Wiki

Client Hints๋กœ ํด๋ฆฐ ํ•˜๊ฒŒ ๋ธŒ๋ผ์šฐ์ € ๋ถ„๊ธฐํ•˜๊ธฐ

User-Agent์˜ ๋ฌธ์ œ์ 

User-Agent๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด Chromium ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ window.navigator.userAgent๋กœ User-Agent๋ฅผ ์กฐํšŒํ•˜๋ฉด ๋™์ผํ•œ ๋ฌธ์ž์—ด์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Chrome
Mozilla/5.0 (X11; Linux x86_64) 
AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/51.0.2704.103 
Safari/537.36

// Opera
Mozilla/5.0 (X11; Linux x86_64) 
AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/51.0.2704.106 
Safari/537.36 
OPR/38.0.2220.41

// Edge
Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/91.0.4472.124 
Safari/537.36 
Edg/91.0.864.59

User-Agent์—์„œ Chrome ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? OPR, Edg๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด Chrome์œผ๋กœ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ Chromium ๊ธฐ๋ฐ˜์˜ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘๊ทผํ•˜๋ฉด ์ด ๋ฐฉ์‹์€ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const userAgent = window.navigator.userAgent;
const isEdge = userAgent.includes("Edg");
const isOpera = userAgent.includes("OPR");
// Chrome์ด ์•„๋‹Œ Edge, Opara ์ด์™ธ Chromium ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ญ์ƒ true
const isChrome = userAgent.includes("Chrome") && !isEdge && !isOpera;

Client Hints ์‚ฌ์šฉํ•˜๊ธฐ

Chromium ๊ธฐ๋ฐ˜์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Client Hints์„ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Client Hints๋Š” User-Agent์˜ ์˜ค์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

Client Hints๋Š” window.navigator.userAgentData.brands๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Chromium ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ Client Hints๋ฅผ ์กฐํšŒํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ณ„๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Chrome
[
    {
        "brand": "Not/A)Brand",
        "version": "99"
    },
    {
        "brand": "Google Chrome",
        "version": "115"
    },
    {
        "brand": "Chromium",
        "version": "115"
    }
]

// Opera
[
    {
        "brand": "Not/A)Brand",
        "version": "99"
    },
    {
        "brand": "Opera",
        "version": "101"
    },
    {
        "brand": "Chromium",
        "version": "115"
    }
]

// Edge
[
    {
        "brand": "Not/A)Brand",
        "version": "99"
    },
    {
        "brand": "Microsoft Edge",
        "version": "115"
    },
    {
        "brand": "Chromium",
        "version": "115"
    }
]

์œ„์™€ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฌธ์ž์—ด์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— User-Agent์™€ ๋‹ค๋ฅด๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฒ„๊ทธ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const userAgentBrands = window.navigator
  .userAgentData.brands.map(({brand}) => brand);
const isEdge = userAgentBrands.includes("Microsoft Edge");
const isOpera = userAgentBrands.includes("Opera");
const isChrome = userAgentBrands.includes("Google Chrome");