てきとうなさいと べぇたばん

ArduinoでHTTPサーバーを作ろう

TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > ArduinoでHTTPサーバーを作ろう

ArduinoでHTTPサーバーを動かしたところ。It works!!

HTTPサーバーを作ろう

HTTPを勉強するためにも、HTTPサーバーを作ってみるというのはどうでしょう。 Arduinoを使って作ってみる。

必要なもの

およそ電子工作とは無縁のようにみえるけれども、これでインターネットの一員になることができる。

ソースコード

https://github.com/youkidearitai/uno_web_server/ を参照してください。なお、改良の余地はあります。

解説

HTTPというのは、最低限以下のリクエストとレスポンスで成り立ちます。

リクエスト

GET / HTTP/1.1 Host: localhost:8080 (あればリクエストボディ)

ここで肝心なのはリクエストヘッダの二個目にある「/」です。これはパスです。このパスを読み取ることでSDカードの内容を読み込みます。 (なお、パスをストレージから直接読み取るということは実際に使われるHTTPサーバーでは危険だということもわかるでしょう)

もちろん、リクエストヘッダの1個めにある「GET」も(これをメソッドといいます)必要ではあるのですが、今回は簡易なHTTPサーバーということで、すべてGETとみなして処理を省略しました。

レスポンス

まあ例えば200ならこう

HTTP/1.1 200 OK (レスポンスボディ)

このようにすれば、最低限HTTPとしてレスポンスが返ってきます。内容はファイルの中身そのまんまを返せばいいだけです。これだけでtext/htmlもimage/pngもなんでも返せちゃうわけですね。不思議だなあ。

制約

  • SDカードのファイルシステムであるFATの都合上、「8文字+.+3文字」の制約を受けます。したがって、「index.html」の「.html」は返せないです。「.htm」としましょう。
  • 面倒くさいのでXSSとか考えてないです。エスケープしてないところはどこでしょう?さがしてみてね
  • 先述したとおり、GETメソッド以外のことを考えていません。

機能を追加したければ頑張ろうね

まとめ

HTTPサーバーの基本的なリクエストとレスポンスができたので満足してます。Arduinoもおもろいですよね。ESP8266でうごかしても良いと思ったのですが、Ethernetが関わってる方がインターネットにつなぐ感あるかなと思い、Ethernet Shieldを使いました。ESP8266を使う場合はソースコードを別途考えないといけませんが、そうしたければがんばってください。

2024/02/04 21:19