こう 聞かれます
- 「知っている HTTP の
ステータスコードと、 その 意味を 教えてください」 - 「401 と 403 の
違いは 何ですか」 「404 と 500 は どちらが 誰の 問題ですか」 - 「API で
入力が 足りない とき、 何番を 返しますか」 (作った 物から、 裏で 知識を 確かめる形)
面接官が 見ている点
- 番号を
覚えているかより、 百の 位で 組を 分けて 考えられるか - 4xx は
送った 側、 5xx は サーバー側、という 切り 分けで、 不具合の 調べ始めを 決められるか - 401 と 403、
301 と 302 のような、 似た 番号の 違いを言えるか
短い答え
- ステータスコードは
結果を 表す 3 桁の 数で、 百の 位が 2 なら 成功、 3 なら別の 所へ、 4 なら 送った 側の 誤り、 5 なら サーバー側の 失敗です。 - よく
使うのは、 成功の 200、 作れた 201、 移った 先を 示す 301 と 302、 変わっていない 304 です。 - 誤りでは、
入力の 不備の 400、 未ログインの 401、 権限が 無い 403、 見つからない 404、 サーバーの 失敗の 500 を よく 使います。
少し 詳しい答え
百の 位で 5 つの組
1xx は
番号ごとの 使いどころ
- 200 OK 頼んだ物が
返った、という 普通の成功です - 201 Created POST で
新しく 作れた ときに 返します。 作った 物の 住所を Locationのヘッダーで 添える ことが多いです - 301 と 302 どちらも
別の URL へ移す案内です。 301 は ずっと 移った、 302 は 今だけ 移った、という 違いです。 サイトの 住所を 引っ越したら 301 を使います - 304 Not Modified 前に
受け取った 物から 変わっていない、という 返事です。 本文は 付かず、 ブラウザは 手元の キャッシュを使います - 400 Bad Request 入力の
形が おかしい、 必須の 値が 無い、など 送った 側の誤りです - 401 と 403 401 は
「誰か分からない」(ログインしていない、 トークンが 切れた )、 403 は 「誰かは 分かったが、 その 操作は 許していない」です。 名前は Unauthorized ですが、 意味は 認証 (本人の 確かめ) の失敗です - 404 Not Found その
住所に 物が 無い、という返事です - 500 Internal Server Error サーバーの
中で 予期しない 失敗が 起きた、という 返事です。 送った 側が 直しても 解けません
4xx と 5xx を 分ける意味
4xx なら
作った
よく ある間違い
- 401 と 403 を
入れ替えて使う ログインしていない 人に 403 を 返すと、 ログインの 画面へ 案内する 処理が 動きません。 認証が 無いなら 401、 権限が 足りないなら 403 です - 失敗しても 200 を
返し、 本文に 「エラー」と書く 呼ぶ側が 番号で 成否を 見分けられず、 fetch の response.okも true になります - 入力の
誤りで 500 を返す 送った 側の 誤りを 5xx に すると、 サーバーが 壊れたように 見え、 調べる 人が 迷います。 入力は 先に 確かめて 4xx で返します
深掘りの問い
- 「権限の
無い 人に、 物が ある ことさえ 知られたくないときは」 403 の 代わりに 404 を 返して、 在るか どうかを 隠す設計も ある、と答えます - 「301 と 302 を
間違えると 何が 困りますか」 301 は 恒久の 移動なので、 ブラウザが キャッシュして 次から 直接新しい 住所へ 行く ことが あり、 検索エンジンも 新しい 住所に 置き換えます。 一時の 移動に 使うと 戻しに くい、と答えます - 「fetch で 404 が
返った とき、 catch に 入りますか」 入りません。 fetch が 失敗に するのは 通信できなかった ときで、 404 や 500 は response.okが false になるだけなので、 自分で 確かめます