村岡です。

HTTPリクエストのパーサーによって挙動が変わっているように見うけられるため、(uwsgiやgunicornでのみNG)
RFCどおりのValidなHTTPリクエストかどうかという質問でした。

一般的にサーバは不正確なリクエストに対しても可能であれば動作するように寛容な実装がされているので
もしかしたらそこの谷間にはまったパターンかなと推測したまでです。

正しい構造になっているならばパケットキャプチャは不要です。



2018年1月15日 15:57 3644 <satou...@gmail.com>:
>
> 岡村様
>
> HTTPリクエストは正しい構造になっています。
> 実は、nginxからdjangoにリバースプロキシすることでrequest.bodyがとれることを
> 確認しております。(当然ですが、javaプログラムは変更しておりません。)
> とはいえ、根本的な解決にはなっておりませんので、可能であれば原因追及に
> 努めたいと考えております。
>
> パケットキャプチャはtcpdumpで宜しいでしょうか。
> オプションの指定がございましたら、ご教示頂けないでしょうか
>
>
> 2018年1月12日金曜日 18時14分08秒 UTC+9 MURAOKA Yusuke:
>>
>> 村岡です。
>>
>> 基本的な確認なのですが、そのJava(Jersey)からのHTTPリクエストは正しい構造になっていますでしょうか?
>> リクエストヘッダやボディの構成、TCPレベルでのパケットの分割具合など。
>>
>>
>> 現象としては再現されているようなので、もし可能ならそのJavaのプログラムからuWSGIへダミーのデータを送信して現象が再現したパケットキャプチャを共有していただけたらもう少し具体的なアドバイスができるかもしれません。
>>
>> 2018年1月12日(金) 18:02 3644 <sato...@gmail.com>:
>>>
>>>
>>> 岡野様
>>>
>>> gunicornで確認いたしました。
>>>
>>> 結論から申せば、
>>> ・pythonからのリクエストはリクエストの受付がされ、printでボディを出力した際に、期待した値が出力されました。
>>> ・javaからのリクエストはリクエストの受付自体が認識されませんでした。
>>>
>>> ご参考(gunicorn)
>>> pythonからのリクエストでは、下記のprint(env['wsgi.input'].read())で期待したbodyが取得できました。
>>> 参考HP:http://c-bata.link/webframework-in-python/wsgi.html
>>>
>>> def application(env, start_response):
>>>
>>>     print(env)
>>>     print(env['wsgi.input'].read())
>>>
>>>     start_response('200 OK', [('Content-type', 'text/plain;
>>> charset=utf-8')])
>>>     return [b'Hello World']
>>>
>>> 起動パラメータ
>>> gunicorn -w 1 -b 0.0.0.0:8000 hello:application
>>>
>>>
>>> 2018年1月9日火曜日 18時23分41秒 UTC+9 3644:
>>>>
>>>>
>>>>
>>>> 岡野様
>>>>
>>>> ご教示ありがとうございます。
>>>>
>>>> リクエスト内容はREST(XML)でした。
>>>> gunicornで環境構築してみたいと思います。
>>>>
>>>> 当方でも継続して調査しておりましたが、
>>>> javaからの要求→NG
>>>> pythonからの要求→OK
>>>> ブラウザからの要求→OK
>>>> chrome app (Advanced Rest Client)→OK
>>>> という状態であり、現状Java(jersey)からの要求のみ失敗している状態です。
>>>>
>>>> gunicornで検証しましたら、再度報告させていただきます。
>>>>
>>>>
>>>> 2018年1月4日木曜日 22時11分52秒 UTC+9 tokibito:
>>>>>
>>>>> 岡野です。
>>>>>
>>>>> 該当の現象は確認できませんでしたが、uwsgiを使った際にそのような動きになることがあるという話を聞いたことがあります。
>>>>> リクエスト内容はREST(XML)?でしょうか。
>>>>> 可能であればuwsgi以外のアプリケーションサーバー(gunicornなど)も試してみてください。
>>>>>
>>>>>
>>>>> 2017年12月26日火曜日 15時11分18秒 UTC+9 3644:
>>>>>>
>>>>>>
>>>>>> 初めてご質問させていただきます。
>>>>>>
>>>>>> requestを受信し、views.pyの中でrequest.bodyするとbodyがb''となってしまいます。
>>>>>>
>>>>>> tcpdumpでは、bodyに<?xml version.....と適切に入っており、Content-Lengthに1377
>>>>>> と設定されています。
>>>>>> そのrequestを、views.pyにてrequest.bodyで取得すると、前述のとおり、
>>>>>> b''となり、request.METAのCONTENT_LENGTH : ''となっています。
>>>>>>
>>>>>> 確認すべき項目、設定などがありましたらご教示ください。
>>>>>>
>>>>>> バージョン
>>>>>> python  = 3.6.2
>>>>>> Django = 2.0
>>>>>> uWsgi  = 2.0.15
>>>>>>
>>>>>>
>>> --
>>> --
>>> ----------------- http://djangoproject.jp/ -----------------
>>> You received this message because you are subscribed to the Google Groups
>>> "django-ja" group.
>>> To post to this group, send email to djan...@googlegroups.com
>>> To unsubscribe from this group, send email to
>>> django-ja-...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/django-ja
>>> ---
>>> このメールは Google グループのグループ「django-ja」に登録しているユーザーに送られています。
>>> このグループから退会し、グループからのメールの配信を停止するには django-ja+...@googlegroups.com
>>> にメールを送信してください。
>>> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>
> --
> --
> ----------------- http://djangoproject.jp/ -----------------
> You received this message because you are subscribed to the Google Groups
> "django-ja" group.
> To post to this group, send email to django-ja@googlegroups.com
> To unsubscribe from this group, send email to
> django-ja-unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/django-ja
> ---
> このメールは Google グループのグループ「django-ja」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには django-ja+unsubscr...@googlegroups.com
> にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

-- 
-- 
-----------------                       http://djangoproject.jp/                
         -----------------
You received this message because you are subscribed to the Google Groups 
"django-ja" group.
To post to this group, send email to django-ja@googlegroups.com
To unsubscribe from this group, send email to 
django-ja-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/django-ja
--- 
このメールは Google グループのグループ「django-ja」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには django-ja+unsubscr...@googlegroups.com 
にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

メールによる返信