お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
技術::プロトコル::HTTP言語::PHPNode.js::その他

動機としてはcurlだと見えない部分があるので、自分でHTTPメッセージを手組みして送ってみたかった。

Node.jsとPHPのサーバーでリクエストが期待通り取得できたので、メッセージの実装としては問題ないと思われる。

検証用サーバー

以下のコードをNode.js v20.11.1を用いて検証

import http from 'node:http';

http
  .createServer((req, res) => {
    console.log(req.headers);
    req.on('data', (chunk) => {
      // body
      console.log(Buffer.from(chunk).toString());
    });
    res.statusCode = 200;
    res.end();
  })
  .listen(9999);

netcatコマンドによるリクエスト検証

GETリクエスト

echo -e 'GET / HTTP/1.1\r\nHost: localhost:9999\r\n\r\n' | nc localhost 9999

POSTリクエスト

echo -e 'POST / HTTP/1.1\r\nHost: localhost:9999\r\nContent-Length: 4\r\n\r\nhoge' | nc localhost 9999

備考

PHPで検証サーバーを作る場合

実際にAPサーバーでリクエストの中身をパース出来るかどうかの観点で見た場合にNode.jsよりPHPのが楽なので、PHPで作ってみた結果、軽くハマったので残しておく。

以下のコードを用いてPHP 8.0.29で検証サーバーを作る場合に、php -S 0.0.0.0:9999としてサーバーを起動すると、Content-Typeヘッダがない場合に正常な動作をしなかった。

<?php

var_dump($_SERVER);
var_dump($_REQUEST);

ncで検証サーバーを作る場合

デバッグ用。生のメッセージが見れるのでダンプしてdiffを取るなどでcurlとecho + ncの差分を見るのに使える。

nc -l 9999

HTTPメソッド名を非標準的なものにした場合の挙動

前述のNode.jsサーバーでは400 Bad Request、PHPサーバーでは501 Not Implementedが応答された。

投稿日:
映画::トラペジウムジャンル::アニメ

ここ最近トラペジウムという映画にハマっているという話はトラペジウムを見てきた その2や、トラペジウムを見てきたでしているが、この作品はスルメの様な作品で、グッズを買う熱意が生まれるのが遅れたため、グッズを手に入れるために多数の映画館を巡礼した話だ。

実は過去にも似たことをしたことがあり、その時はソードアート・オンライン -プログレッシブ- 冥き夕闇のスケルツォのミトのメインウェポンであるヴァリアブル・シックルを探し求め以下の地図のようなルートで広範囲の映画館をめぐり手に入れたのだ。因みに以下のルートにない映画館もめぐっている。

SAOPのミトの武器を手に入れるときにやった旅

この時には実に次に挙げる10館に及ぶ映画館を巡礼した。OSシネマズ神戸ハーバーランド、アースシネマズ姫路、TOHOシネマズ西宮OS、109シネマズエキスポシティ、イオンシネマ大日、梅田ブルク7、TOHOシネマズ梅田、TOHOシネマズなんば、あべのアポロシネマ、MOVIX八尾。

参考までに件のヴァリアブル・シックルはMOVIX八尾で手に入った。他の映画館では軒並み売り切れで、ヴァリアブル・シックルだけ狙ったように消えていた。転売が横行していたのもあり、人気アイテムだったのは間違いなかったが、MOVIX八尾という比較的誰も来なさそうな映画館にはごく普通に残っていたのだ。

ヴァリアブル・シックル パッケージ表
ヴァリアブル・シックル パッケージ裏

なお、この時は公開の翌日に行動したのだが、今回は公開から四週に入ろうとしていたときだったので、かなり絶望的な状況だったが、私は諦めなかった。今回狙うアイテムはトラペジウムの学生証風アクリルチャームと、インスタントフォト風カードだった。この二つのアイテムはランダム封入で4キャラ分存在するということで、私は全キャラ分揃えたいと考えたので、どうにかして揃えることにした。Xでは前日にも入手報告が出ていたし、トラペジウムは上映館が多いわりに信じられないほどガラガラだったので、まだ手に入るという確信があった。また、前回の体験から八尾の様な誰も来なさそうなところを狙うとよさそうだと考え、その辺りを重点的に狙うことにした。

今回は平日に動き始め、四日に分けて行動している。まず初日はTOHOシネマズ西宮OSに運動もかねて自宅から自転車で向かった。ママチャリで行ったのだが、割と正気ではない距離だと思う。入場者が少ないのであれば経験上、比較的グッズの残りがいい傾向にあるここであればあると考えていたのだが、期待は見事裏切られ消えていた。この日の移動距離は30kmだった。

初日の巡礼、この日は当日も翌日も平日だったので余り動けなった

次はOSシネマズミント神戸、OSシネマズ神戸ハーバーランドに始業前の時間を活用して向かったが、これも外れた。前回見たときはまだあったのであるかと思ったら消えていた。この日は金曜日で次の日が休みだったのもあり、終業後にイオンシネマ加古川に向かった。加古川なら見る人も少ないだろうからあるだろうという見立てだったが、こちらも外れた。そして、流石に姫路にはないだろうとアースシネマズ姫路に向かったが、やはりなかった。この日の移動距離は126kmだった。

二日目の巡礼は翌日が土曜日だったので大きめの移動をした

その次は土曜日となり、時間に余裕ができたので比較的郊外にある映画館を狙い撃ちにするように大きく動くことにした。まず電話番号を公表している映画館の幾つかに電話をかけ目星をつけた。この時にはトラペジウムの入場者数が増えていることに気づいていたので、全ての映画館に電話をかけることはやめて、早く回ることを優先した。幸いこれによって奈良に寄る必要がなくなり、大阪と和歌山に絞れた。

この日は次に挙げる4館を巡った。109シネマズ箕面、ジストシネマ和歌山、ユナイテッドシネマ岸和田、TOHOシネマズくずはモール。この計画を立てる前にOSシネマズミント神戸でトラペジウムの鑑賞予約を入れていたのと、余りにも距離が離れた、行程であったため、スケジュールがだいぶ縛られた。正直正気ではない距離を移動していると思う。因みに和歌山と岸和田については最寄り駅から劇場までの距離が開いているが全て徒歩で移動している。

109シネマズ箕面とジストシネマ和歌山は出発前に在庫確認をしており、109シネマズ箕面では学生証4枚と、フォトカード3枚を手に入れることができた。ここで運よく1名分以外は揃ったため、残り1名分を探す旅になった。ジストシネマ和歌山についた時には在庫が尽きており、ユナイテッドシネマ岸和田に期待したものの、これは空振りに終わった。また、TOHOシネマズくずはモールは当初行く予定がなかったのだが、Xのフォロワーからここに在庫が多くあったという情報を聞き、行くことにした。なお到着した時にはフロントの営業が終わっていたため、在庫確認だけして帰ることとなった。幸い在庫が見れる状態で、潤沢の在庫があることが確認できたため、翌日来ることを決意した。

この日の行程は、どことなく東西南北を巡っているような十字の形をしており、図らずしもトラペジウム感のある道行きとなったので少し満足していたりする。また、この日の移動距離は361kmとなった。なお京都まで突き抜けてるのは疲労による電車の乗り間違えである。

大阪府を縦断し和歌山まで至る狂気の巡礼を刊行した三日目

さて、最終日だ。正直昨日歩き回って足が痛いが、TOHOシネマズくずはモールに潤沢な在庫があるのは確認していたため、これを取られないよう早起きして開業前に乗り付けた。そして幸いなことにここで全て揃えることができた。おそらくこの記事を書いている今でも在庫があるのではないだろうか?その後は、くずはモールで映画を見て、今後の在庫予測を立てやすくする意味合いや、気分で、次に挙げる兵庫県内の上映劇場と、大阪都心部のめぼしい劇場を巡ってみた。TOHOシネマズ伊丹、MOVIXあまがさき、T・ジョイ梅田、TOHOシネマズ梅田、TOHOシネマズなんば。

正直、伊丹には少し期待をしていたが見事になかった。尼崎や梅田には確実にないと思っていたが、実際なかった。特にT・ジョイはグッズの販売が極めて渋い印象があったのだが、実際パンフしか売ってなかった。TOHOシネマズなんばはTOHOシネマズ西宮OS並みにグッズの残りがよい傾向がある気がするので、少しだけ期待していたが、西宮が死んでいる以上ここも当然のごとく死んでいた。この日の移動距離は200kmとなった。

余裕がだいぶあったので最後に三宮のスイパラでやっているトラペジウムコラボにも行けたのがよかった。因みに三宮がコラボイベントの最西端である。

Xのフォロワーの助けによって勝利を掴んだ四日目

初めは徳島や香川、岡山に鳥取、島根までも巡る計画を立てていたが、無事近畿地方内で収まったのは良かった。そして総移動距離は717kmとなった。神戸から東京を遥かに超えているすさまじい距離である。巡った映画館は全14館で、次に挙げる通りだ。TOHOシネマズ西宮OS、OSシネマズミント神戸、OSシネマズ神戸ハーバーランド、イオンシネマ加古川、アースシネマズ姫路、109シネマズ箕面、ジストシネマ和歌山、ユナイテッドシネマ岸和田、TOHOシネマズくずはモール、。TOHOシネマズ伊丹、MOVIXあまがさき、T・ジョイ梅田、TOHOシネマズ梅田、TOHOシネマズなんば。

9館目で引き当てているため、実質前回よりは少ないのだが、距離は前回と比べると遥かに長い。

さて、以下が姫路~和歌山に至る壮大な旅をして手に入れたトラペジウムの学生証とフォトカードである。恐らく全国広しといえど、ここまでしてまで手に入れようとした人間も他にいないだろう。まさに狂気である。正直フォトカードを集める気はなかったのだが、ついでなのでこっちも集めてしまった。

何とか全員分揃えることができた学生証
ついでに揃えたフォトカード

なお、実際に行ったわけではないが、シネマサンシャイン大和郡山とイオンシネマ茨木にも在庫がないことを電話で確認している。

今回の調査で分かったのは、TOHOシネマズはグッズの仕入れ在庫が多いのではないかということと、イオンシネマは少なさそうということだ。またユナイテッドシネマ岸和田も期待できそうになかった。ジストシネマ和歌山は若干期待できそうではあったが、余りにも遠すぎる。行ってる時間で売り切れる可能性が濃厚に思うので、大阪府に存在するほかのTOHOシネマズを回るのが私の場合は良さそうに感じた。

ただ、当たり前のことではあるが、できることなら上映初日に揃え切れれば、それが最も理想的だろう。遅くなるほど辛くなる。しかしまぁ、このような旅行もそれなりに発見があったりして楽しいので、これはこれで悪くなかったりもする。実際、和歌山や岸和田を歩くのは結構楽しかった。

投稿日:
ガジェット::ルーター::YAMAHA技術::IPv6

確認環境

Env Ver
ルーター YAMAHA RTX830
ファームウェアRev. Rev.15.02.26 (Wed Sep 7 12:36:21 2022)

やり方

まず以下のコマンドで対象のIPv6アドレスとポート番号を指定する。IPv6アドレスの取得方法は後述する。

ipv6 filter 静的フィルター番号 pass * 宛先IPv6アドレス フィルタリングするパケットの種類 * 宛先ポート

次に次のコマンドで先ほど設定した静的フィルター番号を指定する。静的フィルター番号はデフォルトで設定されているものがあるはずなので、それに追記する形で行う。

ipv6 lan2 secure filter in 静的フィルター番号...

もし間違えて既存のフィルター番号を消し飛ばした場合はipv6 filterがついてる番号を列挙してやればよい。

IPv6アドレスの取得方法

以下のコマンドを叩くと取れる。もっといい方法があると思うのだがパッと見つからなかった。ifconfigを叩くと無数のアドレスが出てきてどれを選べばいいのかわからないが、軽く見た感じグローバル用とローカル用がごちゃ混ぜになっているようだった。

curl https://ifconfig.me

WordPressからadiaryへの移行に伴いアクセス数が減っていたのだが、最近徐々に元に戻っていることに気が付いた。理由はわかっていないがURL構造の変化あたりが大きいのだろうか?一応リダイレクトはかけているのだが…。

検索流入が増えていることがわかるGoogle Search consoleのグラフ

何はともあれ戻ってきているのはいいことだと思う。インデックス鵜や記事数も変わっているので単純比較こそできないものの上位の結果になっているページは変わっていないので、URL構造の変化を適当な理由にしておこうと思う。

しかもCTRについては上がってさえいるので、これは良い傾向だと思う。これもadiaryの成果なのだろうか?

因みにBing Webmaster toolも使っていて、こちらもadiary移行後は停滞したように見えなくもないが、こちらも最近では盛り返してきているように見えるので良い傾向だと思う。こちらは既にWordPressの時より良くなっているように見える。そもそものアクセス数が低くて何とも言えないがBingなので仕方がないだろう。

改善傾向がわかるBing Webmaster toolの画面

因みにGoogleとBingでの流入キーワードは大まかには同じなのだが、細かく見るとBingはサーバーサイドやネットワーク系、COM3D2、Windowsのトラブルシューティング的な内容が多いように思う。もしかするとスタートメニューとかなんかから検索する人が多いのかもしれない。

参考までに以下は左がGoogle、右がBingの検索流入情報だ。

Googleのキーワード流入情報
Bingのキーワード流入情報

HTTPヘッダを持たないHTTPリクエストはあり得るのか?というのを検証しているときに気づいた話。

RFC 7230ではHostヘッダを持たないHTTPリクエストは禁止されており、これを受けたサーバーは400応答を返すことを必須としている。

RFC 7230:Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and RoutingHostより

A client MUST send a Host header field in an HTTP/1.1 request even if
the request-target is in the absolute-form, since this allows the
Host information to be forwarded through ancient HTTP/1.0 proxies
that might not have implemented Host.
A server MUST respond with a 400 (Bad Request) status code to any
HTTP/1.1 request message that lacks a Host header field and to any
request message that contains more than one Host header field or a
Host header field with an invalid field-value.

なお、Node.jsのHTTPサーバー機能ではHostヘッダーのない要求を受け入れることができる。

http.createServer([options][, requestListener])を見ると、以下のようにrequireHostHeader: falseを渡すことで実現可能だ。規定値はtrueであるため、基本的にはHostヘッダーなしの要求は400応答が返される。

import http from 'node:http';

http
  .createServer({requireHostHeader: false}, (req, res) => {
    console.log(req.headers);
    res.statusCode = 200;
    res.end();
  })
  .listen(3000);

nginxにおいてもHostヘッダーなしの要求は以下の応答が返されたため同様と思われる。

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.26.0</center>
</body>
</html>

但し、nginxにおいてHostなしの要求を許容する方法は見つからなかった。Server namesによるとserver_name "";とすることで出来そうに見えたが、これは機能させることができず、400応答が返された。