問題タブ [http-status-code-100]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - Expect 使用時の失敗の処理: 100-Continue with HttpClient
REST API を呼び出すクライアントの動作を最適化することに関心があります。この API では、特定の POST 操作でIf-None-Match: *
ヘッダーを含めることができます。これにより、アップロードされているアイテムがシステムに既に存在する場合、サーバーは HTTP 412 応答を報告します。とともに使用すると、 RFC 2616 §8.2.3で説明されているように、サーバーは 100 応答を送信する代わりExpect: 100-continue
に412で応答します。クライアントでこの状態を検出し、この場合はリクエストの本文を送信しないようにしたいと思います。
を直接操作する場合HttpWebRequest
、これを実装するのはかなり簡単です。GetRequestStream
(または)を呼び出した後GetRequestStreamAsync
、結果の にデータを書き込む前Stream
に、コードでプロパティをチェックする必要がありHaveResponse
ます。値が の場合true
、リクエスト ストリームを閉じて、呼び出しに進みますGetResponseAsync
。
HttpClient
現在、直接作業するのではなく、使用するように移行する作業を行っていHttpWebRequest
ます (複数のプラットフォームでのサポートを改善するため)。現在StreamContent
、リクエストの本文を表すために を使用しており、サーバーが 100 または 412 レスポンスを送信したかどうかに関係なく、ストリームのコンテンツが送信されることを観察しています。の代わりにHttpClient
andを使用して、上記と同様の最適化を実行するにはどうすればよいですか?HttpRequestMessage
HttpWebRequest
scala - curl、play、expect 100 continue ヘッダー
POST リクエスト (アップロード用) を除いて、play で作成された Web サービスを検討してください。これを中サイズの画像(〜75K)でテストすると、奇妙な動作が見つかりました。まあ、コードは長い説明よりも明確に話すので、次のようになります。
ご覧のとおり、curl は header を追加することを決定しましたContent-Length: 27442
が、実際のサイズは 75211 であり、プレイ中、ボディのサイズは 27442 しかありませんでした。これは意図した動作ではありません。libwww-perlのツールcurl
を使用する代わりに、別のツールを試しました。POST
このリクエストは成功しました。そのため、ツールの違いにもっと注意を払うようになりました。まず、Content-Length
ヘッダーは正しかったのですがExpect
、2 回目の試行でヘッダーが欠落していました。どちらの方法でもリクエストが成功することを望みます。request.headers
そのため、( 経由で)プレイで見られるヘッダーの完全なリストは次のとおりです。
カールの場合:
libwww-perl POST の場合:
したがって、私の現在の考えは次のとおりです。より単純な perl ツールは単一のリクエストを使用しましたが、これは悪い習慣です。より良い方法は、確認を待つこと100 continue
です (特に、数 GB のデータをアップロードする場合は...)。不正なリクエスト エラー コードcurl
を受信するまでデータを送信し続けます。200 OK
では、なぜ play200 OK
は次のチャンクを待たずに応答を送信するのでしょうか? curlが間違って指定しているためContent-Length
ですか?まったく間違っている場合... (おそらく、これは現在のチャンクのサイズを指しますか?)。では、問題はどこにあるのでしょうか。curl または play webapp で? どうすれば修正できますか?
http - Amazon S3 が 100 を返さない
S3にファイルをアップロードしたい。httpconnnection(s3.amazonaws.com) を作成し、head={'Date': 'Fri, 18 Jul 2014 03:24:08 +0000', 'Host': 'xx-bucket.s3.amazonaws' を送信します。 .com', 'Content-Length': 32, 'Authorization': 'AWS AKIAI2V3MxxxOOKYAAA:JrjeT5rTxCl752tMWEZ0knEE3Zw=', 'Expect': '100-continue'}.
次に、s3がステータス100を返すのを待っています。悲しいことに、s3 は戻りません。この状況は 1 週間前には発生しませんでした。
httpSconnection(s3.amazonaws.com) を使用すると、s3 はステータス 100 continue を返します。何が起こった?
c# - Web API コントローラーから POST 要求をリダイレクトするときの 100-continue の処理
ApiController
HTTP のステータス コード 307 を介してリダイレクトすることにより、POST 要求に応答する があります。これは、ヘッダーからの情報のみを使用して行われるため、このアクションでは要求の本文は必要ありません。このアクションは次と同等です。
これは簡単ですが、改善したい点が 1 つあります。リクエストの本文には大量のデータが含まれる可能性があるため、HTTP ステータス コード 100 を利用して、このリクエストをより効率的にしたいと考えています。コントローラーをそのまま使用すると、会話は次のようになります。
リダイレクト アクションではリクエスト ボディは必要ないため、会話を次のように短縮できるようにしたいと考えています。
これを達成する方法を調査するために 1 日の大部分を費やしましたが、解決策を思いつくことができませんでした。私の研究では、次のことを学びました。
ApiController
のアクションが実行されるとき、100 Continue
はすでに送信されています。- が
ApiController
作成された時点で、100 Continue
はすでに送信されています。 HttpApplication
のPreRequestHandlerExecute
イベントがトリガーされたときに、100 Continue
応答が送信されていません。- が
DelegatingHandler
実行されると、100 Continue
はすでに送信されています。
これに基づいて、これまでに思いついた最善の解決策は、問題の がリクエストの受信者である場合に、 onHttpModule
を使用してレスポンスをオーバーライドするを作成することです。ただし、これはいくつかの理由 (コードの分離、Web API のパラメーター バインディングを利用しない、および の追加ロジックをバイパスする) により、理想的なソリューションとはほど遠いものです。RouteData
RequestContext
ApiController
AuthorizeAttribute
ApiController
これにはもっと良い解決策があるように思えますがExpect: 100-continue
、Web API アプリケーションでヘッダーを適切に処理する方法に関する情報はほとんど見つかりませんでした。ヘッダーを適切に処理するためにこれを実装する最も簡単な方法は何でしょうか?ApiController
Expect: 100-continue
c# - C# Owin Self Host - 予想されるヘッダー 100-continue
セルフホスティングで OWIN を使用すると問題が発生しました。コンソール アプリケーションから Web サーバーを実行しています。IIS では実行されていません。
HTTP 100-continue 仕様: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3
OWIN 100-continue 仕様: http://owin.org/html/owin.html
何を/どこで/どのように処理する必要がありますか:リクエストの 100-continueヘッダー? シンプルなブートストラップを使用しています:
php - JSON HTTP POST を受信する PHP スクリプトで HTTP 応答を特別に処理する必要がありますか?
前回の質問がうまく書けなかったので、もう一度やり直します。
以下のリクエストPHP
を処理するためのスクリプトを書いています。JSON HTTP POST
の末尾 8 桁のメールのみを自分に送信したいmobileNumber
。
ブラウザを開いてページに移動するとmysite.com/json.php
、メールが送信されますが(番号なし)、POST
リクエストが送信されても何も起こりません。
ヘッダーで示されているように、クライアントは を要求している可能性があります100-continue
(posttestserver.com でテストする場合)。
PHP スクリプトで HTTP 応答を具体的に処理する必要がありますか?
node.js - Express API は、1 つだけを返す必要がある場合に、重複した「100 続行」応答を返します。
問題の説明
Express アプリ (Node.js) に HTTP POST 要求を行うと、サーバーは 2 つの「100 Continue」応答で応答し、その後「200 OK」応答で応答しますが、「100 Continue」は 1 つしかないはずです。
Postman は 2 番目の「100 continue」を無視して成功を報告しますが、Mule ESB で構築している別のアプリケーションは余分な「100 continue」を受け入れず、失敗します。
それ以外の場合、アプリは問題なく POST 要求を処理し、データはデータベースなどに書き込まれます。
技術環境について
Express アプリは SUSE サーバー上で実行されています。Nginx はリバース プロキシとして機能します。PM2 で複数の Express アプリを管理しています。
最初は、プロキシ パッケージを使用して別の Express アプリを使用して、リバース プロキシとして機能していました。しかし、それが問題だったのではないかと考えて、リバース プロキシとして Nginx を使用するように切り替えました。しかし、それは違いはありませんでした。
ローカル マシンでエクスプレス リバース プロキシを使用してまったく同じ設定を試みましたが、「100 Continue」はまったく返されず、「200 OK」のみが返されます。
ローカル/サーバーで実行しているときに、まったく同じアプリが異なる応答を返す理由がわかりません。
応答例
複数の「100 Continue」応答が発生する原因と、それらを防ぐ方法を教えてください。
アプリがローカル マシンで "100 Continue" 応答をまったく返さないため、これを引き起こしているサーバー/ファイアウォールに何かある可能性がありますか?