JavaScript で文字列のバイト数を求める (POST・PUT リクエストやレスポンスの文字列が途中で切れる問題)
Node.js の組み込みモジュールである http
モジュールを使用して、POST メソッドや PUT メソッドでデータを送信する処理があったのだけど、どうも送信データの末尾20バイトぐらいが欠損してしまっていた。
一連のデータ送信処理は海外のサイトからいただいてきたモノだったので、直感的に「(英語圏には登場しない) 全角文字が悪さしてる?」と思ったのだが、何が悪いか、何を変えたら上手く直るのか分からなかった。
んで、コードをよく読むと、リクエストヘッダに指定している Content-Length
が怪しく感じた。req.body.length
と、送信する文字列の .length
を指定していた。
request.setHeader('Content-Length', req.body.length);
そこでよくよく調べてみると、文字列のバイト数を求めるには、Buffer.byteLength()
というメソッドを使うようだ。
request.setHeader('Content-Length', Buffer.byteLength(req.body, 'utf8'));
このように書き換えたら上手くいった。Content-Length 指定、こんな大事だったのね…。
そしてコレを書こうと思って Node.js のドキュメンテーションを開いたら、サンプルコードにモロに Buffer.byteLentgh()
書いてあった…。
request.getHeader(name)
javascript request.setHeader('content-type', 'text/html'); request.setHeader('Content-Length', Buffer.byteLength(body));
よく読もうね、自分…。