diff --git a/files/ja/web/http/status/300/index.md b/files/ja/web/http/status/300/index.md
index f1ef857be36451..5200de0ec838e7 100644
--- a/files/ja/web/http/status/300/index.md
+++ b/files/ja/web/http/status/300/index.md
@@ -1,28 +1,97 @@
---
title: 300 Multiple Choices
slug: Web/HTTP/Status/300
+l10n:
+ sourceCommit: bd4d7bc4176d9f67297e3940ae7163a258f07ef5
---
{{HTTPSidebar}}
-HTTP の **`300 Multiple Choices`** リダイレクト状態コードは、リクエストに対して複数のレスポンスがあることを示します。ユーザーエージェントやユーザーは、その内から一つを選択します。レスポンスを一つ選択する方法は標準化されていないため、このレスポンスコードはほとんど使われていません。
+HTTP の **`300 Multiple Choices`** は[リダイレクトレスポンス](/ja/docs/Web/HTTP/Status#リダイレクトメッセージ)ステータスコードで、リクエストに対して複数のレスポンスがあることを示します。
+ユーザーエージェントやユーザーは、その内から一つを選択します。
+
+> [!NOTE]
+> [エージェント駆動型コンテンツネゴシエーション](/ja/docs/Web/HTTP/Content_negotiation#エージェント駆動型ネゴシエーション)では、サーバーに複数の候補が存在する場合、クライアントとサーバーが共同で指定されたリソースの最適な候補を決定します。
+> ほとんどのクライアントは、レスポンスから自動的に選択する手段を持っていません。また、追加の往復通信により、クライアントとサーバーの対話が遅くなります。
+> [サーバー駆動型コンテンツネゴシエーション](/ja/docs/Web/HTTP/Content_negotiation#サーバー駆動型コンテンツネゴシエーション)の方がはるかに広く使用されており、サーバーはリクエストヘッダー({{HTTPHeader("Accept-Language")}}、{{HTTPHeader("Accept")}} など)に基づいて、クライアントに最も適したリソースを選べます。
+
+サーバーは、ユーザーまたはユーザーエージェントが選択できるリソースメタデータと URI のリストを含むコンテンツをレスポンスに含めるべきです。コンテンツの形式は実装に依存しますが、ユーザーエージェントによって簡単に解析できる形式(HTML や JSON など)であるべきです。
サーバーが推奨する選択肢がある場合は、 {{HTTPHeader("Location")}} ヘッダーを生成してください。
-## 状態
+## ステータス
-```
+```http
300 Multiple Choices
```
+## 例
+
+### リソースのリストがついた 300 レスポンス
+
+次の例は、透過的コンテンツネゴシエーションのリクエストとレスポンスのやり取りを示しています。
+Apache サーバーは、[型マップ](https://httpd.apache.org/docs/trunk/mod/mod_negotiation.html#typemaps)で定義されたリソースの複数の版を、入力する言語に応じて、英語のコンテンツには `index.html.en`、フランス語のコンテンツには `index.html.fr` というように提供します。
+
+```plain
+URI: index.html.en
+Content-Language: en
+
+URI: index.html.fr
+Content-Language: fr
+```
+
+`Negotiate: trans` リクエストヘッダーは、クライアントが TCN を使用してリソースを選べます。
+このメカニズムに対応するブラウザーが少ないということは、代わりに curl などのユーザーエージェントが使用されているということになります。
+
+```bash
+ curl -v -H "Negotiate: trans" http://localhost/index
+```
+
+これは、次のリクエストを生成します。
+
+```http
+GET /index HTTP/1.1
+Host: localhost
+User-Agent: curl/8.7.1
+Accept: */*
+Negotiate: trans
+```
+
+リクエストされたリソースのさまざまな表現の詳細とともに、 `300` のレスポンスを受け取ります。
+
+```http
+HTTP/1.1 300 Multiple Choices
+Date: Fri, 30 Aug 2024 09:21:48 GMT
+Server: Apache/2.4.59 (Unix)
+Alternates: {"index.html.en" 1 {type text/html} {language en} {length 48}}, {"index.html.fr" 1 {type text/html} {language fr} {length 45}}
+Vary: negotiate,accept-language
+TCN: list
+Content-Length: 419
+Content-Type: text/html; charset=iso-8859-1
+
+
+300 Multiple Choices
+
+Multiple Choices
+Available variants:
+
+
+```
+
## 仕様書
-| 仕様書 | 題名 |
-| ------------------------------------------------- | ------------------------------------------------------------- |
-| {{RFC("7231", "300 Multiple Choices" , "6.4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content |
+{{Specifications}}
## 関連情報
-- {{HTTPStatus("301")}} `Moved Permanently`
-- {{HTTPStatus("302")}} `Found` (一時リダイレクト)
-- {{HTTPStatus("308")}} `Permanent Redirect`
+- [HTTP リクエストメソッド](/ja/docs/Web/HTTP/Methods)
+- [HTTP レスポンスステータスコード](/ja/docs/Web/HTTP/Status)
+- {{HTTPStatus("301", "301 Moved Permanently")}}
+- {{HTTPStatus("302", "302 Found")}} 一時リダイレクト
+- {{HTTPStatus("308", "308 Permanent Redirect")}}
+- {{HTTPStatus("506", "506 Variant Also Negotiates")}}
+- [Apache Server Negotiation Algorithm](https://httpd.apache.org/docs/current/en/content-negotiation.html#algorithm)
+- {{RFC("2295", "Transparent Content Negotiation in HTTP")}}
diff --git a/files/ja/web/http/status/304/index.md b/files/ja/web/http/status/304/index.md
index 326178ddd02c6a..ff937130136eee 100644
--- a/files/ja/web/http/status/304/index.md
+++ b/files/ja/web/http/status/304/index.md
@@ -1,38 +1,120 @@
---
title: 304 Not Modified
slug: Web/HTTP/Status/304
+l10n:
+ sourceCommit: ae86913908651e6008079242691e06b5e01d1c78
---
{{HTTPSidebar}}
-HTTP **`304 Not Modified`** クライアントリダイレクトレスポンスコードは、リクエストされたリソースを再送する必要がないことを示します。これはキャッシュされたリソースへの暗黙のリダイレクトです。これは、{{HTTPMethod("GET")}} や {{HTTPMethod("HEAD")}} リクエストのようなリクエストメソッドが {{glossary("safe")}} である場合、またはリクエストが条件付きで {{HTTPHeader("If-None-Match")}} もしくは {{HTTPHeader("If-Modified-Since")}} ヘッダーを使用しているときに発生します。
+HTTP **`304 Not Modified`** [リダイレクトレスポンス](/ja/docs/Web/HTTP/Status#リダイレクトメッセージ)ステータスコードは、リクエストされたリソースを再送する必要がないことを示します。
-{{HTTPStatus("200")}} `OK` と同等のレスポンスは {{HTTPHeader("Cache-Control")}}、{{HTTPHeader("Content-Location")}}、{{HTTPHeader("Date")}}、{{HTTPHeader("ETag")}}、{{HTTPHeader("Expires")}} および {{HTTPHeader("Vary")}} ヘッダーを含みます。
+このレスポンスコードは、リクエストが[条件付き](/ja/docs/Web/HTTP/Conditional_requests)の {{HTTPMethod("GET")}} や {{HTTPMethod("HEAD")}} リクエストに {{HTTPHeader("If-None-Match")}} もしくは {{HTTPHeader("If-Modified-Since")}} ヘッダーが付いており、条件が 'false' と評価された時に送信されます。
+これは、クライアントがキャッシュしたリソースがまだ有効であり、条件が 'true' と評価された場合、サーバーはリソースとともに {{HTTPStatus("200", "200 OK")}} レスポンスを送信したであろうことを確認します。
+詳細については、 [HTTP キャッシュ](/ja/docs/Web/HTTP/Caching)を参照してください。
+
+レスポンスには本体を含んではならず、 {{HTTPStatus("200")}} レスポンスで送信されるであろう次のようなヘッダーを記載しなければなりません。
+
+- {{HTTPHeader("Cache-Control")}}
+- {{HTTPHeader("Content-Location")}}
+- {{HTTPHeader("Date")}}
+- {{HTTPHeader("ETag")}}
+- {{HTTPHeader("Expires")}}
+- {{HTTPHeader("Vary")}}
> [!NOTE]
> 多くのブラウザーの[開発ツールのネットワークパネル](https://firefox-source-docs.mozilla.org/devtools-user/network_monitor/index.html)は `304` レスポンスにつながる追加のリクエストを作成するため、開発者はローカルキャッシュへのアクセスを見ることができます。
## ステータス
-```
+```http
304 Not Modified
```
-## 仕様
+## 例
+
+### 条件付きリクエストに対する 304 レスポンス
+
+下記の例は、条件付きリクエストヘッダーつきの [curl](https://curl.se/) を使用して作成された {{HTTPMethod("GET")}} リクエストを示しています。
+`--http1.1` フラグは、読みやすくするために HTTP/1.1 プロトコルを強制するために使用されています。
+
+最初のリクエストは、`If-Modified-Since` 条件を使用して未来の日付である 2050 年 11 月 21 日を設定しています。
+これは `false` と評価されるはずです。まだ現れていない時点以降にリソースが更新されることはありえないからです。
+
+```bash
+curl --http1.1 -I --header 'If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT' \
+ https://developer.mozilla.org/en-US/
+```
+
+これにより、次のような HTTP リクエストが発生します。
+
+```http
+GET /en-US/ HTTP/1.1
+Host: developer.mozilla.org
+User-Agent: curl/8.7.1
+Accept: */*
+If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT
+```
+
+リソースが {{HTTPHeader("If-Modified-Since")}} ヘッダーのタイムスタンプ後に更新された場合、現在のリソースバージョンではレスポンスは {{HTTPStatus("200", "200 OK")}} となりるはずです。
+代わりに `304` レスポンスを取得し、そのレスポンスには {{HTTPHeader("ETag")}}、{{HTTPHeader("Age")}}、{{HTTPHeader("Expires")}} の各ヘッダーが含まれ、リソースのキャッシュされたバージョンが最新であることを示します。
+
+```http
+HTTP/1.1 304 Not Modified
+Date: Wed, 28 Aug 2024 09:52:35 GMT
+Expires: Wed, 28 Aug 2024 10:01:53 GMT
+Age: 3279
+ETag: "b20a0973b226eeea30362acb81f9e0b3"
+Cache-Control: public, max-age=3600
+Vary: Accept-Encoding
+X-cache: hit
+Alt-Svc: clear
+```
+
+それでは、別の `curl` コマンドを実行し、前回レスポンスで取得した `etag` 値を {{HTTPHeader("If-None-Match")}} 条件とともに使用します(この `etag` はサーバー上のリソースの最新バージョンであるため、 `304 Not Modified` レスポンスが返されると予想されます)。
+
+```bash
+curl --http1.1 -I --header 'If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"' \
+ https://developer.mozilla.org/en-US/
+```
-| 仕様書 | タイトル |
-| ------------------------------------------- | ------------------------------------------------------------ |
-| {{RFC("7232", "304 Not Modified" , "4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
+これにより、次のような HTTP リクエストが発生します。
+
+```http
+GET /en-US/ HTTP/1.1
+Host: developer.mozilla.org
+User-Agent: curl/8.7.1
+Accept: */*
+If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"
+```
+
+リクエスト時点では `etag` の値が一致するため、エンティティタグは条件に合わず、`304` レスポンスが返されます。
+
+```http
+HTTP/1.1 304 Not Modified
+Date: Wed, 28 Aug 2024 10:36:35 GMT
+Expires: Wed, 28 Aug 2024 11:02:17 GMT
+Age: 662
+ETag: "b20a0973b226eeea30362acb81f9e0b3"
+Cache-Control: public, max-age=3600
+Vary: Accept-Encoding
+X-cache: hit
+Alt-Svc: clear
+```
-## ブラウザーの互換性
+## 仕様書
-{{Compat}}
+{{Specifications}}
## 互換性メモ
-- このレスポンスが永続的な接続上で誤って本文を含むと、ブラウザーの動作が異なります。詳細については [204 No Content](/ja/docs/Web/HTTP/Status/204) を参照してください。
+このレスポンスが永続的な接続上で誤って本文を含んだ場合、ブラウザーの動作はさまざまです。
+詳しくは {{HTTPStatus("204", "204 No Content")}} を参照してください。
## 関連情報
+- [HTTP のリダイレクト](/ja/docs/Web/HTTP/Redirections)
+- [HTTP レスポンスステータスコード](/ja/docs/Web/HTTP/Status)
+- [HTTP 条件付きリクエスト](/ja/docs/Web/HTTP/Conditional_requests)
- {{HTTPHeader("If-Modified-Since")}}
- {{HTTPHeader("If-None-Match")}}