(μμ μ μλνλ€λ κ²μ κΉ¨λ¬μκΈ° λλ¬Έμ μ λ°μ΄νΈλ¨, κ·Έλμ μλ λ¬Έμ μ λλ₯Ό ν¬κΈ°νκ² λ§λ λ¬Έμ μ νΌλμ€λ¬μν¨)
Werkzeug (νμ¬ git master)λ₯Ό μ¬μ©νλ μ±μ μ²ν¬ μμ²μνκ³ μμ΅λλ€. get_input_streamμ LimitedStream(wsgi.input, min(content_length, max_content_length))
νΈμΆν©λλ€. μ²ν¬ μΈμ½λ©μ μ¬μ©νλ κ²½μ° min(content_length, max_content_length)
λ νμ Noneμ΄λ©λλ€.
μ§νμ μν΄ LimitedStream(stream, content_length or max_content_length)
μ¬μ©ν΄ 보μμ§λ§ κ²°κ΅ ClientDisconnected
μμΈκ° λ°μνμ΅λλ€. ν΄λΌμ΄μΈνΈ μ°κ²° ν΄μ μ μ²ν¬ μμ²μ μ°¨μ΄λ₯Ό ꡬλΆν μ μκΈ° λλ¬Έμ
λλ€. , wsgi.input.read()
λ λ κ²½μ° λͺ¨λ κΈΈμ΄κ° 0μΈ λ¬Έμμ΄μ λ°νν©λλ€.
μ΄κ²μ min
μ λ¨μν λ²κ·Έ μ΄μμ
λλ€. κ·Έκ²μ κ³ μΉ ν, λ¬Έμ λ μ½μ κ²μ΄ max_content_length
λ―Έλ§μ΄λ©΄ Werkzeug λΈλ‘μΌλ‘ wsgi.input.read(max_content_length)
λ₯Ό μμν μννλ€λ κ²μ
λλ€. λλ μ 체 λ©μμ§λ₯Ό ꡬ문 λΆμνκ³ λ²νΌλ§νμ¬ μ²ν¬λ₯Ό μ§μνλ Gunicornμ μ¬μ©νλ©΄ κΈΈμ΄κ° max_content_length
λ―Έλ§μΌλ‘ λμ€λ―λ‘ LimitedStream
λ ν΄λΌμ΄μΈνΈκ° μ°κ²°μ΄ λμ΄μ§ κ²μΌλ‘ κ°μ£Όν©λλ€.
λλ μ₯κ³ μμ μ°λ¦¬κ° μ΄μν μΌμνμ§ μλμ§ νμΈνκΈ° μν΄ μ΄κ²μ ν μ€νΈνμ΅λλ€. λΉ μ€νΈλ¦Όλ 보μ λλ€.
κ°μ₯ κ°λ¨ν λ°©λ²μ environ['wsgi.input_terminated']
λ₯Ό μ€μ νλ λ―Έλ€μ¨μ΄λ₯Ό μ 곡νκ³ μ²ν¬ μ μ‘μ μ§μνλ μλ²λ₯Ό μ¬μ©ν λ μ¬λλ€μκ²μ΄λ₯Ό μ¬μ©νλλ‘ μ§μνλ κ²μ
λλ€.
νμ¬ input_terminated
μ§μνλ wsgiλ 무μμ
λκΉ? λ°μ΄ν°κ° λΉμ΄μλ μ΄μ λ₯Ό λλ²κΉ
νλ λ° ν루 μ’
μΌ λ μ½λ© ν ν μ€νΈλ¦Όμ΄ λΉμ΄μλ μ΄μ λ μ²ν¬ μ€νΈλ¦Ό μΈμ½λ©μΌλ‘ μΈν κ²μμ κΉ¨λ¬μ ν μ΄μ μ΄κ²μ μ§μνλ κ²μ μ°Ύμ μ μμ΅λλ€.
environ.get('wsgi.input_terminated')
λ₯Ό νμΈνλ κ² μΈμλ environ.get('HTTP_TRANSFER_ENCODING') == 'chunked'
λ νμΈν΄μΌ νλ©° μ΄ κ²½μ° λνλμ§ μμ μ€νΈλ¦Όλ μ§μ λ°νν΄μΌ ν©λκΉ? λΉ μ€νΈλ¦Όμ λ°ννλ κ°λ¨ν curl -H 'Transfer-Encoding: chunked' ...
μ κ°μ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
4.4.2
Transfer-Encoding ν€λ νλ (μΉμ 14.41)κ° μκ³
"identity"μ΄μΈμ κ°μ΄μλ κ²½μ° μ μ‘ κΈΈμ΄λ
"μ²ν¬" μ μ‘ μ½λ©(μΉμ 3.6)μ μ¬μ©νμ¬ μ μλ©λλ€.
μ°κ²°μ λ«μ λ©μμ§κ° μ’ λ£λμ§ μλ ν.
4.4.3
Content-Length ν€λ νλ(μΉμ 14.13)κ° μλ κ²½μ° ν΄λΉ
OCTETμ 10μ§μ κ°μ μν°ν° κΈΈμ΄μ
μ μ‘ κΈΈμ΄. Content-Length ν€λ νλλ μ μ‘λμ΄μλ μ λ©λλ€(MUST NOT).
μ΄ λ κΈΈμ΄κ° λ€λ₯Έ κ²½μ°(μ¦, Transfer-Encoding
ν€λ νλκ° μμ). λ κ°μ§ λͺ¨λλ‘ λ©μμ§κ° μμ λλ κ²½μ°
Transfer-Encoding ν€λ νλ λ° Content-Length ν€λ νλ,
νμλ 무μλμ΄μΌ ν©λλ€.
... Transfer-Encoding
μ chunked
Content-Length
ν€λλ₯Ό 무μνλλ‘ μꡬνλ―λ‘μ΄λ₯Ό κΈ°λ°μΌλ‘ μ€νΈλ¦Ό μ²λ¦¬λ₯Ό μνν΄μλ μλ©λλ€. νμ¬ wsgi.input_terminated
κ° μ€μ λμ΄ μμ§ μμ κ²½μ°μ
λλ€.
10 λ°μ΄νΈ JSON νμ΄λ‘λμ κ°μ μ μμ μΈ μ²ν¬ μΈμ½λ©μ΄ μλνλ €λ©΄ wsgi.input_terminated
λ₯Ό μ€μ ν΄μΌν©λκΉ?
κ°μ₯ μ μ©ν λκΈ
νμ¬
input_terminated
μ§μνλ wsgiλ 무μμ λκΉ? λ°μ΄ν°κ° λΉμ΄μλ μ΄μ λ₯Ό λλ²κΉ νλ λ° ν루 μ’ μΌ λ μ½λ© ν ν μ€νΈλ¦Όμ΄ λΉμ΄μλ μ΄μ λ μ²ν¬ μ€νΈλ¦Ό μΈμ½λ©μΌλ‘ μΈν κ²μμ κΉ¨λ¬μ ν μ΄μ μ΄κ²μ μ§μνλ κ²μ μ°Ύμ μ μμ΅λλ€.