• 締切済み

HTTPで通信するソフト

質問させていただきます。 HTTPで通信するソフト(クライアント側)を作りたいのですが、私は組込み系のソフトしか作ったことがなく、ネットワーク系は初めてだったので、プロトコルの勉強から始めました。TCP/IPは理解し、HTTPの仕様がRFCというもので文書化されているのは分かったのですが、RFCには数が多く、HTTPの仕様も膨大にあるように感じました。 HTTPで通信するソフトを作る人はどうやって仕様を把握し、ソフトを作っているのでしょうか?私は何が必要で、何が必要でないのか判断が付かない状況です。 特にヘッダーフィールドは数が多く、理解が大変で困っています。 (世の中のHTTPクライアントはHTTPの全ての仕様を守っているのでしょうか?) よろしくお願い致します。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

No2です。すいません。タイプミス(コピペすれば良かった)。 誤:RFCは2166 正:RFCは2616 以下同様。 http://www5d.biglobe.ne.jp/stssk/rfcjlist.html

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.3

その作ろうとするソフトで必要なものだけ実装すればいいような気がしますけど(必要なものの判断がつかないというのは、そもそも何を作ろうとしてるのか決まってないんじゃないかと)。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

組み込み系だと難しいでしょうが、汎用OSの場合は、言語毎にHTTPを扱うライブラリがあったりするので、それを使うだけです。 ライブラリが無い場合は、TCPのソケットライブラリで、自分でRFCなり解説文書なりを見て書くことになります。 現在主流のHTTPプロトコルはVer1.1で、RFCは2166だと日本語版があるようなので、それを見ると良いと思います。正確には、RFC2166は今年出たRFC7230-7235で置き換えられていますが、2166でも大丈夫だと思います。読み比べてはいませんが、少なくとも2014/6以前はRFC2166が最新でした。 どこまで実装するかは、PCのブラウザの挙動をトレースを取ったりすることでみるとか、例えば wget というコマンドを使って、デバッグオプションでヘッダを表示させたりすると良いと思います。 または、telnetコマンドでHTTPサーバーに手動でコマンドやヘッダを送って応答を見るとか。 いずれにせよ、RFC的に必須のヘッダ以外は実装しなくても良いと思いますよ。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>HTTPで通信するソフトを作る人はどうやって仕様を把握し、ソフトを作っているのでしょうか? まあ、作りたいソフトの内容しだいですが、ネットや書籍などを探して、使えそなプログラムソースを探してきて、それを手直しして作ることが多いと思います。

関連するQ&A

  • HTTP通信の詳細を知りたい

    PHPで他ドメインのページの情報を取得しています。 その際に、HTTP通信のリクエストヘッダ、レスポンスヘッダの詳細を見たいです。 イメージとしては、firefoxの「firebug」とか「live http header」で取得できる情報量がほしいです。 現在、http通信でhttp_clientを使っています。 http_clientのcurrentResponse()でレスポンスは取得できるのですが、 クッキー情報などが入っていないです。 一番知りたいのは、リクエストヘッダです。 PHPを設置しているサーバーからどのようなリクエストヘッダを送っているのかを知りたいです。 というのは、設置しているサーバーによって同じページにリクエストを送っているのに、返ってくる情報が変わるときがあります。 PHPプログラムは全く同じです。 サーバーはさくらインターネットの共有サーバーを3つ契約しており、 3つのサーバーに同じプログラムを置いてHTTP通信しているのですが、 取得できる情報が異なっていて困っています。 恐らく、リクエストの何かが違っていると思うのでそれを調べたいと思って 質問しました。 そもそも原因が違うところにありそうであればアドバイスもお願いします。 よろしくお願いします。

    • 締切済み
    • PHP
  • 【pop通信ではなくHTTP通信でメールの送受信を行えるクライアントソフト】

    gmailやyahooメールをするのにpop通信ではなくHTTP通信でメールの送受信を行えるクライアントソフトを探しています。ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。よろしくお願いします。

  • TCP/IP通信

    Javaを勉強していてHTTP通信はできるけどTCP/IPの通信プロトコルは使用できないと書いてありました。 通信プロトコルが良くわからないのですが2つの違いは何でしょうか? すごく素人的な質問ですが教えてください。

    • ベストアンサー
    • Java
  • HTTP1.1のProxyServerを作りたい

    HTTP1.1のProxyServerを作りたい いきなりですが、私がこの質問をするにいたったまでの経緯を話させていただきます。その後、その経緯を踏まえたうえで何点か質問があるのですが、それは後に書きます。 現在HTTP1.1のProxyServerを、C言語でBSDソケットを使って作成しようとしています。 しかし通信がうまくいきません。自分なりにおそらくこれが原因ではないかという、あたりをつけたんですが、その原因の解決方法がわかりません。その原因とは、 レスポンスのデータの区切りがわからないせいでデータがごっちゃになっているのではないか?。とうことです。 もう少し詳しく言うと、WebServerは、HTTP1.1Proxyは持続的接続を前提としたパイプライン接続をサポートしていると考えて通信しているため、一つのソケットに対して複数のレスポンスを返す。しかし現在の自分の書いているソースでは、一つのソケットから読み取れるだけ読み取ってそれをすべてclientのソケットに書き込んでいるため、レスポンスの区別がついていないのではないか?というのが問題点ではないかと考えています。 これを解決するためには、レスポンスのデータを区切りらなくてはなりません。それを知るためにはヘッダのContent-Lengthラベルを、読むのが一番早いのではないかと考えていますが、Transfer-Encodingなるプロトコルがあるようで、これを使って送信されてくるレスポンスの場合はContent-Lengthが使えません(データ部がhtmlの場合は大抵Transferを使っています)。なのでこのTransferプロトコルに対応するプログラムを書く必要性があるのですが、そのためにはデータ部を見なくてはいけないようなのですが、多くのレスポンスはデータ部をgzipで圧縮して送ってきています。 この過程を踏まえたうえでいくつか質問があります。 1つは、まずこの過程の上で何か自分は間違った解釈(プロトコルの理解違いや、問題点の見間違え等)をしていないでしょうか? 2つ目は、C(OSはlinux(Iphone)を使っています。)でgzipを解凍するための方法がわかりません。なにか参考になるサイトはないでしょうか? 3つ目は、参考になるHTTP1.1ProxyServerないしはクライアントの、ソースコードはないでしょうか?(1.0はいくつかみつけたんですが・・・) どれか一つの質問へのお返事でも、結構です。よろしければご回答下さい。

  • ブラウザのファイル転送終了判断

    IEやネットスケープといったブラウザは,あるコンテンツを転送したとき,ファイルの転送が終了したことをどうやって把握しているのでしょうか? HTTP GETで取得を開始した後,TCPのコネクションを切る判断をどうやってしているのか知りたいのです. HTTPプロトコルのRFC定義で決められているのでしょうか? もしご存知の方いらっしゃいましたら教えてください.

  • 通信方法について

    こんばんは。 今回は通信における基礎的ことをうかがいたいと思います。 例えばクライアントからサーバーへFTPでデータをPUTするとします。 ここでデータ通信はどのように行われているのでしょうか? 実際の通信処理はTCP/IPプロトコルが行っていると思います。 では、アプリケーションプロトコル(FTP)はどのような動きをするのでしょうか? TCP/IP(下位層)に対して、通信を開始せよ!といった命令でも出すの でしょうか? socketの勉強をすると良いと薦められましたが、何か良いサイト等が ありましたら教えてください。

  • HTTPの持続的接続はいつきられるのか?

    HTTPの持続的接続はいつきられるのか? 現在自分はHTTPプロトコルの勉強をしているのですが、疑問に思った点があります。 それはHTTP1.1には、持続的接続をする機能があるのですが、これがどのようなタイミングできられるのかがわかりません。 自分の調べた感じだと、ServerないしはClientがHTTPプロトコルのConnectionラベルにcloseと書きこんだ場合に、持続的接続はきられる物だとおもいました。 しかし、Wiresharkなどで実際に流れているパケットをみるに、明示的にこのCloseが書き込まれることはむしろ稀です(なのに通信は以後、行われません)。 なので他にもなにか持続的接続を終了するフラグのようなものがあるのではないかと考えましたが、それがなんなのかがわかりません。 よろしければご回答ください。お待ちしております。

  • ソケット通信の送受信遅延-02 その後

    前回のNo.1031658 「ソケット通信の送受信遅延」に追加させてもらいます その後、プロトコルアナライザで現状調査を行い以下の現象を確認しました ◇正常時  サーバがメッセージ送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  0.2msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓  10msecで サーバが送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  0.2msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓          以下繰り返り ◇不具合時  サーバがメッセージ送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  0.2msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓  10msecで サーバが送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  約130msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:0 + 返信データなし ↓  約250msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓ といった状況です どう解釈すれば良いのでしょうか 遅延の原因はソケットなのかそれ以外なのでしょうか?是非アドバイスをおねがいします。

  • HTTPプロトコルは何語で書かれているのか

    Webページから情報を得るための通信方法の手順がHTTPプロトコルとよく説明されています。実際問題としてプロトコルというものの実体がわかりません。パケット通信をするとか、そういう抽象的なことではないのです。Webページをホームページビルダーでしか作ったことがない人に、あれはHTMLというルールでつくられていると言われてもわかりません。実際にメモ帳で簡単なタグなどを利用し、作成して初めてわかります。HTTPプロトコルとかFTPプロトコルとは何語で書かれているのですか?そしてそれはインターネットエクスプローラーのソフトの中に書かれているのですか?もちろん詳しい説明はわかりませんから、1行目の内容より少しでも踏み込んだ具体的な内容を知りたいのです。

  • HTTPレスポンスをUDPにより受け取った場合

    HTTPというプロトコルは、UDPの上でも動かせると聞きました。 そこで、以下のような状況(通常はまずあり得ないのですが)が発生した場合について質問があります。 (1)ユーザがHTTPリクエストを「TCP」で送った。 (2)そのHTTPリクエストに対するレスポンスを「UDP」によって受信した。 このように(1)と(2)でトランスポートプロトコルが異なる場合でも、ユーザはHTTPリクエストに対するレスポンスを無事に受け取ることができるのでしょうか? もしくは、ユーザ側で受信時に何らかの操作が必要になるのでしょうか? 通常あり得ない設定の話で恐縮ですが、気になっているのでご意見お聞かせいただければ幸いです。 よろしくお願い致します。