2016-07-14 6 views
0

ハードウェアは古く、それだけで GETのようなデータを送信/?A = 1Goまたはnode.jsにhttpバージョンとホストヘッダーを付けずにhttpリクエストを受け入れる方法は? 、

はgolang/Node.jsの中に、そのサーバーの書き込みは、HTTP/1.1としてこれを取ると、それはHostヘッダを持っていないのでようですサーバーは400の不正な要求に応答します。 そして、http 1.0標準にはGET /?a = 1 HTTP/1.0が必要ですが、そのような非標準要求を受け入れることができるデフォルトのHTTPサーバーが存在しますか?

私はgoのnet/httpパッケージとnode.jsのhttpパッケージを試していますが、どちらも標準に従っているため動作しません。

goまたはnode.jsにこのようなhttpサーバーを書き込むことはできますか?

更新:要求を検査するのnetcatを使って

enter image description here

+0

問題を再現できません。 NodeのHTTPパッケージを使用してテストしたときにうまく動作します。 https://www.evernote.com/l/AAOgJZU6G55L85nFBeNEs9Hfov7QdX_gPtEあなたは[MCVE]を提供する必要があります。 – Quentin

+0

HTTP/1.0は20歳以上です(1996年2月以降)。クライアントが投票するのに十分な年齢であれば、クライアントの選択肢を再検討することができます。 – Art

+0

@QuentinあなたはHTTP/1.0の部分なしで試すことができますか?私が使用するデバイスはGET/ – cgcgbcbc

答えて

1

HTTPサーバを書くのはかなり簡単です。私は少なくとも2を書いています。ガイドとして私は強くあなたが"HTTP Made Really Easy"を読むことをお勧めします。 1997年に最初に公開され、2002年に初めてサーバーを作成しました。

HTTPサーバーは基本的に、ダブル改行("\n\n")を待つ必要があります。 Content-Lengthヘッダーがある場合は、入力の多くのバイト(POST要求とPUT要求用)を読み取る必要があります。

これだけです。他のすべてはあなたが持っているデータをどのように解釈するかについてです。

ああ、チャンク転送のエンコードもありますが、これはHTTP/1.1以上のサーバでのみ必須です。 HTTP/0.9サーバーとして自分自身を識別してください。 Webサーバが見ることができるか、単純な参照するには

http://wiki.tcl.tk/28414(コードの8行)

ここでは、JavaScriptで同様のサーバーです:

// WARNING: Does not support POST or PUT body 
var net = require('net'); 
var server = net.createServer(function(sock){ 
    var buffer = ''; 

    sock.on('data', function(chunk){ 
    buffer += chunk.toString('utf8'); // assumptions!! 

    if (buffer.match(/(\r?\n){2}/)) { // looking for double \n\n 
     sock.write("HTTP/0.9 200 OK\nConnection:close\n\n"); 
     sock.write("Hello!"); 
     sock.end(); 
    } 
    }); 
}); 

server.listen(8080, function(){ 
    console.log('Server started'); 
}); 

あなたはbuffer文字列を処理することによって、要求を処理することができます。最初の行はGET行です。

関連する問題