νΉν λ΄λΆμ μΌλ‘ Werkzeugλ "Transfer-Encoding" λλ "X-PoweredBy" μ νμ ν€λλ₯Ό κ°κ° "HTTP_TRANSFER_ENCODING" λ° "X_POWERED_BY"λ‘ λ³νν©λλ€. κ·Έλ¬λ λ κ°μ ν€λ "App-Header-1" λ° "App_Header_1"μ΄ λͺ¨λ μμ²μ μλ κ²½μ°(λλ "App_Header_1"λ§) λ λ€ λ΄λΆμ μΌλ‘ λμΌν λ°©μμΌλ‘ μ μ₯λλ©° Werkzeugλ λμ ꡬλΆνμ§ μμ΅λλ€. . μ΄ λμμ RFC2616 HTTP 1.1 μ¬μμ μ€μνμ§ μμ΅λλ€. μ¬κΈ°μ ν€λ μ΄λ¦μ μ μ΄ λλ κ΅¬λΆ λ¬Έμκ° μλ μ ν¨ν ν ν°μΌ μ μμ΅λλ€. μ΄κ²μ μμ²μ΄ "App_Header_1"κ³Ό ν¨κ» λ€μ΄μ¨ λ€μ "HTTP_APP_HEADER_1"λ‘ λ³νλλ κ²μ²λΌ λ§μ λ¬Έμ κ° μμ΅λλ€. μ΄μ Flaskμ κ°μ νλ μμν¬λ μ΄λ₯Ό λμΌνμ§ μμ "App-Header-1"λ‘ ν΄μνκ³ ν΄λΉ κ°μ μ λ¬ν©λλ€. μ¬λ°λ₯Έ λμμ μμ‘΄νλ μμ€ν μμλ μ μμ μΈ λΉκ΅ μ λ΅μμ "App_Header_1" != "App-Header-1"λ‘ μ€ν¨ν©λλ€.
μ΄ λμμ WSGI μ¬μ μμ²΄λ‘ μΈν΄ λ°μνλ©° Werkzeugκ° WSGI μ¬μμ κ³μ μ€μνλ©΄μ λ ν€λλ₯Ό ꡬλΆνλ κ²μ λΆκ°λ₯ν©λλ€. μ΄κ²μ΄ μ€μ λ‘ λ¬Έμ κ° λ μν©μ λν΄ μμ§ λͺ»ν©λλ€.
κ·Έλ°λ° RFC 2616μ λ μ΄μ μ¬μ©λμ§ μμ§λ§ μ΅μ RFCλ μ΄μ¨λ μ΄μ κ΄λ ¨νμ¬ μ무 κ²λ λ³κ²½νμ§ μμ΅λλ€.
λν Werkzeugλ ꡬ문 μμ€μμ HTTP μμ² λλ μλ΅μ ꡬ문 λΆμνκ±°λ μμ±νλ λ° μ± μμ΄ μμ΅λλ€. μ΄κ²μ μ νν WSGI μλ²μ μν΄ μνλ©λλ€. Werkzeugμλ λ΄μ₯ μλ²κ° μμ§λ§ μ΄λ νμ€ λΌμ΄λΈλ¬λ¦¬μ WSGI μλ²λ§ νμ₯ν©λλ€.
PEP 3333μ μ°Έμ‘°νλ κ²½μ° μ΄ λμμ WSGI μ¬μμΌλ‘ μΈν΄ λ°μνμ§ μμ΅λλ€.
PEP 3333μ λ€μκ³Ό κ°μ΄ λ§ν©λλ€.
HTTP_ λ³μ
ν΄λΌμ΄μΈνΈ μ 곡 HTTP μμ² ν€λμ ν΄λΉνλ λ³μ(μ¦, μ΄λ¦μ΄ "HTTP_"λ‘ μμνλ λ³μ). μ΄λ¬ν λ³μμ μ‘΄μ¬ λλ λΆμ¬λ μμ²μ μ μ ν HTTP ν€λμ μ‘΄μ¬ λλ λΆμ¬μ μΌμΉν΄μΌ ν©λλ€.
μ¬μμλ λ°μ€μ λ€λ₯΄κ² μ²λ¦¬νλ κ²μ λν λ΄μ©μ΄ μμ΅λλ€. μ¬μ€, "App_H" λλ "App-H"κ° μλμ§ μ¬λΆμ κ°μ΄ μ΄λ€ ν€λκ° μλμ§ λλ μλμ§ μ μ μκΈ° λλ¬Έμ PEP 3333μ μ€μνμ§ μμ΅λλ€.
WSGIλ CGIμ Python μ μ© ν¬νΈμ λλ€. PEP 0333μ "CGI νκ²½ λ³μ"μ μ μμ λν CGI μ¬μμ μ°Έμ‘°νλ©° λ€μκ³Ό κ°μ΄ λͺ μλμ΄ μμ΅λλ€.
The HTTP header field name is converted to upper case, has all occurrences of "-" replaced with "_" and has `HTTP_' prepended to give the meta-variable name.
https://tools.ietf.org/html/rfc3875#section -4.1.18 μ°Έμ‘°
Werkzeugλ λλΆλΆ μμ HTTP μμ²μ ꡬ문 λΆμνμ§ μκ³ WSGI νκ²½μ μμ±νμ§ μκΈ° λλ¬Έμ μ΄ λͺ¨λ κ²μ κ΄λ ¨μ΄ μμ΅λλ€. WSGI νκ²½μ ꡬ문 λΆμν©λλ€. μ΄ νΉμ ꡬνμ λν΄ μ΄ λ¬Έμ λ₯Ό μ κΈ°νλ μ΄μ λ₯Ό λͺ¨λ₯΄κ² μ΅λλ€. λ©μ μ λ₯Ό μμ§ λ§μΈμ.
κΈ°λ³Έμ μΌλ‘ μ¬κΈ°μλ Werkzeugκ° κ΅¬ννλ €κ³ νλ WSGIμ μν΄ μμλ CGIμ λ§μ μ μ°μ΄ μμ΅λλ€.
λλ μ λ§λ‘ μΈμμ μμνλ €λ κ²μ΄ μλλλ€. κ·Έλ¬λ λ€λ₯Έ ν€λλ₯Ό νν°λ§νμ§ μκ³ λ°μ€μ΄ ν¬ν¨λ ν€λμ λ―Όκ°ν/μ ν리μΌμ΄μ νΉμ μ 보λ₯Ό μ λ¬νλ "λ κ±°μ" μ ν리μΌμ΄μ κ²μ΄νΈμ¨μ΄ λ€μ μλ μΉ μλ²μ κ²½μ° νΉν 보μ κ΄λ ¨ λ¬Έμ κ° μμ΅λλ€(ꡬ체μ μΈ μκ° μμ΅λλ€. μ€μ λ‘ μ€μ λ‘ λ¬Έμ μ΄λ©° μ΄κΈ° μ견μΌλ‘ κΈ°κ°νμ΅λλ€). CGIλ 20λ μ΄ λμμΌλ―λ‘ WSGI λ° HTTP μ¬μμ΄ μ°μ ν΄μΌ ν©λλ€.
μμ ꡬ문 λΆμμ κ²½μ°:
https://github.com/pallets/werkzeug/blob/03faf0569861e9d8c8c94785ad5560f735ba72da/werkzeug/serving.py#L123
(ꡬ체μ μΈ μκ° μμ΅λλ€. μ¦, μ΄κ²μ μ€μ λ‘ μ€μ λ¬Έμ μ΄λ©° μ΄κΈ° μ견μμ κΈ°κ°νμ΅λλ€)
κ·Έλ° λ€μ λ΄κ° λ§ν μμλ κ²μ κ·Έλ° μλ²κ° μλ€λ κ²μ΄ μ κ°μ λλ€. Werkzeugλ κ·Έκ²μ λν΄ μ무 κ²λ ν μ μμ΅λλ€. λΉμ μ΄ λ³΄μ¬μ€ μ€ λν«μ μ νν λ΄κ° "λλΆλΆ"μ΄λΌκ³ λ§ν μ΄μ μμ΅λλ€. Werkzeugμλ κ°λ°μ μ¬μ©ν μ μλ κ°λ¨ν ν μ€νΈ μλ²λ ν¬ν¨λμ΄ μμ΅λλ€(μ: Gunicorn + Nginx/Apacheλ₯Ό μ€μ νμ§ μμλ λ¨). κ·Έλ¬λ ν΄λΉ μλ²λ₯Ό μΈν°λ·μ λ ΈμΆνλ κ²½μ° μΈκΈν μ μ¬μ λ¬Έμ λ (보μ) λ¬Έμ μ€ κ°μ₯ μμ΅λλ€.
WSGIλ μ΅λν CGIμ νΈνλλλ‘ μ€κ³λμμ΅λλ€. WSGIλ CGIλ₯Ό μ¬μ μνκ±°λ λ체νμ§ μμ΅λλ€. WSGIλ _is_ CGIμ
λλ€. WSGI μμ© νλ‘κ·Έλ¨μ μ ν¨ν CGI μμ© νλ‘κ·Έλ¨μΌλ‘ λ§λλ λ° κ΄λ ¨λ μμ
μ κ±°μ μμ΅λλ€. os.environ
Python CGI μ€ν¬λ¦½νΈλ λλΆλΆ λλ±ν WSGI νκ²½κ³Ό μ μ¬ν©λλ€. μ΄κ²μ λν΄ λ¬΄μμ΄λ λ³κ²½ν λ κ³ λ €ν΄μΌ ν λ§μ μ μ°μ΄ μμ΅λλ€. νλ‘μ νΈλ‘μμ Werkzeugλ μ΄μ λν΄ λ°μΈκΆμ΄ μμΌλ©° νΉν μ λ κ·Έλ μ§ μμ΅λλ€.
λ€μ λ§νμ§λ§, μ΄ νλ‘μ νΈμ μ΄ λ¬Έμ λ 무μλ―Έν©λλ€. Werkzeugλ§μ΄ μ΄λ¬ν νλμ νλ κ²μ μλλλ€. λ§μ§λ§μΌλ‘ nginxλ μ 체 λͺ¨νΈμ± λ¬Έμ λ‘ μΈν΄ κΈ°λ³Έμ μΌλ‘ λ°μ€μ΄ μλ HTTP ν€λλ₯Ό μ°¨λ¨ν©λλ€. λλΆλΆμ λ€λ₯Έ λꡬλ μλ§λ κ·Έκ²λ€μ ν©μΉ κ²μ λλ€. λλΆλΆμ λκ΅¬κ° λμμ λ°μ€μ μ°¨μ΄λ₯Ό ꡬλΆν μ μλ€λ©΄ νμ€μ νλκ° μλ€κ³ ν΄λ λ μ΄μ μ€μνμ§ μμ΅λλ€. λͺ¨λκ° ν¨κ» νλ μ΄ν΄μΌ νλ©°, κ²°κ΅ λ°μ€μ΄ μλ ν€λλ₯Ό λ΄λ³΄λ΄λ λκ΅¬κ° μ± μμ΄ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
PEP 3333μ μ°Έμ‘°νλ κ²½μ° μ΄ λμμ WSGI μ¬μμΌλ‘ μΈν΄ λ°μνμ§ μμ΅λλ€.
PEP 3333μ λ€μκ³Ό κ°μ΄ λ§ν©λλ€.
HTTP_ λ³μ
ν΄λΌμ΄μΈνΈ μ 곡 HTTP μμ² ν€λμ ν΄λΉνλ λ³μ(μ¦, μ΄λ¦μ΄ "HTTP_"λ‘ μμνλ λ³μ). μ΄λ¬ν λ³μμ μ‘΄μ¬ λλ λΆμ¬λ μμ²μ μ μ ν HTTP ν€λμ μ‘΄μ¬ λλ λΆμ¬μ μΌμΉν΄μΌ ν©λλ€.
μ¬μμλ λ°μ€μ λ€λ₯΄κ² μ²λ¦¬νλ κ²μ λν λ΄μ©μ΄ μμ΅λλ€. μ¬μ€, "App_H" λλ "App-H"κ° μλμ§ μ¬λΆμ κ°μ΄ μ΄λ€ ν€λκ° μλμ§ λλ μλμ§ μ μ μκΈ° λλ¬Έμ PEP 3333μ μ€μνμ§ μμ΅λλ€.