ポート80を介して、リモートGPRSデバイスとデータを送受信する最良の方法に関する提案を探しています。
ランダムポート上でプレーンTCPソケットを作成すると正常に動作しますが、多くのキャリアはプロキシを介してポート80 HTTPトラフィックのみを許可し、HTTP ASCIIデータ(必要に応じてヘッダーを変更できる)を期待します。
したがって、デバイスは永続的なhttp接続でPOSTリクエストを作成し、Webサービスからbase64エンコードされた応答を受信する必要がありますか?バイナリデータが含まれる場合のモバイルプロキシの動作がわかりません。これを行うための推奨される方法はありますか?
デバイスのファームウェアとサーバー側アプリの両方を適応させることができます。
[編集]
標準(多かれ少なかれ)これを行う方法があるかどうかを知りたいです。さまざまなデータロギングおよび産業用システムでは、ソケット接続を介して大量のバイナリデータを送信する必要があります。イーサネット接続では、通常、一部のファイアウォールの適応に関連する問題のみがありますが、永続的なバイナリ接続では、任意のポートで問題が発生することはありません。
ただし、モバイルISPは、ポート80の「データプラン」のみを制限する傾向があります。また、HTTPヘッダーを混乱させたり、潜在的にHTMLデータ自体を混乱させたりします。ここで、潜在的な落とし穴とそれらを回避する方法を特定する必要があります。
Base64でエンコードされたデータを送信するだけで機能しますか?
Base 64エンコーディングを使用する必要はありません-これにより、転送する必要のあるバイト数が増加します。モバイルオペレーターは通常、応答のマングリングを、理解しているコンテンツタイプ(画像、スタイルシートなど)に制限します。
HTTPセッションはどのように処理されますか?
HTTPセッションは通常、URLクエリパラメーターまたはCookie値を介して処理されます。しかし、あなたが言ったことから、それはセッションが必要であるように聞こえません。
任意のソケットは長期間存続できますが、HTTP動詞は通常短命です。これは、データのパケットごとに新しい接続を作成する必要があるということですか?
HTTPリクエストは、raw TCP sockets。GETリクエストは、必要に応じて数時間続くことができます。リクエストごとに新しい接続を作成する必要はありません。 Connection: Keep-Alive
HTTPヘッダー。
または、単一の接続を介してサーバー応答をチャンクで送信する方法はありますか?
応答の長さがわからない場合は、Content-Lengthヘッダーを省略するか、できればTransfer-Encoding: chunked
HTTPヘッダー。
ISPプロキシはどのようにしてデータまたはヘッダーを混乱させることができますか?たとえば、プロキシは、サーバーが閉じた場合でも、接続を維持することができます。
ISPは、HTTP応答に加えた変更を明らかにする傾向はありません。これを心配している場合、簡単な解決策はデータを暗号化し、Content-Encoding
HTTPヘッダー。これには、HTTPクライアントとサーバーの両方を制御する必要があります。
可能であれば、データをHTTPリクエストおよびレスポンスとして送信することもできます。
HTTPはバイナリデータを完全に処理できます。画像は常にHTTPで送信され、バイナリです。人々は常に、問題のない任意のデータ型のファイルをアップロードおよびダウンロードします。
「アプリケーション/オクテットストリーム」のmimeタイプを指定するだけです。これは基本的に、バイナリデータの汎用mimeタイプで、どのような種類の詳細な仕様もありません。途中のプロキシはそのままにしてください。
POSTターゲットURLへのリクエストとしての画像のようなバイナリデータのアップロードのASP.NET C#実装:.
http://technowide.net/2012/09/01/upload-binary-data-http-post/