๐Ÿ“Œ ๊น€์˜ํ•œ ๋‹˜์˜ "๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹" ๊ฐ•์˜ ๋“ฃ๊ณ  ์ •๋ฆฌ

 

๐Ÿ“HTTP ํ—ค๋” ๊ฐœ์š”

  • HTTP ํ—ค๋” ๊ตฌ์กฐ
    ๋”๋ณด๊ธฐ
     

    - ์š”์ฒญ ๋ฉ”์‹œ์ง€

    start-line ์‹œ์ž‘ ๋ผ์ธ GET /search?q=hello&hl=ko HTTP/1.1
    header ํ—ค๋” Host: www.google.com
    empty line ๊ณต๋ฐฑ ๋ผ์ธ (CRLF)  
    message body  

    ์‹œ์ž‘ ๋ผ์ธ :

    method SP(๊ณต๋ฐฑ) request-target SP(๊ณต๋ฐฑ) HTTP-version CRLF(์—”ํ„ฐ)
    GET   /search?q=hello&hl=ko   HTTP/1.1  

    HTTP ํ—ค๋” :

    field-name: OWS(๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ) field-value OWS(๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)
    Host:   www.google.com  

    - ์‘๋‹ต ๋ฉ”์‹œ์ง€

    start-line ์‹œ์ž‘ ๋ผ์ธ HTTP/1.1 200 OK
    header ํ—ค๋” Content-Type: text/html;charset=UTF-8
    Content-Length: 3423
    empty line ๊ณต๋ฐฑ ๋ผ์ธ (CRLF)  
    message body <html>
        <body>...</body>
    </html>

    ์‹œ์ž‘ ๋ผ์ธ :

    HTTP-version SP(๊ณต๋ฐฑ) status-code SP(๊ณต๋ฐฑ) reason-phrase CRLF
    HTTP/1.1   200   OK  

    HTTP ํ—ค๋” :

    field-name: OWS(๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ) field-value OWS(๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)
    Content-Type:
    Content-Length:
      text/html;charset=UTF-8
    3423
     
  • HTTP ํ—ค๋”์˜ ์šฉ๋„
    • HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด
      ex) ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ, ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ ์ •๋ณด ๋“ฑ
    • ํ‘œ์ค€ ํ—ค๋”๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Œ
    • ํ•„์š”์‹œ ์ž„์˜ ํ—ค๋” ์ถ”๊ฐ€ ๊ฐ€๋Šฅ   
  • HTTP ํ—ค๋”์˜ ๋ถ„๋ฅ˜ : 
    • 1999๋…„ RFC2616 ๋“ฑ์žฅ (ํ๊ธฐ๋จ)   RFC2616 ๊ณผ๊ฑฐ : https://www.rfc-editor.org/rfc/rfc2616

      โœ… ๊ณผ๊ฑฐ์—๋Š” ํ—ค๋”๋ฅผ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜


      - General ํ—ค๋” : ๋ฉ”์„ธ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ์ •๋ณด     ex) Connection: close
      - Request ํ—ค๋” : ์š”์ฒญ ์ •๋ณด                                   ex) User-Agent: Mozilla/5.0 (Macintosh; ..)
      - Response ํ—ค๋” : ์‘๋‹ต ์ •๋ณด                                ex) Server: Apache
      - Entity ํ—ค๋”: ์—”ํ‹ฐํ‹ฐ ๋ฐ”๋”” ์ •๋ณด                             ex) Content-Type: text/html, Content-Length:3423


      โœ… message Body


      - ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ (message body)์€ ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ(entity body)์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
      - ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์€ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•œ๋‹ค. ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์„ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ๋‹ด์•„ ์ „์†ก.
      - ์—”ํ‹ฐํ‹ฐ ํ—ค๋”๋Š” ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ œ๊ณต
         - ๋ฐ์ดํ„ฐ ์œ ํ˜•(html, json), ๋ฐ์ดํ„ฐ ๊ธธ์ด, ์••์ถ• ์ •๋ณด ๋“ฑ๋“ฑ

    • 2014๋…„ RFC7230-7235 ๋“ฑ์žฅ
      - ์ŠคํŽ™์ด ์ชผ๊ฐœ์ง€๋ฉด์„œ ๋‹ค์ˆ˜ ๊ฐœ์ •
      - ์—”ํ‹ฐํ‹ฐ(Entity) ๋Œ€์‹  ํ‘œํ˜„(Representation) ์š”์†Œ๊ฐ€ ๋„์ž… (์™„์ „ ๋Œ€์‘๋˜๋Š” ๊ฑด X)
      - Representation (ํ‘œํ˜„) = representation Metadata (ํ‘œํ˜„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(ํ—ค๋”)) + Representation Data (ํ‘œํ˜„ ๋ฐ์ดํ„ฐ)
      - ์ด REpresentation๊ฐ€ REST API์˜ RE์— ํ•ด๋‹น

      โœ…
      message Body


      - ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(message body)์„ ํ†ตํ•ด ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
      - ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ = ํŽ˜์ด๋กœ๋“œ(payload)
      - ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„์œผ๋กœ ์ •์˜
      - ํ‘œํ˜„ ํ—ค๋”๋Š” ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ œ๊ณต
         - ๋ฐ์ดํ„ฐ ์œ ํ˜•(html, json), ๋ฐ์ดํ„ฐ ๊ธธ์ด, ์••์ถ• ์ •๋ณด ๋“ฑ๋“ฑ
      - ์ฐธ๊ณ : ํ‘œํ˜„ ํ—ค๋”๋Š” ํ‘œํ˜„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ํŽ˜์ด๋กœ๋“œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ ๊ฐ•์˜์—์„  ์ƒ๋žต

 


๐Ÿ“ ํ‘œํ˜„

  • ํ‘œํ˜„ :
    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์—  ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋Š” ์„œ๋กœ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค. ๊ทธ๊ฑธ ์œ„ํ•ด ๊ฐ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ html, xml, Json ๋“ฑ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค. 

  • ํ‘œํ˜„ ํ—ค๋” (์š”์ฒญ, ์‘๋‹ต ๋‘˜ ๋‹ค ์‚ฌ์šฉ)
    • Content-Type: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹
      - ๋ฏธ๋””์–ด ํƒ€์ž…, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
      ex) text/html; charset=utf-8    ,    application/json    ,    image/png ๋“ฑ

    • Content-Encoding: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์••์ถ• ๋ฐฉ์‹
      - ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹  ์ธก์—์„œ ์••์ถ• ํ›„ ์ธ์ฝ”๋”ฉ ํ—ค๋” ์ถ”๊ฐ€
      - ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹  ์ธก์—์„œ ์ธ์ฝ”๋”ฉ ํ—ค๋” ์ •๋ณด๋กœ ์••์ถ• ํ•ด์ œ
      ex) gzip    ,    deflate    ,    identity (No์••์ถ•) ๋“ฑ

    • Content-Language: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด
      - ์ž์—ฐ ์–ธ์–ด? ์ธ๊ฐ„์ด ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์–ธ์–ด
      ex) ko    ,    en    ,    en-US  ๋“ฑ
    • Content-Length: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด
      - ๋ฐ”์ดํŠธ ๋‹จ์œ„
      - Transfer-Encoding(์ „์†ก ์ฝ”๋”ฉ)์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Content-Length๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ
      (์ „์†ก ์ฝ”๋”ฉ ์•ˆ์— ์ด๋ฏธ ์ •๋ณด๊ฐ€ ๋‹ค ๋“ค์–ด ์žˆ๋‹ค.)

 


๐Ÿ“์ฝ˜ํ…์ธ  ํ˜‘์ƒ

  •  ํ˜‘์ƒ (์ฝ˜ํ…์ธ  ๋„ค๊ณ ์‹œ์—์ด์…˜) :
    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์ด ์ด๊ฒƒ์ด๋ผ๊ณ  ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ๊ฒƒ.
    ์„œ๋ฒ„๊ฐ€ ์ตœ๋Œ€ํ•œ ์„ ํ˜ธ์— ๋งž์ถฐ์„œ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. (๋ชป๋งž์ถฐ ์ค„ ์ˆ˜๋„ ์žˆ์Œ)
    (ํ˜‘์ƒํ—ค๋”๋Š” ์š”์ฒญ์‹œ์—๋งŒ ์‚ฌ์šฉ)
    • Accept : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž… ์ „๋‹ฌ
    • Accept-Charset: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
    • Accept-Encoding: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์••์ถ• ์ธ์ฝ”๋”ฉ 
    • Accept-Language: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ž์—ฐ์–ธ์–ด
      - ํ˜‘์ƒ ํ—ค๋” ์—†๋Š” ๊ฒฝ์šฐ
      ํด๋ผ์ด์–ธํŠธ > ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๊ตญ์–ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์— ์š”์ฒญ ์ „์†ก
      ์„œ๋ฒ„ > ํด๋ผ์ด์–ธํŠธ : ํด๋ผ์ด์–ธํŠธ์˜ ์„ ํ˜ธ ์‚ฌํ•ญ์„ ๋ชจ๋ฆ„์œผ๋กœ ๊ทธ๋ƒฅ ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋œ ์–ธ์–ด๋กœ ์ „์†ก
      - ํ˜‘์ƒ ํ—ค๋” ์žˆ๋Š” ๊ฒฝ์šฐ
      ํด๋ผ์ด์–ธํŠธ > ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๊ตญ์–ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์— ์š”์ฒญ ์ „์†ก
      ์„œ๋ฒ„ > ํด๋ผ์ด์–ธํŠธ : ํ˜‘์ƒ ํ—ค๋” Accept-Language: ๋กœ ko(ํ•œ๊ตญ์–ด)๋ฅผ ๋ณด๋‚ด๋ฉด ์„ ํ˜ธ ์–ธ์–ด๋กœ ์ „์†ก (๊ทธ ์–ธ์–ด ์ง€์› ๊ฒฝ์šฐ)

      โ“๊ทธ๋Ÿผ ๋…์ผ์–ด์™€ ์˜์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์„œ๋ฒ„์— ํ•œ๊ตญ์–ด๋กœ ์š”์ฒญํ–ˆ๋Š”๋ฐ... ๋…์ผ์–ด ๋ณด๋‹จ ์˜์–ด๋ฅผ ๋ฐ›๊ณ  ์‹ถ๋‹ค ์ด๋Ÿด ๋•Œ๋Š”? 
      ๊ทธ๋Ÿด ๋•Œ๋ฅผ ์œ„ํ•œ๊ฒŒ ์šฐ์„  ์ˆœ์œ„ ์ด๋‹ค

 

  • ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„ 
    • Quality Values(q) ๊ฐ’ ์‚ฌ์šฉ
      0~1, ํด์ˆ˜๋ก ๋†’์€ ์šฐ์„ ์ˆœ์œ„์— ํ•ด๋‹นํ•œ๋‹ค (์ƒ๋žตํ•˜๋ฉด 1)
      ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
      1. ko-KR;q=1 (์œ„์—์„œ๋Š” q๊ฐ€ ์ƒ๋žต๋จ,ko-KR์€ ํ•œ๊ตญ์‚ฌ๋žŒ์ด ์“ฐ๋Š” ํ•œ๊ตญ์–ด) 
      2. ko;q=0.9 (ko๋Š” ํ•œ๊ตญ๊ณตํ†ต์–ด)
      3. en-US;q=0.8 (en-US๋Š” US์—์„œ ์“ฐ๋Š” ์˜์–ด)
      4. en:q=0.7 (en๋Š” ์˜์–ด๊ณตํ†ต์–ด)
    • ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์ด ๊ฐ€์žฅ ์šฐ์„ ์‹œ ํ•œ๋‹ค. 
      ex) Accept: text/*, text/plain, text/plain;format=flowed, */*
      1. ์ˆœ์œ„: text/plain;format=flowed
      2. ์ˆœ์œ„: text/plain
      3. ์ˆœ์œ„: text/*
      4. ์ˆœ์œ„: */*
    • ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋งž์ถ˜๋‹ค.
      ex) Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5

      Media Type Quality
      text/html;level=1 1
      text/html 0.7
      text/plain  0.3 (text/*์— ๋งž์ถค)
      image/jpeg 0.5 (*/*์— ๋งž์ถค)
      text/html;level=2 0.4
      (์–˜๋Š” ์™œ 0.4 ์ธ๊ฐ€ ํ•˜๋ฉด ์œ„์— text/html;level=2 ์— ๋Œ€ํ•ด์„œ๋Š” ๊ตฌ์ฒด์ ์ธ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚˜์™€์žˆ์ง€๋งŒ ์•„๋ž˜ level=3๋Š” ์ •ํ™•ํžˆ ๋งค์นญ๋˜๋Š” ๊ฒƒ์ด ์—†์–ด text/html ์˜ ์šฐ์„ ์ˆœ์œ„์— ๋งž์ถ˜ ๊ฒƒ)
      text/html;level=3 0.7 (text/html ์— ๋งž์ถค)

๐Ÿ“์ „์†ก ๋ฐฉ์‹

  • ๋‹จ์ˆœ ์ „์†ก: ์š”์ฒญํ•˜๋ฉด ์‘๋‹ต์„ ์ฃผ๋Š” ๋ฐ Content-Length๋งŒ ์ง€์ •ํ•ด์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ๋ƒฅ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. (Content-Length๋Š” message body ์ „์†ก์‹œ ๊ธฐ๋ณธ์ธ๋“ฏํ•˜๋‹ค ๋ถ„ํ•  ์ „์†ก์€ ์ œ์™ธ)
  • ์••์ถ• ์ „์†ก: ์„œ๋ฒ„๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์••์ถ•ํ•˜๊ณ  ๋ญ˜๋กœ ์••์ถ•ํ–ˆ๋Š”์ง€ ์ •๋ณด๋ฅผ Content-Encoding ํ—ค๋”๋„ ํ•จ๊ป˜ ๋ณด๋‚ธ๋‹ค. 
  • ๋ถ„ํ•  ์ „์†ก: Transfer-Encoding: chunked, chunk๋Š” ๋ฉ์–ด๋ฆฌ๋ฅผ ์˜๋ฏธ.
    ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•ด์„œ ๋ณด๋‚ผ๊ฑฐ๋‹ค ๋ผ๋Š” ํ‘œ์‹œ๋ฅผ ํ•˜๋ฉฐ ํ‘œ์‹œ๋œ ๋ฐ”์ดํŠธ (์—ฌ๊ธฐ์„œ 5, 5, 0 ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋“ค)์˜ Hello ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ณด๋‚ด๊ณ , World๋ฅผ ๋ณด๋‚ด๊ณ  \r\n(Enter, ๋์ด๋ผ๋Š” ๋œป)์„ ๋ณด๋‚ธ๋‹ค.
    ์ฃผ์˜) ๋ถ„ํ•  ์ „์†ก์—์„œ๋Š” Content-Length๋ฅผ ๋ณด๋‚ด๋ฉด ์•ˆ๋œ๋‹ค! Chunk์•ˆ์— ๊ธธ์ด ์ •๋ณด ์žˆ๋‹ค. 
  • ๋ฒ”์œ„ ์ „์†ก: Range, Content-Range. ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด ์ „์†ก ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    ํŒŒ์ผ์„ ๋ฐ›๋‹ค๊ฐ€ ๋Š๊ฒผ์„ ๋•Œ ์ด๋ฏธ ๋ฐ›์•„์ง„ ๊ฑธ ์ œ์™ธํ•œ ๊ฑธ ๋ฐ›๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๊ฐ€๋Šฅ

๐Ÿ“์ผ๋ฐ˜ ์ •๋ณด

 

  • From: ์œ ์ € ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ •๋ณด
    - ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉX, ๊ฒ€์ƒ‰ ์—”์ง„ ๊ฐ™์€ ๊ณณ์—์„œ ์‚ฌ์šฉ
    - ์š”์ฒญ์—์„œ ์‚ฌ์šฉ

  • Referer: ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ
    - ํ˜„์žฌ ์š”์ฒญ๋œ ํŽ˜์ด์ง€์˜ ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ
    - A > B๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ B๋ฅผ ์š”์ฒญํ•  ๋•Œ Referer: A ๋ฅผ ํฌํ•จํ•ด์„œ ์š”์ฒญํ•œ๋‹ค.
    - Referer์„ ์‚ฌ์šฉํ•ด ์œ ์ž… ๊ฒฝ๋กœ ๋ถ„์„ ๊ฐ€๋Šฅํ•˜๋‹ค.
    - ์š”์ฒญ์—์„œ ์‚ฌ์šฉ
    - ๐Ÿ˜ฏโ“ํ™ฉ๋‹นํ•˜๊ฒŒ๋„ Referer์€ Referrer์˜ ์˜คํƒ€์ธ๋ฐ ์ด๋ฏธ ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ๋ผ๊ณ 

  • User-Agent: ์œ ์ € ์—์ด์ „ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด
    - ex) user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
    - ํด๋ผ์ด์–ธํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด (์›น ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด ๋“ฑ)
    - ํ†ต๊ณ„ ์ •๋ณด๋กœ ์‚ฌ์šฉ, ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ
    - ์š”์ฒญ์—์„œ ์‚ฌ์šฉ

  • Server: ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ •๋ณด
    (์ค‘๊ฐ„์˜ ์ •๋ณด๊ฐ€ ๊ฑฐ์น˜๋Š” ์„œ๋ฒ„๋“ค์ด ์•„๋‹ˆ๋ผ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋์ ์— ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„๋ผ๊ณ  ํ•œ๋‹ค.)
    - ex) Server: Apach/2.2.22 (Debian)
    - ex) server: nginx
    - ์‘๋‹ต์—์„œ ์‚ฌ์šฉ

  • Date: ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋œ ๋‚ ์งœ 
    - ex) Date: Tue, 15 Nov 1994 08:12:31 GMT
    - ์‘๋‹ต์—์„œ ์‚ฌ์šฉ

๐Ÿ“ํŠน๋ณ„ํ•œ ์ •๋ณด

 

  • Host: ์š”์ฒญํ•œ ํ˜ธ์ŠคํŠธ ์ •๋ณด (๋„๋ฉ”์ธ)
    - ํ•„์ˆ˜๊ฐ’
    - ์š”์ฒญ์—์„œ ์‚ฌ์šฉ
    - ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ, ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ 
    (๊ฐ€์ƒํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๊ตฌ๋™ ์ค‘์ผ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ์–ด๋А ๋„๋ฉ”์ธ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์•ผํ• ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„) ? ํฌํŠธ๋ž‘ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด์ง€? TCP/IP๋Š” IP๋กœ๋งŒ ํ†ต์‹ ? ํฌํŠธ๋Š”?

  • Location: ํŽ˜์ด์ง€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
    - ์›น ๋ธŒ๋ผ์šฐ์ € 3xx ์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Location ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ์ž๋™ ์ด๋™(๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)
    - 201 (Created): Location ๊ฐ’์€ ์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค URI๋กœ ์‘๋‹ต์‹œ ํ•จ๊ป˜ ์ „๋‹ฌ
    - 3xx (Redirection): Location ๊ฐ’์€ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฅดํ‚ด

  • Allow: ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œ
    - 405 (Method Not Allowed) ์—์„œ ์‘๋‹ต์— ํฌํ•จํ•ด์•ผํ•จ
    - Allow: GET, HEAD, PUT
    - ex) ๋งŒ์•ฝ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๊ณ  GET, HEAD, PUT๋งŒ์„ ํ—ˆ์šฉํ•˜๋Š”๋ฐ POST๋กœ ์š”์ฒญํ•œ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์‘๋‹ต

  • Retry-After: ์œ ์ € ์—์ด์ „ํŠธ๊ฐ€ ๋‹ค์Œ ์š”์ฒญ์„ ํ•˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์‹œ๊ฐ„
    - 503 (Service Unavailavble): ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ถˆ๋Šฅ์ธ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Œ
    - ex) Retry-Ater: Fri, 31 Dec 1999 23:59:59 GMT (๋‚ ์งœ ํ‘œ๊ธฐ)
    - ex) Retry-Ater: 120 (์ดˆ๋‹จ์œ„ ํ‘œ๊ธฐ) 

๐Ÿ“์ธ์ฆ

 

  • Authorization: ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌ
    - ex) Authorization: Basic xxxxxxxxxxxxxxx
    - ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋งˆ๋‹ค value๊ฐ€ ๋‹ฌ๋ผ์ง

  • WWW-Authenticate: ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์‹œ ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์ •์˜
    - ์ ‘๊ทผ์‹œ ์ธ์ฆ์ด ์•ˆ๋ฌ๊ฑฐ๋‚˜ ๋ฌธ์ œ์‹œ 401 Unauthorized ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ,
      ์•„๋ž˜์ฒ˜๋Ÿผ ํ•„์š”ํ•œ ์ธ์ฆ ์ •๋ณด์˜ ์˜ˆ์‹œ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด์ค€๋‹ค.
    - WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"",Basic realm="simple"

๐Ÿ“์ฟ ํ‚ค

 

  • Set-Cookie: ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค ์ „๋‹ฌ (์‘๋‹ต)
  • Cookie: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , HTTP ์š”์ฒญ์‹œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ

* ์ฟ ํ‚ค ๋“ฑ์žฅ

HTTP๋Š” ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ฐ›๊ณ  ๋‚˜๋ฉด ๋Š์–ด์ ธ ์„œ๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊ทธ์ธ ํ•œ ์ƒ๋Œ€๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์„œ๋ฒ„์—๊ฒ ์—†๋‹ค.

ํ•˜์ง€๋งŒ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค๋ฉด ๋Œ€์•ˆ์€?

  • ๋ชจ๋“  ์š”์ฒญ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์„œ ์ „์†ก
    - ๋ณด์•ˆ๋ฌธ์ œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ „์†ก๋Ÿ‰์ด ๋Š˜๊ณ , ๊ฐœ๋ฐœ ์–ด๋ ค์›€ ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ
    - ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์™„์ „ํžˆ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์—ด๋ฉด ๊ทธ ๋• ๋˜ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š” ์ง€ ๋“ฑ์˜ ๋ฌธ์ œ ๋ฐœ์ƒ    

์ด๊ฑธ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค๋ผ๋Š” ๊ฐœ๋…์ด ๋„์ž…๋จ

 

* ์ฟ ํ‚ค ์ €์žฅ๊ณผ ์ „๋‹ฌ ๊ณผ์ •

๋กœ๊ทธ์ธ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„์—์„œ Set-Cookie์— ๋กœ๊ทธ์ธ ์œ ์ € ์ •๋ณด๋ฅผ ๋ง์•„์„œ ๋ณด๋‚ธ๋‹ค. (์™œ ๋งŒ๋‹ค๋ผ๋Š” ํ‘œํ˜„์„ ํ• ๊นŒ?) 

์›น๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฅผ ๋ฐ›์•„ ์›น๋ธŒ๋ผ์šฐ์ € ์•ˆ์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋†“๋Š”๋‹ค. 

์ด์ œ ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์ฟ ํ‚ค ์ €์žฅ์†Œ๋ฅผ ๋’ค์ ธ์„œ ์ฟ ํ‚ค ๊ฐ’์„ ๊ฐ€์ ธ์™€ ํ—ค๋”์— Cookie ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค. 

 

* ์ฟ ํ‚ค๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ž๋™ ํฌํ•จํ•œ๋‹ค.  

  •  ํ•˜์ง€๋งŒ ์ •๋ง ๋ชจ๋“  ์š”์ฒญ์— ๋ณด๋‚ด๋ฉด ์ด๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (๋”ฐ๋ผ์„œ ๋”ฐ๋กœ ์ œ์•ฝํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค)
  •  ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ์ถ”๊ฐ€๋กœ ์œ ๋ฐœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ์˜ ์ •๋ณด(์„ธ์…˜ ID, ์ธ์ฆํ† ํฐ ๋“ฑ)๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  •  ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค. 
    - ์„œ๋ฒ„์— ์ „์†กํ•˜์ง€ ์•Š๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—๋งŒ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์›น ์Šคํ† ๋ฆฌ์ง€ ์ฐธ๊ณ 

 

* ์ฟ ํ‚ค์˜ ์˜ˆ์‹œ

  ex) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

 

* ์ฟ ํ‚ค์˜ ์‚ฌ์šฉ์ฒ˜

  • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ
  • ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น

* ์ฟ ํ‚ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ

  • Set-Cookie: expires= ๋งŒ๋ฃŒ์ผ์„ ์ง€์ • (GMT ๊ธฐ์ค€)
  • Set-Cookie: max-age= ์ดˆ๋ฅผ ์„ค์ • (0์ด๋‚˜ ์Œ์ˆ˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ)
  • ๋งŒ๋ฃŒ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์ฟ ํ‚ค ์ข…๋ฅ˜
    • ์„ธ์…˜ ์ฟ ํ‚ค: ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ๊นŒ์ง€๋งŒ ์œ ์ง€
    • ์˜์† ์ฟ ํ‚ค: ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ๊นŒ์ง€ ์œ ์ง€ 

* ์ฟ ํ‚ค์˜ ๋„๋ฉ”์ธ

  • ex) domain=example.org
  • ๋ช…์‹œ: ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ๋„ ํฌํ•จํ•˜์—ฌ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ
    (O) example.org (O) dev.example.org
  • ์ƒ๋žต: ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ๋งŒ ์ ์šฉ๋˜์–ด ์„œ๋ธŒ ๋„๋ฉ”์ธ์—๋Š” ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค.
    (O) example.org (X) dev.example.org

* ์ฟ ํ‚ค์˜ ๊ฒฝ๋กœ

  • ex) path=/home
  • ์ด ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ •

* ์ฟ ํ‚ค์˜ ๋ณด์•ˆ

  • Secure
    • ์ฟ ํ‚ค๋Š” http, https๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ „์†ก
    • Secure๋ฅผ ์ „์†กํ•˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ „์†ก
  • HttpOnly
    • XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€ (document.cookie)
    • HTTP์ „์†ก์—๋งŒ ์‚ฌ์šฉ
  • SameSite
    • XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • ์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ์ฟ ํ‚ค ์ „์†ก

+ Recent posts