nginxの設定ファイルをいろいろいじっていて、わからない言葉がたくさん出てきました。その中でもプロジェクトの大先輩がこれは知っておいた方がいいと言っていた「ロケーションヘッダー」について詳しく調べてみることにしました。「サーバ」についてそもそもよくわかっていないので、調べていくうちに出てくるよくわからない言葉も深堀りしていこうと思います。
ロケーションヘッダー
リダイレクトする機能っていうのは知ってたけど、リダイレクトがそもそもあまりわかっていなかった。
リダイレクト応答とともに、ってあるけど、なにこれ?HTTP 301 Moved Permanently
やHTTP 302 Found
って何が違うの?
リダイレクトってURLにちょっとパスを付け足すだけと思ってたからサーバ内で遷移してると思ってたけど、そうじゃなくて一旦クライアントにレスポンスを返してるっぽい。で、クライアントに強制的に新しいURLにアクセスさせてるっぽい。
図にするとこんな感じ↓
HTTP/1.1 302 Found
や HTTP/1.1 201 Created
とかは「ステータスライン」というらしい。レスポンスはステータスライン、ヘッダー、ボディで成り立つってどっかで学んだことある気がするけど全く覚えてなかった。
で、サーバーがクライアントに対してもう一度リクエストすることを強制できるのか気になったから認識があっているか聞いてみた。
3xx系は自動的にもう一度リクエストするらしいけど、201は自動的にリクエストしないらしい。この辺は各サーバ、クライアントの設定次第って感じっぽい。
最後に!
URLとURIの違いが気になったから聞いてみる。(これも絶対調べたことあるけど覚えてない)
そうそう、URNとかいうやつもおった。URIという上位の概念があって、その中にURLとURNがいる。URLはスキーマ(アクセスの仕方?使用するプロトコル?)、ドメイン、リソースという情報が含まれる。URNがいまいちピンとこないのでURLとURNの違いをもうちょっと聞いてみる。
どうやらURNはある空間内で一意に定まる名前ってだけらしい。uuidみたいなこと?曰く、URLはIT関係なさそう。住所とかもURNって言ってよさそう。
まとめ
- ロケーションヘッダーとは、HTTPレスポンスの一部
- HTTPレスポンスはステータスライン、ヘッダー、ボディで構成される。ロケーションヘッダーはヘッダーの一部
- クライアントはサーバからのレスポンスにロケーションヘッダーがあれば、自動的にクライアントに再びリクエストを送ることもある。(これがリダイレクト?)
- URIの中にURLとURNがある。URNはIT関係なさそう。
GPTに聞いてるので間違いがあるかもしれません。怪しい記述を発見した方はソースとともに正しい情報をぜひお知らせください!