κΈ°μ μ λΆλ₯΄λ μλλ‘μ΄λ ν΅μ νλ‘κ·Έλλ°
https://www.geeksforgeeks.org/http-headers/?ref=lbp
URLConnectionμμ ν€λ μ 보 μμ±νκΈ°
setRequestProperty(), addRequestProperty() μ¬μ©
OkHttpμμμ ν€λ μ 보 μμ±νκΈ°
https://square.github.io/okhttp/recipes/#accessing-headers-kt-java
HTTP νλ‘ν μ½μ ν€λ
λ©μμ§ ν€λ Message Header
νμ - RFCμ κ·μ½μΌλ‘ μ΄λ κ² μ ν΄μ§
message-header = field-name ":" [ field-value ]
field-name = token
field-vlaue = *( field-content | LWS )
- νλμ΄λ¦ field-name : 'ν€λ μ΄λ¦'μ΄λΌ λΆλ¦.λ³΄ν΅ ν ν° token μ΄λΌ ννν¨.
- νλ κ° field-value : 'ν€λκ°'μ΄λΌ λΆλ¦. '*( field-content | LWS )' νμμΌλ‘ ννν¨.
- field-content νλ λ΄μ© : μΌλ° λ¬Έμλ μ¬μ μ μλ ν ν° λλ ꡬλΆμ κ·Έλ¦¬κ³ μΈμ©λ¬Έμλ‘ κ΅¬μ±λ¨
- * : λ°λ³΅μ μλ―Ένλ€.
- LWS(Linear White Space) : ν, 곡백, λΌμΈκ΅¬λΆμ μλ―Ένλ€.
ν€λ νλμ μ λ ¬ μμλ μ€μνμ§ μμ.
κ΄νμ μΌλ‘ μΌλ° ν€λ νλ > μμ² ν€λ(μλ΅ ν€λ) > μν°ν° ν€λ νλ μμκ° μΌλ°μ μ.
μΌλ° ν€λGeneral Header
μμ²κ³Ό μλ΅ λ©μμ§ λͺ¨λμμ μΌλ°μ μΌλ‘ μ¬μ©νλ μ 보
general-header = Cache-Control
| Connection
| Date
| Transfer-Encoding
| Upgrade
| Via
Cach-Control
μλ²μ ν΄λΌμ΄μΈνΈ λ΄ μΊμλ₯Ό μ’ λ ν¨μ¨μ μΌλ‘ λ€λ£¨κΈ° μν¨. μΊμ 맀컀λμ¦μ λν μ§μλ¬Έμ μ§μ νλλ° μΌλ°μ μΌλ‘ μ¬μ©νλ€.
μΊμ μ¬μ© λͺ©μ : μμ²κ³Ό μλ΅μ νμ(round-trip)μ μ€μ¬ λ€νΈμν¬μ λμνμ ν₯μμν€λ λͺ©μ
Connection
μλ HTTP ν΅μ μ μμ²κ³Ό μλ΅ μ΄ν, μλ‘ ν΅μ μ λλ κ²μ κΈ°λ³ΈμΌλ‘ νλ€. κ·Έλ¬λ μ΄μ κ°μ ν΅μ λ°©λ²μ λΉλ²ν μ μμ λ°λ₯Έμλ²μ κ³ΌλΆνλ₯Ό μ λ°νλ€. λ°λΌμ μ΄λ¬ν λ¬Έμ ν΄κ²° λ°©μμΌλ‘ Connection ν€λ νλλ₯Ό μ¬μ©ν΄ κΈ°λ³ΈμΌλ‘ μμ², μλ΅ ν μ°κ²°μ μ μ§ν μ§ κ²°μ νλ κΈ°λ₯μ μ 곡νλ€.
Date
λ©μμ§λ₯Ό μμ±ν μκ°μ μλ―Ένλ€. μΌμλ₯Ό ν΅ν΄ ν₯ν λ¬Έμλ₯Ό μ μ§ν μ§ μλλ©΄ λ²λ¦΄μ§λ₯Ό κ²°μ νλ€.
Trasnfer-Encoding
λ©μμ§ λ³Έλ¬Έμμ μ¬μ©ν μΈμ½λ© λ°©μμ μλ―Ένλ€.
μ¬μ© λͺ©μ : HTTP νλ‘ν μ½ λ΄ ν€λλ₯Ό ν¬ν¨ν΄ μ 체 λ°μ΄ν°λ₯Ό μμ νκ² μ μ‘νκΈ° μν΄ 8λΉνΈμ μ μ‘κ·μ½μ λ§μΆμ΄ μνΈνμμΌ μ μ‘ν λ μ¬μ©νλ€.
Upgrade
ν΄λΌμ΄μΈνΈμ μλ²μ ν΅μ νλ μ€ νλ‘ν μ½μ λ³κ²½μ΄ νμν λ μ¬μ©νλ€.
μ : HTTPλ₯Ό μ¬μ©νλ€κ° 보μμ μν΄μ HTTPS νλ‘ν μ½λ‘ λ³κ²½μ΄ νμν κ²½μ° μ¬μ©νλ€.
μλ²μ ν΄λΌμ΄μΈνΈκ° λͺ¨λ μλ‘ μ¬μ©ν νλ‘ν μ½μ μ§μν΄μΌ νκΈ° λλ¬Έμ μ κ·Έλ μ΄λλ μλκ° "κ°λ₯νλ€λ©΄, λ€λ₯Έ νλ‘ν μ½λ‘ λ°κΏ¨μΌλ©΄ νλ€"λΌλ μλ―Έλ‘ μ¬μ©ν¨.
Via
κ²μ΄ν¬μ¨μ΄λ νλ½μλ μλ²μ μμ² λ©μμ§λ₯Ό λ§λ€μ΄ λ³΄λΌ λ λ°λμ Via νλλ₯Ό μ¬μ©ν΄μΌνλ€. μμΌλ‘ ν΄λΌμ΄μΈνΈμ μλ΅ λ©μμ§λ₯Ό μ μ‘νλ©΄ Via νλλ₯Ό μ¬μ©ν΄ μμ μ΄ κ²μ΄νΈμ¨μ΄λ νλΌμλΌλ μ¬μ€μ μλ €μ£Όμ΄μΌ νλ€.
Warning
μλ²μ κ²½κ³ λ₯Ό μλ¦°λ€.
μμ² ν€λ Request-Header
μμ²μ λν μΆκ°μ μΈ μ 보λ₯Ό λ΄κ³ μλ€.
request-header = Accept
| Accept-Charset
| Accept-Encoding
| Accept-Language
| Authorization
| Expect
| From
| Host
| If-Match
| If-Modified-Since
| If-None-Match
| If-Range
| If-Unmodified-Since
| Max-Forwards
| Proxy-Authorization
| Range
| Referer
| TE
| User-Agent
Accept
ν΄λΌμ΄μΈνΈ μμ μ΄ μ²λ¦¬ν μ μλ λ―Έλμ΄ νμ μ μ§μ ν΄ μλ²μκ² μμ²νλ€.
νκΈ°
Accept = "Accept" ":" #( media-range [ accept-params ] )
media-range = ( "*/*" | (type "/" subtype ) ) *( ";" parameter )
accept-params = ";" "q" "=" qvalue *( accept-extension )
accept-extension = ";" token [ "=" ( token | quoted-string ) ]
- # : μ΅μ 2κ° μ΄μμ μμ
- ; : ꡬλΆμλ‘ μμ ν ν°μ λν μΆκ°μ μΈ μ 보λ₯Ό μ리기 μν΄ μ¬μ©νλ€.
- | : 'λλ'μ μλ―Έλ‘ μ¬μ©νλ€.
μ
Accept: audio/*; q=0.2; audio/basic
- q : νμ§λ±κΈ. Quality factor. μλμ μ€μμ±(κ°μ€μΉ)λ₯Ό νμνλ€. μ΅μκ° 0λΆν° μ΅λκ° 1κΉμ§ λ²μμ μ€μλ‘ μ ννν μ μλ€. μνλ νμ§μ λν μλμ μΈ μ§ μ νλ₯Ό νννλ€. νμ§λ±κΈμ ꡬ체μ μΈ ννμΌμλ‘ λμ μ°μ μμλ₯Ό κ°λλ€. λ³λ νκΈ°κ° μμΌλ©΄ λν΄νΈ 1λ‘ ν΄μνλ€. 0μΌλ‘ νννλ©΄ ν΄λΌμ΄μΈνΈμμ μμ©ν μ μλ νμ μ λνλΈλ€.
> κΈ°λ³Έμ μΈ μ€λμ€ νμ ("audio/basic")μ μ νΈνμ§λ§ 80%μ΄νλ‘ μ§μ΄ λ¨μ΄μ§λ©΄ 'audio/*'μ²λΌ λ€λ₯Έ μ€λμ€ νμ μΌλ‘ μ μ‘ν΄ λ¬λΌ.
Accept-Charset
ν΄λΌμ΄μΈνΈκ° μλ΅ λ©μμ§ λ΄ μν°ν°λ‘ μμ© κ°λ₯ν λ¬Έμμ μ λνλΈλ€. νκΈμ΄λ νμλ₯Ό νμν λ μ¬μ©νλ 'UTF-8'μ΄λ 'EUC-KR', 'MS949', 'UTF-16'κ³Ό κ°μ λ¬Έμμ μ λνλΈλ€.
Accept-Encoding
μλ΅ λ©μμ§μμ μ¬μ©ν μ μλ νλ¬Έμ΄λ μμΆλ°©μμ λͺ μν λ μ¬μ©νλ€.
Accept-Language
Acceptμ μ μ¬νκ² μμ² λ©μμ§μ λν΄ μλ΅ λ©μμ§κ° μ¬μ©ν μ μλ μΈμ΄λ₯Ό μ νν΄ μ€ κ²μ μμ²νλ€.
Authorization
μ¬μ©μ μΈμ¦μ νμλ‘ νλ κ²½μ°, μ¬μ©μμ μ΄λ¦κ³Ό μνΈλ₯Ό μ λ¬νκΈ° μνμ¬ μ¬μ©νλ€.
From
λ¬Έμλ₯Ό μμ²ν μ¬μ©μμ e-mail μ£Όμλ₯Ό μ λ¬νλ€.
If-Modified-Since
μμ²ν URI 리μμ€κ° νΉμ μΌμ μ΄ν λ³κ²½λ κ²½μ°, ν΄λΉ 리μμ€λ₯Ό λ€μ μ μ‘ν΄ λ¬λΌκ³ μμ²ν λ μ¬μ©νλ€.
Range
https://www.geeksforgeeks.org/http-headers-range/
μλ²μμ λ¬Έμλ₯Ό λλ μ λΆλΆλ³λ‘ κ°μ Έμ€λλ‘ λ²μλ₯Ό μ§μ ν¨.
Referer
λ§ν¬λ‘ μ 곡νλ λ¬Έμμ URIλ₯Ό μ μ‘νλ€.
User-Agent
https://www.geeksforgeeks.org/http-headers-user-agent/?ref=rp
ν΄λΌμ΄μΈνΈ μννΈμ¨μ΄μ μ 보λ₯Ό μ λ¬νλ€. μ¬μ©μ μμ΄μ νΈλ ν΄λΌμ΄μΈνΈμμ μ¬μ©νλ μ ν리μΌμ΄μ μ λ§νλ€.
μ΄ μ 보λ λ€μν μΉ λΈλΌμ°μ λ° λ€μν μ΄μ체μ μ λ€μν μΉμ¬μ΄νΈλ€μ μ 곡νκΈ° μν΄ μ¬μ©λλ€.
μλ΅ ν€λ Response-Header
μλ²κ° μμ² λ©μμ§λ₯Ό λ°κ³ κ·Έμ λν μλ΅ λ©μμ§ λ΄ μν λΌμΈλ§μΌλ‘λ μ λ¬νκΈ° μ΄λ €μ΄ μ 보λ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬νκΈ° μν΄ μ¬μ©νλ€.
response-header = Age
| Location
| Retry-After
| Server
| Warning
| WWW-Authenticate
Age
νλ‘μ μλ²μμ μ¬μ©νλ€. μλ³Έ μλ²κ° ν΄λΌμ΄μΈνΈμ μ λ¬ν λ°μ΄ν°λ₯Ό λ§λ μκ°μ ν΄λΌμ΄μΈνΈμκ² μ λ¬ν λ μ¬μ©νλ€. μ΄ λ¨μλ‘ νμλλ€.
Location
리λ€μ΄λ νΈλ λ¬Έμμ μ λ URIλ₯Ό μλ €μ€λ€.
Retry-After
μλ΅ μν μ½λ 503κ³Ό ν¨κ» μ¬μ©νλ€. "μΌλ§ μκ°μ΄ κ²½κ³Όλ μ΄ν λ°μ΄ν° μμ²μ λ€μ μλνλΌ" μλ―Έλ₯Ό κ°μ§λ€.
Server
ν΄λΌμ΄μΈνΈμ μμ²μ λν΄, μλ³Έ μλ²μ μν΄ μ¬μ©λκ³ μλ μννΈμ¨μ΄λ₯Ό λνλΈλ€.
WWW-Authenticate
μΈμ¦λ°©λ²μ μ μνλ€. μνμ½λ 401μΌ λ, νμν μΈμ¦μ¬νμ μλ΅ λ©μμ§λ‘ μ λ¬νλ€. μλ²κ° μμ© κ°λ₯ν μ¬μ©μ μΈμ¦μ ν΄λΌμ΄μΈνΈμ μꡬν λ μ¬μ©νλ€.
μν°ν° ν€λ Entity Header
μλ²λ HTTP λ²μ , μμ² λ©μλλ μλ΅ μν μ½λ λ±μ μν΄ μ νλ°μ§ μλλ€λ©΄, μμ² λ©μμ§λ μλ΅ λ©μμ§μ ν¨κ» μν°ν°λ₯Ό μ μ‘ν μ μλ€. μν°ν°λ μν°ν° ν€λ νλμ μν°ν° λ³Έλ¬Έ(λλ λ©μμ§ λ³Έλ¬Έ)μΌλ‘ ꡬμ±λμ΄ μλ€. κ²½μ°μ λ°λΌ μ΄λ€ μλ΅ λ©μμ§λ μν°ν° ν€λλ§μΌλ‘ ꡬμ±λ μ μλ€.
μν°ν° ν€λ νλλ μν°ν° λ³Έλ¬Έμ λν μ 보λ₯Ό μ μνλ€.
entity-header = Allow
| Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
| Content-Range
| Content-Type
| ETag
| Expires
| Last-Modified
| extension-header
Allow
Request-URIκ° μ§μ κ°λ₯ν λ©μλ λͺ©λ‘μ νμνλ€. μ§μ κ°λ₯ν λ©μλλ€μ μ 보λ₯Ό ν΄λΌμ΄μΈνΈμ μ리기 μν΄ μ¬μ©νλ€.
Allow: GET, HAED, PUT
Content-Encoding
μν°ν° λ³Έλ¬Έμ΄ μμΆλμκ±°λ μνΈνλμ΄μμ κ²½μ°, κ·Έ μΈμ½λ© νμμ μμ μΈ‘μ μ λ¬νκΈ° μν΄ μ¬μ©νλ€. λ§μ½ μν°ν°μ 볡μμ μμΆ μΈμ½λ©μ μ μ©νμΌλ©΄, μΈμ½λ© λ΄μ©μ μ μ©λ μμμ λ°λΌ μ΄κ±°νλ€.
Content-Type
μν°ν° λ³Έλ¬Έμ λ―Έλμ΄ νμ μ νμνκ±°λ λλ μν°ν° λ³Έλ¬Έμ λ°μ‘νκΈ° μ μ μμΌλ‘ λ°μ‘ν λ―Έλμ΄ νμ μ νμνλ€.
Content-Length
μν°ν° λ³Έλ¬Έμ ν¬κΈ°λ₯Ό λ°μ΄νΈλ‘ νκΈ°νλ€.
Content-Location
λ©μμ§μ ν¬ν¨λ μν°ν°κ° μ΄λ 리μμ€μ μμΉνμλμ§μ λν μ 보λ₯Ό μ 곡νλ€.
ETag
Entity-tagμ μ½μ. μΉμλ²μ μ¬μ©νλ 리μμ€ λ²μ μ μλ €μ€λ€. κ°μ URLμ΄λΌ νλλΌλ 리μμ€κ° λ³κ²½λμλ€λ©΄, Etagλ‘ λ³κ²½λ λ²μ μ μλ €μ€λ€.
Expires
μΈμ μ¬λΌμ§ μ§ μκ°, λ μ§λ₯Ό μ μνλ€.
μν°ν° λ³Έλ¬Έ Entitiy Body (λλ λ©μμ§ λ³Έλ¬Έ)
μμ μλ μκ³ , μμ μλ μλ€. μμ² λλ μλ΅ λ©μμ§ λ΄ λ©μμ§ λ³Έλ¬Έμ μ‘΄μ¬ μ¬λΆλ λ©μμ§ ν€λμ Content-Length λλ Transfer-Encoding ν€λ νλλ‘ νμΈ κ°λ₯νλ€. Content-Length λλ Transfer-Encoding ν€λ νλκ° μλ€λ©΄, μμ² λλ μλ΅κ³Ό κ΄λ ¨λ μν°ν° λ³Έλ¬Έμ μ μ‘νλ€λ κ²μ μλ―Ένλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java][Thread] Happens-before relationship (0) | 2023.03.03 |
---|---|
[Kotlin] Obejctλ‘ μ μΈν Singleton κ°μ²΄μ μμ±μ Lazy νκ°? (1) | 2023.03.03 |
[Android][Java][μνΈν] MessageDigest (0) | 2023.02.28 |
[Android][View] decor view (0) | 2023.02.16 |
[Android][Lint] Missing baselineAligned attribute (0) | 2023.02.14 |