From 9125d80ae7af17742549f23fe0bddfe01918be8f Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Thu, 18 Aug 2022 15:21:53 +0900 Subject: [PATCH 1/3] =?UTF-8?q?web/http=20=E4=BB=A5=E4=B8=8B=E3=82=92=20.m?= =?UTF-8?q?d=20=E3=81=B8=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{index.html => index.md} | 0 .../ja/web/http/basics_of_http/data_urls/{index.html => index.md} | 0 .../basics_of_http/evolution_of_http/{index.html => index.md} | 0 .../identifying_resources_on_the_web/{index.html => index.md} | 0 files/ja/web/http/basics_of_http/{index.html => index.md} | 0 .../mime_types/common_types/{index.html => index.md} | 0 .../http/basics_of_http/resource_urls/{index.html => index.md} | 0 .../{index.html => index.md} | 0 files/ja/web/http/caching/{index.html => index.md} | 0 files/ja/web/http/client_hints/{index.html => index.md} | 0 files/ja/web/http/compression/{index.html => index.md} | 0 .../configuring_servers_for_ogg_media/{index.html => index.md} | 0 .../connection_management_in_http_1.x/{index.html => index.md} | 0 .../corsalloworiginnotmatchingorigin/{index.html => index.md} | 0 .../http/cors/errors/corsdidnotsucceed/{index.html => index.md} | 0 .../ja/web/http/cors/errors/corsdisabled/{index.html => index.md} | 0 .../corsexternalredirectnotallowed/{index.html => index.md} | 0 .../cors/errors/corsinvalidallowheader/{index.html => index.md} | 0 .../cors/errors/corsinvalidallowmethod/{index.html => index.md} | 0 .../http/cors/errors/corsmethodnotfound/{index.html => index.md} | 0 .../errors/corsmissingallowcredentials/{index.html => index.md} | 0 .../corsmissingallowheaderfrompreflight/{index.html => index.md} | 0 .../cors/errors/corsmissingalloworigin/{index.html => index.md} | 0 .../corsmultiplealloworiginnotallowed/{index.html => index.md} | 0 .../errors/corsnotsupportingcredentials/{index.html => index.md} | 0 .../cors/errors/corsoriginheadernotadded/{index.html => index.md} | 0 .../errors/corspreflightdidnotsucceed/{index.html => index.md} | 0 .../http/cors/errors/corsrequestnothttp/{index.html => index.md} | 0 files/ja/web/http/cors/errors/{index.html => index.md} | 0 .../cross-origin_resource_policy_(corp)/{index.html => index.md} | 0 files/ja/web/http/feature_policy/{index.html => index.md} | 0 .../feature_policy/using_feature_policy/{index.html => index.md} | 0 .../web/http/headers/accept-ch-lifetime/{index.html => index.md} | 0 files/ja/web/http/headers/accept-ch/{index.html => index.md} | 0 files/ja/web/http/headers/accept-charset/{index.html => index.md} | 0 .../ja/web/http/headers/accept-encoding/{index.html => index.md} | 0 .../ja/web/http/headers/accept-language/{index.html => index.md} | 0 files/ja/web/http/headers/accept-patch/{index.html => index.md} | 0 files/ja/web/http/headers/accept-ranges/{index.html => index.md} | 0 files/ja/web/http/headers/accept/{index.html => index.md} | 0 .../access-control-allow-credentials/{index.html => index.md} | 0 .../headers/access-control-allow-headers/{index.html => index.md} | 0 .../headers/access-control-allow-methods/{index.html => index.md} | 0 .../headers/access-control-allow-origin/{index.html => index.md} | 0 .../access-control-expose-headers/{index.html => index.md} | 0 .../http/headers/access-control-max-age/{index.html => index.md} | 0 .../access-control-request-headers/{index.html => index.md} | 0 .../access-control-request-method/{index.html => index.md} | 0 files/ja/web/http/headers/age/{index.html => index.md} | 0 files/ja/web/http/headers/allow/{index.html => index.md} | 0 files/ja/web/http/headers/alt-svc/{index.html => index.md} | 0 files/ja/web/http/headers/authorization/{index.html => index.md} | 0 .../ja/web/http/headers/clear-site-data/{index.html => index.md} | 0 .../web/http/headers/content-disposition/{index.html => index.md} | 0 .../ja/web/http/headers/content-encoding/{index.html => index.md} | 0 .../ja/web/http/headers/content-language/{index.html => index.md} | 0 files/ja/web/http/headers/content-length/{index.html => index.md} | 0 .../ja/web/http/headers/content-location/{index.html => index.md} | 0 files/ja/web/http/headers/content-range/{index.html => index.md} | 0 .../content-security-policy-report-only/{index.html => index.md} | 0 files/ja/web/http/headers/cookie/{index.html => index.md} | 0 .../headers/cross-origin-resource-policy/{index.html => index.md} | 0 files/ja/web/http/headers/date/{index.html => index.md} | 0 files/ja/web/http/headers/device-memory/{index.html => index.md} | 0 files/ja/web/http/headers/dpr/{index.html => index.md} | 0 files/ja/web/http/headers/early-data/{index.html => index.md} | 0 files/ja/web/http/headers/etag/{index.html => index.md} | 0 files/ja/web/http/headers/expect-ct/{index.html => index.md} | 0 files/ja/web/http/headers/expect/{index.html => index.md} | 0 files/ja/web/http/headers/expires/{index.html => index.md} | 0 files/ja/web/http/headers/from/{index.html => index.md} | 0 files/ja/web/http/headers/host/{index.html => index.md} | 0 files/ja/web/http/headers/if-match/{index.html => index.md} | 0 .../web/http/headers/if-modified-since/{index.html => index.md} | 0 files/ja/web/http/headers/if-none-match/{index.html => index.md} | 0 files/ja/web/http/headers/if-range/{index.html => index.md} | 0 .../web/http/headers/if-unmodified-since/{index.html => index.md} | 0 files/ja/web/http/headers/keep-alive/{index.html => index.md} | 0 files/ja/web/http/headers/last-modified/{index.html => index.md} | 0 files/ja/web/http/headers/location/{index.html => index.md} | 0 files/ja/web/http/headers/nel/{index.html => index.md} | 0 files/ja/web/http/headers/origin/{index.html => index.md} | 0 files/ja/web/http/headers/pragma/{index.html => index.md} | 0 .../web/http/headers/proxy-authenticate/{index.html => index.md} | 0 .../web/http/headers/proxy-authorization/{index.html => index.md} | 0 files/ja/web/http/headers/range/{index.html => index.md} | 0 files/ja/web/http/headers/referer/{index.html => index.md} | 0 files/ja/web/http/headers/retry-after/{index.html => index.md} | 0 files/ja/web/http/headers/server-timing/{index.html => index.md} | 0 files/ja/web/http/headers/server/{index.html => index.md} | 0 .../web/http/headers/set-cookie/samesite/{index.html => index.md} | 0 files/ja/web/http/headers/sourcemap/{index.html => index.md} | 0 .../headers/strict-transport-security/{index.html => index.md} | 0 .../web/http/headers/timing-allow-origin/{index.html => index.md} | 0 files/ja/web/http/headers/tk/{index.html => index.md} | 0 .../web/http/headers/transfer-encoding/{index.html => index.md} | 0 files/ja/web/http/headers/user-agent/{index.html => index.md} | 0 files/ja/web/http/headers/vary/{index.html => index.md} | 0 files/ja/web/http/headers/via/{index.html => index.md} | 0 files/ja/web/http/headers/warning/{index.html => index.md} | 0 .../http/headers/x-dns-prefetch-control/{index.html => index.md} | 0 .../ja/web/http/headers/x-xss-protection/{index.html => index.md} | 0 files/ja/web/http/{index.html => index.md} | 0 files/ja/web/http/link_prefetching_faq/{index.html => index.md} | 0 files/ja/web/http/messages/{index.html => index.md} | 0 files/ja/web/http/network_error_logging/{index.html => index.md} | 0 files/ja/web/http/overview/{index.html => index.md} | 0 .../web/http/protocol_upgrade_mechanism/{index.html => index.md} | 0 .../web/http/proxy_servers_and_tunneling/{index.html => index.md} | 0 files/ja/web/http/range_requests/{index.html => index.md} | 0 files/ja/web/http/redirections/{index.html => index.md} | 0 .../http/resources_and_specifications/{index.html => index.md} | 0 files/ja/web/http/resources_and_uris/{index.html => index.md} | 0 files/ja/web/http/session/{index.html => index.md} | 0 files/ja/web/http/status/100/{index.html => index.md} | 0 files/ja/web/http/status/101/{index.html => index.md} | 0 files/ja/web/http/status/103/{index.html => index.md} | 0 files/ja/web/http/status/200/{index.html => index.md} | 0 files/ja/web/http/status/201/{index.html => index.md} | 0 files/ja/web/http/status/203/{index.html => index.md} | 0 files/ja/web/http/status/204/{index.html => index.md} | 0 files/ja/web/http/status/205/{index.html => index.md} | 0 files/ja/web/http/status/206/{index.html => index.md} | 0 files/ja/web/http/status/300/{index.html => index.md} | 0 files/ja/web/http/status/301/{index.html => index.md} | 0 files/ja/web/http/status/302/{index.html => index.md} | 0 files/ja/web/http/status/303/{index.html => index.md} | 0 files/ja/web/http/status/304/{index.html => index.md} | 0 files/ja/web/http/status/307/{index.html => index.md} | 0 files/ja/web/http/status/308/{index.html => index.md} | 0 files/ja/web/http/status/400/{index.html => index.md} | 0 files/ja/web/http/status/401/{index.html => index.md} | 0 files/ja/web/http/status/402/{index.html => index.md} | 0 files/ja/web/http/status/403/{index.html => index.md} | 0 files/ja/web/http/status/404/{index.html => index.md} | 0 files/ja/web/http/status/405/{index.html => index.md} | 0 files/ja/web/http/status/406/{index.html => index.md} | 0 files/ja/web/http/status/407/{index.html => index.md} | 0 files/ja/web/http/status/408/{index.html => index.md} | 0 files/ja/web/http/status/409/{index.html => index.md} | 0 files/ja/web/http/status/410/{index.html => index.md} | 0 files/ja/web/http/status/411/{index.html => index.md} | 0 files/ja/web/http/status/412/{index.html => index.md} | 0 files/ja/web/http/status/413/{index.html => index.md} | 0 files/ja/web/http/status/414/{index.html => index.md} | 0 files/ja/web/http/status/415/{index.html => index.md} | 0 files/ja/web/http/status/416/{index.html => index.md} | 0 files/ja/web/http/status/417/{index.html => index.md} | 0 files/ja/web/http/status/418/{index.html => index.md} | 0 files/ja/web/http/status/422/{index.html => index.md} | 0 files/ja/web/http/status/425/{index.html => index.md} | 0 files/ja/web/http/status/426/{index.html => index.md} | 0 files/ja/web/http/status/428/{index.html => index.md} | 0 files/ja/web/http/status/429/{index.html => index.md} | 0 files/ja/web/http/status/431/{index.html => index.md} | 0 files/ja/web/http/status/451/{index.html => index.md} | 0 files/ja/web/http/status/500/{index.html => index.md} | 0 files/ja/web/http/status/501/{index.html => index.md} | 0 files/ja/web/http/status/502/{index.html => index.md} | 0 files/ja/web/http/status/503/{index.html => index.md} | 0 files/ja/web/http/status/504/{index.html => index.md} | 0 files/ja/web/http/status/505/{index.html => index.md} | 0 files/ja/web/http/status/506/{index.html => index.md} | 0 files/ja/web/http/status/507/{index.html => index.md} | 0 files/ja/web/http/status/508/{index.html => index.md} | 0 files/ja/web/http/status/510/{index.html => index.md} | 0 files/ja/web/http/status/511/{index.html => index.md} | 0 167 files changed, 0 insertions(+), 0 deletions(-) rename files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/{index.html => index.md} (100%) rename files/ja/web/http/basics_of_http/data_urls/{index.html => index.md} (100%) rename files/ja/web/http/basics_of_http/evolution_of_http/{index.html => index.md} (100%) rename files/ja/web/http/basics_of_http/identifying_resources_on_the_web/{index.html => index.md} (100%) rename files/ja/web/http/basics_of_http/{index.html => index.md} (100%) rename files/ja/web/http/basics_of_http/mime_types/common_types/{index.html => index.md} (100%) rename files/ja/web/http/basics_of_http/resource_urls/{index.html => index.md} (100%) rename files/ja/web/http/browser_detection_using_the_user_agent/{index.html => index.md} (100%) rename files/ja/web/http/caching/{index.html => index.md} (100%) rename files/ja/web/http/client_hints/{index.html => index.md} (100%) rename files/ja/web/http/compression/{index.html => index.md} (100%) rename files/ja/web/http/configuring_servers_for_ogg_media/{index.html => index.md} (100%) rename files/ja/web/http/connection_management_in_http_1.x/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsdidnotsucceed/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsdisabled/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsexternalredirectnotallowed/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsinvalidallowheader/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsinvalidallowmethod/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsmethodnotfound/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsmissingallowcredentials/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsmissingalloworigin/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsnotsupportingcredentials/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsoriginheadernotadded/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corspreflightdidnotsucceed/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/corsrequestnothttp/{index.html => index.md} (100%) rename files/ja/web/http/cors/errors/{index.html => index.md} (100%) rename files/ja/web/http/cross-origin_resource_policy_(corp)/{index.html => index.md} (100%) rename files/ja/web/http/feature_policy/{index.html => index.md} (100%) rename files/ja/web/http/feature_policy/using_feature_policy/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-ch-lifetime/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-ch/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-charset/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-encoding/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-language/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-patch/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept-ranges/{index.html => index.md} (100%) rename files/ja/web/http/headers/accept/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-allow-credentials/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-allow-headers/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-allow-methods/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-allow-origin/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-expose-headers/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-max-age/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-request-headers/{index.html => index.md} (100%) rename files/ja/web/http/headers/access-control-request-method/{index.html => index.md} (100%) rename files/ja/web/http/headers/age/{index.html => index.md} (100%) rename files/ja/web/http/headers/allow/{index.html => index.md} (100%) rename files/ja/web/http/headers/alt-svc/{index.html => index.md} (100%) rename files/ja/web/http/headers/authorization/{index.html => index.md} (100%) rename files/ja/web/http/headers/clear-site-data/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-disposition/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-encoding/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-language/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-length/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-location/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-range/{index.html => index.md} (100%) rename files/ja/web/http/headers/content-security-policy-report-only/{index.html => index.md} (100%) rename files/ja/web/http/headers/cookie/{index.html => index.md} (100%) rename files/ja/web/http/headers/cross-origin-resource-policy/{index.html => index.md} (100%) rename files/ja/web/http/headers/date/{index.html => index.md} (100%) rename files/ja/web/http/headers/device-memory/{index.html => index.md} (100%) rename files/ja/web/http/headers/dpr/{index.html => index.md} (100%) rename files/ja/web/http/headers/early-data/{index.html => index.md} (100%) rename files/ja/web/http/headers/etag/{index.html => index.md} (100%) rename files/ja/web/http/headers/expect-ct/{index.html => index.md} (100%) rename files/ja/web/http/headers/expect/{index.html => index.md} (100%) rename files/ja/web/http/headers/expires/{index.html => index.md} (100%) rename files/ja/web/http/headers/from/{index.html => index.md} (100%) rename files/ja/web/http/headers/host/{index.html => index.md} (100%) rename files/ja/web/http/headers/if-match/{index.html => index.md} (100%) rename files/ja/web/http/headers/if-modified-since/{index.html => index.md} (100%) rename files/ja/web/http/headers/if-none-match/{index.html => index.md} (100%) rename files/ja/web/http/headers/if-range/{index.html => index.md} (100%) rename files/ja/web/http/headers/if-unmodified-since/{index.html => index.md} (100%) rename files/ja/web/http/headers/keep-alive/{index.html => index.md} (100%) rename files/ja/web/http/headers/last-modified/{index.html => index.md} (100%) rename files/ja/web/http/headers/location/{index.html => index.md} (100%) rename files/ja/web/http/headers/nel/{index.html => index.md} (100%) rename files/ja/web/http/headers/origin/{index.html => index.md} (100%) rename files/ja/web/http/headers/pragma/{index.html => index.md} (100%) rename files/ja/web/http/headers/proxy-authenticate/{index.html => index.md} (100%) rename files/ja/web/http/headers/proxy-authorization/{index.html => index.md} (100%) rename files/ja/web/http/headers/range/{index.html => index.md} (100%) rename files/ja/web/http/headers/referer/{index.html => index.md} (100%) rename files/ja/web/http/headers/retry-after/{index.html => index.md} (100%) rename files/ja/web/http/headers/server-timing/{index.html => index.md} (100%) rename files/ja/web/http/headers/server/{index.html => index.md} (100%) rename files/ja/web/http/headers/set-cookie/samesite/{index.html => index.md} (100%) rename files/ja/web/http/headers/sourcemap/{index.html => index.md} (100%) rename files/ja/web/http/headers/strict-transport-security/{index.html => index.md} (100%) rename files/ja/web/http/headers/timing-allow-origin/{index.html => index.md} (100%) rename files/ja/web/http/headers/tk/{index.html => index.md} (100%) rename files/ja/web/http/headers/transfer-encoding/{index.html => index.md} (100%) rename files/ja/web/http/headers/user-agent/{index.html => index.md} (100%) rename files/ja/web/http/headers/vary/{index.html => index.md} (100%) rename files/ja/web/http/headers/via/{index.html => index.md} (100%) rename files/ja/web/http/headers/warning/{index.html => index.md} (100%) rename files/ja/web/http/headers/x-dns-prefetch-control/{index.html => index.md} (100%) rename files/ja/web/http/headers/x-xss-protection/{index.html => index.md} (100%) rename files/ja/web/http/{index.html => index.md} (100%) rename files/ja/web/http/link_prefetching_faq/{index.html => index.md} (100%) rename files/ja/web/http/messages/{index.html => index.md} (100%) rename files/ja/web/http/network_error_logging/{index.html => index.md} (100%) rename files/ja/web/http/overview/{index.html => index.md} (100%) rename files/ja/web/http/protocol_upgrade_mechanism/{index.html => index.md} (100%) rename files/ja/web/http/proxy_servers_and_tunneling/{index.html => index.md} (100%) rename files/ja/web/http/range_requests/{index.html => index.md} (100%) rename files/ja/web/http/redirections/{index.html => index.md} (100%) rename files/ja/web/http/resources_and_specifications/{index.html => index.md} (100%) rename files/ja/web/http/resources_and_uris/{index.html => index.md} (100%) rename files/ja/web/http/session/{index.html => index.md} (100%) rename files/ja/web/http/status/100/{index.html => index.md} (100%) rename files/ja/web/http/status/101/{index.html => index.md} (100%) rename files/ja/web/http/status/103/{index.html => index.md} (100%) rename files/ja/web/http/status/200/{index.html => index.md} (100%) rename files/ja/web/http/status/201/{index.html => index.md} (100%) rename files/ja/web/http/status/203/{index.html => index.md} (100%) rename files/ja/web/http/status/204/{index.html => index.md} (100%) rename files/ja/web/http/status/205/{index.html => index.md} (100%) rename files/ja/web/http/status/206/{index.html => index.md} (100%) rename files/ja/web/http/status/300/{index.html => index.md} (100%) rename files/ja/web/http/status/301/{index.html => index.md} (100%) rename files/ja/web/http/status/302/{index.html => index.md} (100%) rename files/ja/web/http/status/303/{index.html => index.md} (100%) rename files/ja/web/http/status/304/{index.html => index.md} (100%) rename files/ja/web/http/status/307/{index.html => index.md} (100%) rename files/ja/web/http/status/308/{index.html => index.md} (100%) rename files/ja/web/http/status/400/{index.html => index.md} (100%) rename files/ja/web/http/status/401/{index.html => index.md} (100%) rename files/ja/web/http/status/402/{index.html => index.md} (100%) rename files/ja/web/http/status/403/{index.html => index.md} (100%) rename files/ja/web/http/status/404/{index.html => index.md} (100%) rename files/ja/web/http/status/405/{index.html => index.md} (100%) rename files/ja/web/http/status/406/{index.html => index.md} (100%) rename files/ja/web/http/status/407/{index.html => index.md} (100%) rename files/ja/web/http/status/408/{index.html => index.md} (100%) rename files/ja/web/http/status/409/{index.html => index.md} (100%) rename files/ja/web/http/status/410/{index.html => index.md} (100%) rename files/ja/web/http/status/411/{index.html => index.md} (100%) rename files/ja/web/http/status/412/{index.html => index.md} (100%) rename files/ja/web/http/status/413/{index.html => index.md} (100%) rename files/ja/web/http/status/414/{index.html => index.md} (100%) rename files/ja/web/http/status/415/{index.html => index.md} (100%) rename files/ja/web/http/status/416/{index.html => index.md} (100%) rename files/ja/web/http/status/417/{index.html => index.md} (100%) rename files/ja/web/http/status/418/{index.html => index.md} (100%) rename files/ja/web/http/status/422/{index.html => index.md} (100%) rename files/ja/web/http/status/425/{index.html => index.md} (100%) rename files/ja/web/http/status/426/{index.html => index.md} (100%) rename files/ja/web/http/status/428/{index.html => index.md} (100%) rename files/ja/web/http/status/429/{index.html => index.md} (100%) rename files/ja/web/http/status/431/{index.html => index.md} (100%) rename files/ja/web/http/status/451/{index.html => index.md} (100%) rename files/ja/web/http/status/500/{index.html => index.md} (100%) rename files/ja/web/http/status/501/{index.html => index.md} (100%) rename files/ja/web/http/status/502/{index.html => index.md} (100%) rename files/ja/web/http/status/503/{index.html => index.md} (100%) rename files/ja/web/http/status/504/{index.html => index.md} (100%) rename files/ja/web/http/status/505/{index.html => index.md} (100%) rename files/ja/web/http/status/506/{index.html => index.md} (100%) rename files/ja/web/http/status/507/{index.html => index.md} (100%) rename files/ja/web/http/status/508/{index.html => index.md} (100%) rename files/ja/web/http/status/510/{index.html => index.md} (100%) rename files/ja/web/http/status/511/{index.html => index.md} (100%) diff --git a/files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.html b/files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.html rename to files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md diff --git a/files/ja/web/http/basics_of_http/data_urls/index.html b/files/ja/web/http/basics_of_http/data_urls/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/data_urls/index.html rename to files/ja/web/http/basics_of_http/data_urls/index.md diff --git a/files/ja/web/http/basics_of_http/evolution_of_http/index.html b/files/ja/web/http/basics_of_http/evolution_of_http/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/evolution_of_http/index.html rename to files/ja/web/http/basics_of_http/evolution_of_http/index.md diff --git a/files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.html b/files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.html rename to files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.md diff --git a/files/ja/web/http/basics_of_http/index.html b/files/ja/web/http/basics_of_http/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/index.html rename to files/ja/web/http/basics_of_http/index.md diff --git a/files/ja/web/http/basics_of_http/mime_types/common_types/index.html b/files/ja/web/http/basics_of_http/mime_types/common_types/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/mime_types/common_types/index.html rename to files/ja/web/http/basics_of_http/mime_types/common_types/index.md diff --git a/files/ja/web/http/basics_of_http/resource_urls/index.html b/files/ja/web/http/basics_of_http/resource_urls/index.md similarity index 100% rename from files/ja/web/http/basics_of_http/resource_urls/index.html rename to files/ja/web/http/basics_of_http/resource_urls/index.md diff --git a/files/ja/web/http/browser_detection_using_the_user_agent/index.html b/files/ja/web/http/browser_detection_using_the_user_agent/index.md similarity index 100% rename from files/ja/web/http/browser_detection_using_the_user_agent/index.html rename to files/ja/web/http/browser_detection_using_the_user_agent/index.md diff --git a/files/ja/web/http/caching/index.html b/files/ja/web/http/caching/index.md similarity index 100% rename from files/ja/web/http/caching/index.html rename to files/ja/web/http/caching/index.md diff --git a/files/ja/web/http/client_hints/index.html b/files/ja/web/http/client_hints/index.md similarity index 100% rename from files/ja/web/http/client_hints/index.html rename to files/ja/web/http/client_hints/index.md diff --git a/files/ja/web/http/compression/index.html b/files/ja/web/http/compression/index.md similarity index 100% rename from files/ja/web/http/compression/index.html rename to files/ja/web/http/compression/index.md diff --git a/files/ja/web/http/configuring_servers_for_ogg_media/index.html b/files/ja/web/http/configuring_servers_for_ogg_media/index.md similarity index 100% rename from files/ja/web/http/configuring_servers_for_ogg_media/index.html rename to files/ja/web/http/configuring_servers_for_ogg_media/index.md diff --git a/files/ja/web/http/connection_management_in_http_1.x/index.html b/files/ja/web/http/connection_management_in_http_1.x/index.md similarity index 100% rename from files/ja/web/http/connection_management_in_http_1.x/index.html rename to files/ja/web/http/connection_management_in_http_1.x/index.md diff --git a/files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.html b/files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.html rename to files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md diff --git a/files/ja/web/http/cors/errors/corsdidnotsucceed/index.html b/files/ja/web/http/cors/errors/corsdidnotsucceed/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsdidnotsucceed/index.html rename to files/ja/web/http/cors/errors/corsdidnotsucceed/index.md diff --git a/files/ja/web/http/cors/errors/corsdisabled/index.html b/files/ja/web/http/cors/errors/corsdisabled/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsdisabled/index.html rename to files/ja/web/http/cors/errors/corsdisabled/index.md diff --git a/files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.html b/files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.html rename to files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.md diff --git a/files/ja/web/http/cors/errors/corsinvalidallowheader/index.html b/files/ja/web/http/cors/errors/corsinvalidallowheader/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsinvalidallowheader/index.html rename to files/ja/web/http/cors/errors/corsinvalidallowheader/index.md diff --git a/files/ja/web/http/cors/errors/corsinvalidallowmethod/index.html b/files/ja/web/http/cors/errors/corsinvalidallowmethod/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsinvalidallowmethod/index.html rename to files/ja/web/http/cors/errors/corsinvalidallowmethod/index.md diff --git a/files/ja/web/http/cors/errors/corsmethodnotfound/index.html b/files/ja/web/http/cors/errors/corsmethodnotfound/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsmethodnotfound/index.html rename to files/ja/web/http/cors/errors/corsmethodnotfound/index.md diff --git a/files/ja/web/http/cors/errors/corsmissingallowcredentials/index.html b/files/ja/web/http/cors/errors/corsmissingallowcredentials/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsmissingallowcredentials/index.html rename to files/ja/web/http/cors/errors/corsmissingallowcredentials/index.md diff --git a/files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.html b/files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.html rename to files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.md diff --git a/files/ja/web/http/cors/errors/corsmissingalloworigin/index.html b/files/ja/web/http/cors/errors/corsmissingalloworigin/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsmissingalloworigin/index.html rename to files/ja/web/http/cors/errors/corsmissingalloworigin/index.md diff --git a/files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.html b/files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.html rename to files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.md diff --git a/files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.html b/files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.html rename to files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.md diff --git a/files/ja/web/http/cors/errors/corsoriginheadernotadded/index.html b/files/ja/web/http/cors/errors/corsoriginheadernotadded/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsoriginheadernotadded/index.html rename to files/ja/web/http/cors/errors/corsoriginheadernotadded/index.md diff --git a/files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.html b/files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.html rename to files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.md diff --git a/files/ja/web/http/cors/errors/corsrequestnothttp/index.html b/files/ja/web/http/cors/errors/corsrequestnothttp/index.md similarity index 100% rename from files/ja/web/http/cors/errors/corsrequestnothttp/index.html rename to files/ja/web/http/cors/errors/corsrequestnothttp/index.md diff --git a/files/ja/web/http/cors/errors/index.html b/files/ja/web/http/cors/errors/index.md similarity index 100% rename from files/ja/web/http/cors/errors/index.html rename to files/ja/web/http/cors/errors/index.md diff --git a/files/ja/web/http/cross-origin_resource_policy_(corp)/index.html b/files/ja/web/http/cross-origin_resource_policy_(corp)/index.md similarity index 100% rename from files/ja/web/http/cross-origin_resource_policy_(corp)/index.html rename to files/ja/web/http/cross-origin_resource_policy_(corp)/index.md diff --git a/files/ja/web/http/feature_policy/index.html b/files/ja/web/http/feature_policy/index.md similarity index 100% rename from files/ja/web/http/feature_policy/index.html rename to files/ja/web/http/feature_policy/index.md diff --git a/files/ja/web/http/feature_policy/using_feature_policy/index.html b/files/ja/web/http/feature_policy/using_feature_policy/index.md similarity index 100% rename from files/ja/web/http/feature_policy/using_feature_policy/index.html rename to files/ja/web/http/feature_policy/using_feature_policy/index.md diff --git a/files/ja/web/http/headers/accept-ch-lifetime/index.html b/files/ja/web/http/headers/accept-ch-lifetime/index.md similarity index 100% rename from files/ja/web/http/headers/accept-ch-lifetime/index.html rename to files/ja/web/http/headers/accept-ch-lifetime/index.md diff --git a/files/ja/web/http/headers/accept-ch/index.html b/files/ja/web/http/headers/accept-ch/index.md similarity index 100% rename from files/ja/web/http/headers/accept-ch/index.html rename to files/ja/web/http/headers/accept-ch/index.md diff --git a/files/ja/web/http/headers/accept-charset/index.html b/files/ja/web/http/headers/accept-charset/index.md similarity index 100% rename from files/ja/web/http/headers/accept-charset/index.html rename to files/ja/web/http/headers/accept-charset/index.md diff --git a/files/ja/web/http/headers/accept-encoding/index.html b/files/ja/web/http/headers/accept-encoding/index.md similarity index 100% rename from files/ja/web/http/headers/accept-encoding/index.html rename to files/ja/web/http/headers/accept-encoding/index.md diff --git a/files/ja/web/http/headers/accept-language/index.html b/files/ja/web/http/headers/accept-language/index.md similarity index 100% rename from files/ja/web/http/headers/accept-language/index.html rename to files/ja/web/http/headers/accept-language/index.md diff --git a/files/ja/web/http/headers/accept-patch/index.html b/files/ja/web/http/headers/accept-patch/index.md similarity index 100% rename from files/ja/web/http/headers/accept-patch/index.html rename to files/ja/web/http/headers/accept-patch/index.md diff --git a/files/ja/web/http/headers/accept-ranges/index.html b/files/ja/web/http/headers/accept-ranges/index.md similarity index 100% rename from files/ja/web/http/headers/accept-ranges/index.html rename to files/ja/web/http/headers/accept-ranges/index.md diff --git a/files/ja/web/http/headers/accept/index.html b/files/ja/web/http/headers/accept/index.md similarity index 100% rename from files/ja/web/http/headers/accept/index.html rename to files/ja/web/http/headers/accept/index.md diff --git a/files/ja/web/http/headers/access-control-allow-credentials/index.html b/files/ja/web/http/headers/access-control-allow-credentials/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-allow-credentials/index.html rename to files/ja/web/http/headers/access-control-allow-credentials/index.md diff --git a/files/ja/web/http/headers/access-control-allow-headers/index.html b/files/ja/web/http/headers/access-control-allow-headers/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-allow-headers/index.html rename to files/ja/web/http/headers/access-control-allow-headers/index.md diff --git a/files/ja/web/http/headers/access-control-allow-methods/index.html b/files/ja/web/http/headers/access-control-allow-methods/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-allow-methods/index.html rename to files/ja/web/http/headers/access-control-allow-methods/index.md diff --git a/files/ja/web/http/headers/access-control-allow-origin/index.html b/files/ja/web/http/headers/access-control-allow-origin/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-allow-origin/index.html rename to files/ja/web/http/headers/access-control-allow-origin/index.md diff --git a/files/ja/web/http/headers/access-control-expose-headers/index.html b/files/ja/web/http/headers/access-control-expose-headers/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-expose-headers/index.html rename to files/ja/web/http/headers/access-control-expose-headers/index.md diff --git a/files/ja/web/http/headers/access-control-max-age/index.html b/files/ja/web/http/headers/access-control-max-age/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-max-age/index.html rename to files/ja/web/http/headers/access-control-max-age/index.md diff --git a/files/ja/web/http/headers/access-control-request-headers/index.html b/files/ja/web/http/headers/access-control-request-headers/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-request-headers/index.html rename to files/ja/web/http/headers/access-control-request-headers/index.md diff --git a/files/ja/web/http/headers/access-control-request-method/index.html b/files/ja/web/http/headers/access-control-request-method/index.md similarity index 100% rename from files/ja/web/http/headers/access-control-request-method/index.html rename to files/ja/web/http/headers/access-control-request-method/index.md diff --git a/files/ja/web/http/headers/age/index.html b/files/ja/web/http/headers/age/index.md similarity index 100% rename from files/ja/web/http/headers/age/index.html rename to files/ja/web/http/headers/age/index.md diff --git a/files/ja/web/http/headers/allow/index.html b/files/ja/web/http/headers/allow/index.md similarity index 100% rename from files/ja/web/http/headers/allow/index.html rename to files/ja/web/http/headers/allow/index.md diff --git a/files/ja/web/http/headers/alt-svc/index.html b/files/ja/web/http/headers/alt-svc/index.md similarity index 100% rename from files/ja/web/http/headers/alt-svc/index.html rename to files/ja/web/http/headers/alt-svc/index.md diff --git a/files/ja/web/http/headers/authorization/index.html b/files/ja/web/http/headers/authorization/index.md similarity index 100% rename from files/ja/web/http/headers/authorization/index.html rename to files/ja/web/http/headers/authorization/index.md diff --git a/files/ja/web/http/headers/clear-site-data/index.html b/files/ja/web/http/headers/clear-site-data/index.md similarity index 100% rename from files/ja/web/http/headers/clear-site-data/index.html rename to files/ja/web/http/headers/clear-site-data/index.md diff --git a/files/ja/web/http/headers/content-disposition/index.html b/files/ja/web/http/headers/content-disposition/index.md similarity index 100% rename from files/ja/web/http/headers/content-disposition/index.html rename to files/ja/web/http/headers/content-disposition/index.md diff --git a/files/ja/web/http/headers/content-encoding/index.html b/files/ja/web/http/headers/content-encoding/index.md similarity index 100% rename from files/ja/web/http/headers/content-encoding/index.html rename to files/ja/web/http/headers/content-encoding/index.md diff --git a/files/ja/web/http/headers/content-language/index.html b/files/ja/web/http/headers/content-language/index.md similarity index 100% rename from files/ja/web/http/headers/content-language/index.html rename to files/ja/web/http/headers/content-language/index.md diff --git a/files/ja/web/http/headers/content-length/index.html b/files/ja/web/http/headers/content-length/index.md similarity index 100% rename from files/ja/web/http/headers/content-length/index.html rename to files/ja/web/http/headers/content-length/index.md diff --git a/files/ja/web/http/headers/content-location/index.html b/files/ja/web/http/headers/content-location/index.md similarity index 100% rename from files/ja/web/http/headers/content-location/index.html rename to files/ja/web/http/headers/content-location/index.md diff --git a/files/ja/web/http/headers/content-range/index.html b/files/ja/web/http/headers/content-range/index.md similarity index 100% rename from files/ja/web/http/headers/content-range/index.html rename to files/ja/web/http/headers/content-range/index.md diff --git a/files/ja/web/http/headers/content-security-policy-report-only/index.html b/files/ja/web/http/headers/content-security-policy-report-only/index.md similarity index 100% rename from files/ja/web/http/headers/content-security-policy-report-only/index.html rename to files/ja/web/http/headers/content-security-policy-report-only/index.md diff --git a/files/ja/web/http/headers/cookie/index.html b/files/ja/web/http/headers/cookie/index.md similarity index 100% rename from files/ja/web/http/headers/cookie/index.html rename to files/ja/web/http/headers/cookie/index.md diff --git a/files/ja/web/http/headers/cross-origin-resource-policy/index.html b/files/ja/web/http/headers/cross-origin-resource-policy/index.md similarity index 100% rename from files/ja/web/http/headers/cross-origin-resource-policy/index.html rename to files/ja/web/http/headers/cross-origin-resource-policy/index.md diff --git a/files/ja/web/http/headers/date/index.html b/files/ja/web/http/headers/date/index.md similarity index 100% rename from files/ja/web/http/headers/date/index.html rename to files/ja/web/http/headers/date/index.md diff --git a/files/ja/web/http/headers/device-memory/index.html b/files/ja/web/http/headers/device-memory/index.md similarity index 100% rename from files/ja/web/http/headers/device-memory/index.html rename to files/ja/web/http/headers/device-memory/index.md diff --git a/files/ja/web/http/headers/dpr/index.html b/files/ja/web/http/headers/dpr/index.md similarity index 100% rename from files/ja/web/http/headers/dpr/index.html rename to files/ja/web/http/headers/dpr/index.md diff --git a/files/ja/web/http/headers/early-data/index.html b/files/ja/web/http/headers/early-data/index.md similarity index 100% rename from files/ja/web/http/headers/early-data/index.html rename to files/ja/web/http/headers/early-data/index.md diff --git a/files/ja/web/http/headers/etag/index.html b/files/ja/web/http/headers/etag/index.md similarity index 100% rename from files/ja/web/http/headers/etag/index.html rename to files/ja/web/http/headers/etag/index.md diff --git a/files/ja/web/http/headers/expect-ct/index.html b/files/ja/web/http/headers/expect-ct/index.md similarity index 100% rename from files/ja/web/http/headers/expect-ct/index.html rename to files/ja/web/http/headers/expect-ct/index.md diff --git a/files/ja/web/http/headers/expect/index.html b/files/ja/web/http/headers/expect/index.md similarity index 100% rename from files/ja/web/http/headers/expect/index.html rename to files/ja/web/http/headers/expect/index.md diff --git a/files/ja/web/http/headers/expires/index.html b/files/ja/web/http/headers/expires/index.md similarity index 100% rename from files/ja/web/http/headers/expires/index.html rename to files/ja/web/http/headers/expires/index.md diff --git a/files/ja/web/http/headers/from/index.html b/files/ja/web/http/headers/from/index.md similarity index 100% rename from files/ja/web/http/headers/from/index.html rename to files/ja/web/http/headers/from/index.md diff --git a/files/ja/web/http/headers/host/index.html b/files/ja/web/http/headers/host/index.md similarity index 100% rename from files/ja/web/http/headers/host/index.html rename to files/ja/web/http/headers/host/index.md diff --git a/files/ja/web/http/headers/if-match/index.html b/files/ja/web/http/headers/if-match/index.md similarity index 100% rename from files/ja/web/http/headers/if-match/index.html rename to files/ja/web/http/headers/if-match/index.md diff --git a/files/ja/web/http/headers/if-modified-since/index.html b/files/ja/web/http/headers/if-modified-since/index.md similarity index 100% rename from files/ja/web/http/headers/if-modified-since/index.html rename to files/ja/web/http/headers/if-modified-since/index.md diff --git a/files/ja/web/http/headers/if-none-match/index.html b/files/ja/web/http/headers/if-none-match/index.md similarity index 100% rename from files/ja/web/http/headers/if-none-match/index.html rename to files/ja/web/http/headers/if-none-match/index.md diff --git a/files/ja/web/http/headers/if-range/index.html b/files/ja/web/http/headers/if-range/index.md similarity index 100% rename from files/ja/web/http/headers/if-range/index.html rename to files/ja/web/http/headers/if-range/index.md diff --git a/files/ja/web/http/headers/if-unmodified-since/index.html b/files/ja/web/http/headers/if-unmodified-since/index.md similarity index 100% rename from files/ja/web/http/headers/if-unmodified-since/index.html rename to files/ja/web/http/headers/if-unmodified-since/index.md diff --git a/files/ja/web/http/headers/keep-alive/index.html b/files/ja/web/http/headers/keep-alive/index.md similarity index 100% rename from files/ja/web/http/headers/keep-alive/index.html rename to files/ja/web/http/headers/keep-alive/index.md diff --git a/files/ja/web/http/headers/last-modified/index.html b/files/ja/web/http/headers/last-modified/index.md similarity index 100% rename from files/ja/web/http/headers/last-modified/index.html rename to files/ja/web/http/headers/last-modified/index.md diff --git a/files/ja/web/http/headers/location/index.html b/files/ja/web/http/headers/location/index.md similarity index 100% rename from files/ja/web/http/headers/location/index.html rename to files/ja/web/http/headers/location/index.md diff --git a/files/ja/web/http/headers/nel/index.html b/files/ja/web/http/headers/nel/index.md similarity index 100% rename from files/ja/web/http/headers/nel/index.html rename to files/ja/web/http/headers/nel/index.md diff --git a/files/ja/web/http/headers/origin/index.html b/files/ja/web/http/headers/origin/index.md similarity index 100% rename from files/ja/web/http/headers/origin/index.html rename to files/ja/web/http/headers/origin/index.md diff --git a/files/ja/web/http/headers/pragma/index.html b/files/ja/web/http/headers/pragma/index.md similarity index 100% rename from files/ja/web/http/headers/pragma/index.html rename to files/ja/web/http/headers/pragma/index.md diff --git a/files/ja/web/http/headers/proxy-authenticate/index.html b/files/ja/web/http/headers/proxy-authenticate/index.md similarity index 100% rename from files/ja/web/http/headers/proxy-authenticate/index.html rename to files/ja/web/http/headers/proxy-authenticate/index.md diff --git a/files/ja/web/http/headers/proxy-authorization/index.html b/files/ja/web/http/headers/proxy-authorization/index.md similarity index 100% rename from files/ja/web/http/headers/proxy-authorization/index.html rename to files/ja/web/http/headers/proxy-authorization/index.md diff --git a/files/ja/web/http/headers/range/index.html b/files/ja/web/http/headers/range/index.md similarity index 100% rename from files/ja/web/http/headers/range/index.html rename to files/ja/web/http/headers/range/index.md diff --git a/files/ja/web/http/headers/referer/index.html b/files/ja/web/http/headers/referer/index.md similarity index 100% rename from files/ja/web/http/headers/referer/index.html rename to files/ja/web/http/headers/referer/index.md diff --git a/files/ja/web/http/headers/retry-after/index.html b/files/ja/web/http/headers/retry-after/index.md similarity index 100% rename from files/ja/web/http/headers/retry-after/index.html rename to files/ja/web/http/headers/retry-after/index.md diff --git a/files/ja/web/http/headers/server-timing/index.html b/files/ja/web/http/headers/server-timing/index.md similarity index 100% rename from files/ja/web/http/headers/server-timing/index.html rename to files/ja/web/http/headers/server-timing/index.md diff --git a/files/ja/web/http/headers/server/index.html b/files/ja/web/http/headers/server/index.md similarity index 100% rename from files/ja/web/http/headers/server/index.html rename to files/ja/web/http/headers/server/index.md diff --git a/files/ja/web/http/headers/set-cookie/samesite/index.html b/files/ja/web/http/headers/set-cookie/samesite/index.md similarity index 100% rename from files/ja/web/http/headers/set-cookie/samesite/index.html rename to files/ja/web/http/headers/set-cookie/samesite/index.md diff --git a/files/ja/web/http/headers/sourcemap/index.html b/files/ja/web/http/headers/sourcemap/index.md similarity index 100% rename from files/ja/web/http/headers/sourcemap/index.html rename to files/ja/web/http/headers/sourcemap/index.md diff --git a/files/ja/web/http/headers/strict-transport-security/index.html b/files/ja/web/http/headers/strict-transport-security/index.md similarity index 100% rename from files/ja/web/http/headers/strict-transport-security/index.html rename to files/ja/web/http/headers/strict-transport-security/index.md diff --git a/files/ja/web/http/headers/timing-allow-origin/index.html b/files/ja/web/http/headers/timing-allow-origin/index.md similarity index 100% rename from files/ja/web/http/headers/timing-allow-origin/index.html rename to files/ja/web/http/headers/timing-allow-origin/index.md diff --git a/files/ja/web/http/headers/tk/index.html b/files/ja/web/http/headers/tk/index.md similarity index 100% rename from files/ja/web/http/headers/tk/index.html rename to files/ja/web/http/headers/tk/index.md diff --git a/files/ja/web/http/headers/transfer-encoding/index.html b/files/ja/web/http/headers/transfer-encoding/index.md similarity index 100% rename from files/ja/web/http/headers/transfer-encoding/index.html rename to files/ja/web/http/headers/transfer-encoding/index.md diff --git a/files/ja/web/http/headers/user-agent/index.html b/files/ja/web/http/headers/user-agent/index.md similarity index 100% rename from files/ja/web/http/headers/user-agent/index.html rename to files/ja/web/http/headers/user-agent/index.md diff --git a/files/ja/web/http/headers/vary/index.html b/files/ja/web/http/headers/vary/index.md similarity index 100% rename from files/ja/web/http/headers/vary/index.html rename to files/ja/web/http/headers/vary/index.md diff --git a/files/ja/web/http/headers/via/index.html b/files/ja/web/http/headers/via/index.md similarity index 100% rename from files/ja/web/http/headers/via/index.html rename to files/ja/web/http/headers/via/index.md diff --git a/files/ja/web/http/headers/warning/index.html b/files/ja/web/http/headers/warning/index.md similarity index 100% rename from files/ja/web/http/headers/warning/index.html rename to files/ja/web/http/headers/warning/index.md diff --git a/files/ja/web/http/headers/x-dns-prefetch-control/index.html b/files/ja/web/http/headers/x-dns-prefetch-control/index.md similarity index 100% rename from files/ja/web/http/headers/x-dns-prefetch-control/index.html rename to files/ja/web/http/headers/x-dns-prefetch-control/index.md diff --git a/files/ja/web/http/headers/x-xss-protection/index.html b/files/ja/web/http/headers/x-xss-protection/index.md similarity index 100% rename from files/ja/web/http/headers/x-xss-protection/index.html rename to files/ja/web/http/headers/x-xss-protection/index.md diff --git a/files/ja/web/http/index.html b/files/ja/web/http/index.md similarity index 100% rename from files/ja/web/http/index.html rename to files/ja/web/http/index.md diff --git a/files/ja/web/http/link_prefetching_faq/index.html b/files/ja/web/http/link_prefetching_faq/index.md similarity index 100% rename from files/ja/web/http/link_prefetching_faq/index.html rename to files/ja/web/http/link_prefetching_faq/index.md diff --git a/files/ja/web/http/messages/index.html b/files/ja/web/http/messages/index.md similarity index 100% rename from files/ja/web/http/messages/index.html rename to files/ja/web/http/messages/index.md diff --git a/files/ja/web/http/network_error_logging/index.html b/files/ja/web/http/network_error_logging/index.md similarity index 100% rename from files/ja/web/http/network_error_logging/index.html rename to files/ja/web/http/network_error_logging/index.md diff --git a/files/ja/web/http/overview/index.html b/files/ja/web/http/overview/index.md similarity index 100% rename from files/ja/web/http/overview/index.html rename to files/ja/web/http/overview/index.md diff --git a/files/ja/web/http/protocol_upgrade_mechanism/index.html b/files/ja/web/http/protocol_upgrade_mechanism/index.md similarity index 100% rename from files/ja/web/http/protocol_upgrade_mechanism/index.html rename to files/ja/web/http/protocol_upgrade_mechanism/index.md diff --git a/files/ja/web/http/proxy_servers_and_tunneling/index.html b/files/ja/web/http/proxy_servers_and_tunneling/index.md similarity index 100% rename from files/ja/web/http/proxy_servers_and_tunneling/index.html rename to files/ja/web/http/proxy_servers_and_tunneling/index.md diff --git a/files/ja/web/http/range_requests/index.html b/files/ja/web/http/range_requests/index.md similarity index 100% rename from files/ja/web/http/range_requests/index.html rename to files/ja/web/http/range_requests/index.md diff --git a/files/ja/web/http/redirections/index.html b/files/ja/web/http/redirections/index.md similarity index 100% rename from files/ja/web/http/redirections/index.html rename to files/ja/web/http/redirections/index.md diff --git a/files/ja/web/http/resources_and_specifications/index.html b/files/ja/web/http/resources_and_specifications/index.md similarity index 100% rename from files/ja/web/http/resources_and_specifications/index.html rename to files/ja/web/http/resources_and_specifications/index.md diff --git a/files/ja/web/http/resources_and_uris/index.html b/files/ja/web/http/resources_and_uris/index.md similarity index 100% rename from files/ja/web/http/resources_and_uris/index.html rename to files/ja/web/http/resources_and_uris/index.md diff --git a/files/ja/web/http/session/index.html b/files/ja/web/http/session/index.md similarity index 100% rename from files/ja/web/http/session/index.html rename to files/ja/web/http/session/index.md diff --git a/files/ja/web/http/status/100/index.html b/files/ja/web/http/status/100/index.md similarity index 100% rename from files/ja/web/http/status/100/index.html rename to files/ja/web/http/status/100/index.md diff --git a/files/ja/web/http/status/101/index.html b/files/ja/web/http/status/101/index.md similarity index 100% rename from files/ja/web/http/status/101/index.html rename to files/ja/web/http/status/101/index.md diff --git a/files/ja/web/http/status/103/index.html b/files/ja/web/http/status/103/index.md similarity index 100% rename from files/ja/web/http/status/103/index.html rename to files/ja/web/http/status/103/index.md diff --git a/files/ja/web/http/status/200/index.html b/files/ja/web/http/status/200/index.md similarity index 100% rename from files/ja/web/http/status/200/index.html rename to files/ja/web/http/status/200/index.md diff --git a/files/ja/web/http/status/201/index.html b/files/ja/web/http/status/201/index.md similarity index 100% rename from files/ja/web/http/status/201/index.html rename to files/ja/web/http/status/201/index.md diff --git a/files/ja/web/http/status/203/index.html b/files/ja/web/http/status/203/index.md similarity index 100% rename from files/ja/web/http/status/203/index.html rename to files/ja/web/http/status/203/index.md diff --git a/files/ja/web/http/status/204/index.html b/files/ja/web/http/status/204/index.md similarity index 100% rename from files/ja/web/http/status/204/index.html rename to files/ja/web/http/status/204/index.md diff --git a/files/ja/web/http/status/205/index.html b/files/ja/web/http/status/205/index.md similarity index 100% rename from files/ja/web/http/status/205/index.html rename to files/ja/web/http/status/205/index.md diff --git a/files/ja/web/http/status/206/index.html b/files/ja/web/http/status/206/index.md similarity index 100% rename from files/ja/web/http/status/206/index.html rename to files/ja/web/http/status/206/index.md diff --git a/files/ja/web/http/status/300/index.html b/files/ja/web/http/status/300/index.md similarity index 100% rename from files/ja/web/http/status/300/index.html rename to files/ja/web/http/status/300/index.md diff --git a/files/ja/web/http/status/301/index.html b/files/ja/web/http/status/301/index.md similarity index 100% rename from files/ja/web/http/status/301/index.html rename to files/ja/web/http/status/301/index.md diff --git a/files/ja/web/http/status/302/index.html b/files/ja/web/http/status/302/index.md similarity index 100% rename from files/ja/web/http/status/302/index.html rename to files/ja/web/http/status/302/index.md diff --git a/files/ja/web/http/status/303/index.html b/files/ja/web/http/status/303/index.md similarity index 100% rename from files/ja/web/http/status/303/index.html rename to files/ja/web/http/status/303/index.md diff --git a/files/ja/web/http/status/304/index.html b/files/ja/web/http/status/304/index.md similarity index 100% rename from files/ja/web/http/status/304/index.html rename to files/ja/web/http/status/304/index.md diff --git a/files/ja/web/http/status/307/index.html b/files/ja/web/http/status/307/index.md similarity index 100% rename from files/ja/web/http/status/307/index.html rename to files/ja/web/http/status/307/index.md diff --git a/files/ja/web/http/status/308/index.html b/files/ja/web/http/status/308/index.md similarity index 100% rename from files/ja/web/http/status/308/index.html rename to files/ja/web/http/status/308/index.md diff --git a/files/ja/web/http/status/400/index.html b/files/ja/web/http/status/400/index.md similarity index 100% rename from files/ja/web/http/status/400/index.html rename to files/ja/web/http/status/400/index.md diff --git a/files/ja/web/http/status/401/index.html b/files/ja/web/http/status/401/index.md similarity index 100% rename from files/ja/web/http/status/401/index.html rename to files/ja/web/http/status/401/index.md diff --git a/files/ja/web/http/status/402/index.html b/files/ja/web/http/status/402/index.md similarity index 100% rename from files/ja/web/http/status/402/index.html rename to files/ja/web/http/status/402/index.md diff --git a/files/ja/web/http/status/403/index.html b/files/ja/web/http/status/403/index.md similarity index 100% rename from files/ja/web/http/status/403/index.html rename to files/ja/web/http/status/403/index.md diff --git a/files/ja/web/http/status/404/index.html b/files/ja/web/http/status/404/index.md similarity index 100% rename from files/ja/web/http/status/404/index.html rename to files/ja/web/http/status/404/index.md diff --git a/files/ja/web/http/status/405/index.html b/files/ja/web/http/status/405/index.md similarity index 100% rename from files/ja/web/http/status/405/index.html rename to files/ja/web/http/status/405/index.md diff --git a/files/ja/web/http/status/406/index.html b/files/ja/web/http/status/406/index.md similarity index 100% rename from files/ja/web/http/status/406/index.html rename to files/ja/web/http/status/406/index.md diff --git a/files/ja/web/http/status/407/index.html b/files/ja/web/http/status/407/index.md similarity index 100% rename from files/ja/web/http/status/407/index.html rename to files/ja/web/http/status/407/index.md diff --git a/files/ja/web/http/status/408/index.html b/files/ja/web/http/status/408/index.md similarity index 100% rename from files/ja/web/http/status/408/index.html rename to files/ja/web/http/status/408/index.md diff --git a/files/ja/web/http/status/409/index.html b/files/ja/web/http/status/409/index.md similarity index 100% rename from files/ja/web/http/status/409/index.html rename to files/ja/web/http/status/409/index.md diff --git a/files/ja/web/http/status/410/index.html b/files/ja/web/http/status/410/index.md similarity index 100% rename from files/ja/web/http/status/410/index.html rename to files/ja/web/http/status/410/index.md diff --git a/files/ja/web/http/status/411/index.html b/files/ja/web/http/status/411/index.md similarity index 100% rename from files/ja/web/http/status/411/index.html rename to files/ja/web/http/status/411/index.md diff --git a/files/ja/web/http/status/412/index.html b/files/ja/web/http/status/412/index.md similarity index 100% rename from files/ja/web/http/status/412/index.html rename to files/ja/web/http/status/412/index.md diff --git a/files/ja/web/http/status/413/index.html b/files/ja/web/http/status/413/index.md similarity index 100% rename from files/ja/web/http/status/413/index.html rename to files/ja/web/http/status/413/index.md diff --git a/files/ja/web/http/status/414/index.html b/files/ja/web/http/status/414/index.md similarity index 100% rename from files/ja/web/http/status/414/index.html rename to files/ja/web/http/status/414/index.md diff --git a/files/ja/web/http/status/415/index.html b/files/ja/web/http/status/415/index.md similarity index 100% rename from files/ja/web/http/status/415/index.html rename to files/ja/web/http/status/415/index.md diff --git a/files/ja/web/http/status/416/index.html b/files/ja/web/http/status/416/index.md similarity index 100% rename from files/ja/web/http/status/416/index.html rename to files/ja/web/http/status/416/index.md diff --git a/files/ja/web/http/status/417/index.html b/files/ja/web/http/status/417/index.md similarity index 100% rename from files/ja/web/http/status/417/index.html rename to files/ja/web/http/status/417/index.md diff --git a/files/ja/web/http/status/418/index.html b/files/ja/web/http/status/418/index.md similarity index 100% rename from files/ja/web/http/status/418/index.html rename to files/ja/web/http/status/418/index.md diff --git a/files/ja/web/http/status/422/index.html b/files/ja/web/http/status/422/index.md similarity index 100% rename from files/ja/web/http/status/422/index.html rename to files/ja/web/http/status/422/index.md diff --git a/files/ja/web/http/status/425/index.html b/files/ja/web/http/status/425/index.md similarity index 100% rename from files/ja/web/http/status/425/index.html rename to files/ja/web/http/status/425/index.md diff --git a/files/ja/web/http/status/426/index.html b/files/ja/web/http/status/426/index.md similarity index 100% rename from files/ja/web/http/status/426/index.html rename to files/ja/web/http/status/426/index.md diff --git a/files/ja/web/http/status/428/index.html b/files/ja/web/http/status/428/index.md similarity index 100% rename from files/ja/web/http/status/428/index.html rename to files/ja/web/http/status/428/index.md diff --git a/files/ja/web/http/status/429/index.html b/files/ja/web/http/status/429/index.md similarity index 100% rename from files/ja/web/http/status/429/index.html rename to files/ja/web/http/status/429/index.md diff --git a/files/ja/web/http/status/431/index.html b/files/ja/web/http/status/431/index.md similarity index 100% rename from files/ja/web/http/status/431/index.html rename to files/ja/web/http/status/431/index.md diff --git a/files/ja/web/http/status/451/index.html b/files/ja/web/http/status/451/index.md similarity index 100% rename from files/ja/web/http/status/451/index.html rename to files/ja/web/http/status/451/index.md diff --git a/files/ja/web/http/status/500/index.html b/files/ja/web/http/status/500/index.md similarity index 100% rename from files/ja/web/http/status/500/index.html rename to files/ja/web/http/status/500/index.md diff --git a/files/ja/web/http/status/501/index.html b/files/ja/web/http/status/501/index.md similarity index 100% rename from files/ja/web/http/status/501/index.html rename to files/ja/web/http/status/501/index.md diff --git a/files/ja/web/http/status/502/index.html b/files/ja/web/http/status/502/index.md similarity index 100% rename from files/ja/web/http/status/502/index.html rename to files/ja/web/http/status/502/index.md diff --git a/files/ja/web/http/status/503/index.html b/files/ja/web/http/status/503/index.md similarity index 100% rename from files/ja/web/http/status/503/index.html rename to files/ja/web/http/status/503/index.md diff --git a/files/ja/web/http/status/504/index.html b/files/ja/web/http/status/504/index.md similarity index 100% rename from files/ja/web/http/status/504/index.html rename to files/ja/web/http/status/504/index.md diff --git a/files/ja/web/http/status/505/index.html b/files/ja/web/http/status/505/index.md similarity index 100% rename from files/ja/web/http/status/505/index.html rename to files/ja/web/http/status/505/index.md diff --git a/files/ja/web/http/status/506/index.html b/files/ja/web/http/status/506/index.md similarity index 100% rename from files/ja/web/http/status/506/index.html rename to files/ja/web/http/status/506/index.md diff --git a/files/ja/web/http/status/507/index.html b/files/ja/web/http/status/507/index.md similarity index 100% rename from files/ja/web/http/status/507/index.html rename to files/ja/web/http/status/507/index.md diff --git a/files/ja/web/http/status/508/index.html b/files/ja/web/http/status/508/index.md similarity index 100% rename from files/ja/web/http/status/508/index.html rename to files/ja/web/http/status/508/index.md diff --git a/files/ja/web/http/status/510/index.html b/files/ja/web/http/status/510/index.md similarity index 100% rename from files/ja/web/http/status/510/index.html rename to files/ja/web/http/status/510/index.md diff --git a/files/ja/web/http/status/511/index.html b/files/ja/web/http/status/511/index.md similarity index 100% rename from files/ja/web/http/status/511/index.html rename to files/ja/web/http/status/511/index.md From d3f1da67cd3befe316baba5f7efc4f62a22ad02e Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Thu, 18 Aug 2022 15:22:56 +0900 Subject: [PATCH 2/3] =?UTF-8?q?web/http=20=E4=BB=A5=E4=B8=8B=E3=82=92=20md?= =?UTF-8?q?=20=E3=81=B8=E4=B8=80=E6=8B=AC=E5=A4=89=E6=8F=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.md | 62 +- .../http/basics_of_http/data_urls/index.md | 183 ++-- .../basics_of_http/evolution_of_http/index.md | 182 ++-- .../identifying_resources_on_the_web/index.md | 248 ++---- files/ja/web/http/basics_of_http/index.md | 72 +- .../mime_types/common_types/index.md | 817 ++++++++++-------- .../basics_of_http/resource_urls/index.md | 74 +- .../index.md | 436 +++------- files/ja/web/http/caching/index.md | 167 ++-- files/ja/web/http/client_hints/index.md | 30 +- files/ja/web/http/compression/index.md | 66 +- .../index.md | 95 +- .../index.md | 88 +- .../corsalloworiginnotmatchingorigin/index.md | 40 +- .../cors/errors/corsdidnotsucceed/index.md | 36 +- .../http/cors/errors/corsdisabled/index.md | 24 +- .../corsexternalredirectnotallowed/index.md | 26 +- .../errors/corsinvalidallowheader/index.md | 28 +- .../errors/corsinvalidallowmethod/index.md | 28 +- .../cors/errors/corsmethodnotfound/index.md | 36 +- .../corsmissingallowcredentials/index.md | 34 +- .../index.md | 26 +- .../errors/corsmissingalloworigin/index.md | 54 +- .../index.md | 26 +- .../corsnotsupportingcredentials/index.md | 34 +- .../errors/corsoriginheadernotadded/index.md | 24 +- .../corspreflightdidnotsucceed/index.md | 28 +- .../cors/errors/corsrequestnothttp/index.md | 32 +- files/ja/web/http/cors/errors/index.md | 84 +- .../index.md | 89 +- files/ja/web/http/feature_policy/index.md | 191 ++-- .../using_feature_policy/index.md | 174 ++-- .../http/headers/accept-ch-lifetime/index.md | 58 +- files/ja/web/http/headers/accept-ch/index.md | 62 +- .../web/http/headers/accept-charset/index.md | 108 ++- .../web/http/headers/accept-encoding/index.md | 142 ++- .../web/http/headers/accept-language/index.md | 120 ++- .../ja/web/http/headers/accept-patch/index.md | 97 +-- .../web/http/headers/accept-ranges/index.md | 90 +- files/ja/web/http/headers/accept/index.md | 115 ++- .../access-control-allow-credentials/index.md | 112 ++- .../access-control-allow-headers/index.md | 146 ++-- .../access-control-allow-methods/index.md | 91 +- .../access-control-allow-origin/index.md | 121 ++- .../access-control-expose-headers/index.md | 128 ++- .../headers/access-control-max-age/index.md | 94 +- .../access-control-request-headers/index.md | 80 +- .../access-control-request-method/index.md | 80 +- files/ja/web/http/headers/age/index.md | 82 +- files/ja/web/http/headers/allow/index.md | 76 +- files/ja/web/http/headers/alt-svc/index.md | 77 +- .../web/http/headers/authorization/index.md | 110 +-- .../web/http/headers/clear-site-data/index.md | 158 ++-- .../http/headers/content-disposition/index.md | 144 ++- .../http/headers/content-encoding/index.md | 142 ++- .../http/headers/content-language/index.md | 133 +-- .../web/http/headers/content-length/index.md | 72 +- .../http/headers/content-location/index.md | 199 ++--- .../web/http/headers/content-range/index.md | 126 ++- .../index.md | 199 +++-- files/ja/web/http/headers/cookie/index.md | 81 +- .../cross-origin-resource-policy/index.md | 81 +- files/ja/web/http/headers/date/index.md | 153 ++-- .../web/http/headers/device-memory/index.md | 104 +-- files/ja/web/http/headers/dpr/index.md | 69 +- files/ja/web/http/headers/early-data/index.md | 72 +- files/ja/web/http/headers/etag/index.md | 126 ++- files/ja/web/http/headers/expect-ct/index.md | 132 ++- files/ja/web/http/headers/expect/index.md | 107 +-- files/ja/web/http/headers/expires/index.md | 96 +- files/ja/web/http/headers/from/index.md | 78 +- files/ja/web/http/headers/host/index.md | 88 +- files/ja/web/http/headers/if-match/index.md | 109 ++- .../http/headers/if-modified-since/index.md | 135 ++- .../web/http/headers/if-none-match/index.md | 114 ++- files/ja/web/http/headers/if-range/index.md | 146 ++-- .../http/headers/if-unmodified-since/index.md | 141 ++- files/ja/web/http/headers/keep-alive/index.md | 113 ++- .../web/http/headers/last-modified/index.md | 123 ++- files/ja/web/http/headers/location/index.md | 92 +- files/ja/web/http/headers/nel/index.md | 58 +- files/ja/web/http/headers/origin/index.md | 101 +-- files/ja/web/http/headers/pragma/index.md | 97 +-- .../http/headers/proxy-authenticate/index.md | 100 +-- .../http/headers/proxy-authorization/index.md | 102 +-- files/ja/web/http/headers/range/index.md | 141 ++- files/ja/web/http/headers/referer/index.md | 99 +-- .../ja/web/http/headers/retry-after/index.md | 99 +-- .../web/http/headers/server-timing/index.md | 78 +- files/ja/web/http/headers/server/index.md | 86 +- .../http/headers/set-cookie/samesite/index.md | 129 ++- files/ja/web/http/headers/sourcemap/index.md | 74 +- .../strict-transport-security/index.md | 142 ++- .../http/headers/timing-allow-origin/index.md | 98 +-- files/ja/web/http/headers/tk/index.md | 116 ++- .../http/headers/transfer-encoding/index.md | 125 ++- files/ja/web/http/headers/user-agent/index.md | 183 ++-- files/ja/web/http/headers/vary/index.md | 100 +-- files/ja/web/http/headers/via/index.md | 89 +- files/ja/web/http/headers/warning/index.md | 186 ++-- .../headers/x-dns-prefetch-control/index.md | 102 +-- .../http/headers/x-xss-protection/index.md | 118 +-- files/ja/web/http/index.md | 138 ++- .../ja/web/http/link_prefetching_faq/index.md | 133 +-- files/ja/web/http/messages/index.md | 162 ++-- .../web/http/network_error_logging/index.md | 181 ++-- files/ja/web/http/overview/index.md | 212 +++-- .../http/protocol_upgrade_mechanism/index.md | 176 ++-- .../http/proxy_servers_and_tunneling/index.md | 102 ++- files/ja/web/http/range_requests/index.md | 111 +-- files/ja/web/http/redirections/index.md | 349 +++----- .../resources_and_specifications/index.md | 309 ++----- files/ja/web/http/resources_and_uris/index.md | 30 +- files/ja/web/http/session/index.md | 168 ++-- files/ja/web/http/status/100/index.md | 43 +- files/ja/web/http/status/101/index.md | 61 +- files/ja/web/http/status/103/index.md | 41 +- files/ja/web/http/status/200/index.md | 51 +- files/ja/web/http/status/201/index.md | 41 +- files/ja/web/http/status/203/index.md | 41 +- files/ja/web/http/status/204/index.md | 39 +- files/ja/web/http/status/205/index.md | 39 +- files/ja/web/http/status/206/index.md | 65 +- files/ja/web/http/status/300/index.md | 40 +- files/ja/web/http/status/301/index.md | 61 +- files/ja/web/http/status/302/index.md | 55 +- files/ja/web/http/status/303/index.md | 41 +- files/ja/web/http/status/304/index.md | 51 +- files/ja/web/http/status/307/index.md | 48 +- files/ja/web/http/status/308/index.md | 47 +- files/ja/web/http/status/400/index.md | 39 +- files/ja/web/http/status/401/index.md | 71 +- files/ja/web/http/status/402/index.md | 60 +- files/ja/web/http/status/403/index.md | 62 +- files/ja/web/http/status/404/index.md | 59 +- files/ja/web/http/status/405/index.md | 51 +- files/ja/web/http/status/406/index.md | 65 +- files/ja/web/http/status/407/index.md | 69 +- files/ja/web/http/status/408/index.md | 43 +- files/ja/web/http/status/409/index.md | 35 +- files/ja/web/http/status/410/index.md | 47 +- files/ja/web/http/status/411/index.md | 39 +- files/ja/web/http/status/412/index.md | 73 +- files/ja/web/http/status/413/index.md | 37 +- files/ja/web/http/status/414/index.md | 47 +- files/ja/web/http/status/415/index.md | 39 +- files/ja/web/http/status/416/index.md | 49 +- files/ja/web/http/status/417/index.md | 35 +- files/ja/web/http/status/418/index.md | 46 +- files/ja/web/http/status/422/index.md | 33 +- files/ja/web/http/status/425/index.md | 33 +- files/ja/web/http/status/426/index.md | 55 +- files/ja/web/http/status/428/index.md | 41 +- files/ja/web/http/status/429/index.md | 57 +- files/ja/web/http/status/431/index.md | 47 +- files/ja/web/http/status/451/index.md | 91 +- files/ja/web/http/status/500/index.md | 43 +- files/ja/web/http/status/501/index.md | 50 +- files/ja/web/http/status/502/index.md | 48 +- files/ja/web/http/status/503/index.md | 51 +- files/ja/web/http/status/504/index.md | 47 +- files/ja/web/http/status/505/index.md | 33 +- files/ja/web/http/status/506/index.md | 31 +- files/ja/web/http/status/507/index.md | 31 +- files/ja/web/http/status/508/index.md | 31 +- files/ja/web/http/status/510/index.md | 29 +- files/ja/web/http/status/511/index.md | 37 +- 167 files changed, 7035 insertions(+), 8833 deletions(-) diff --git a/files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md b/files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md index 02bd3975a5dedf..fa6fe25781bf08 100644 --- a/files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md +++ b/files/ja/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md @@ -7,63 +7,57 @@ tags: - URL translation_of: Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

ウェブサイトの管理者の間で繰り返される質問が、www URL と非 www URL のどちらを選択するかです。このページでは、何が最良かについてアドバイスを提供します。

+ウェブサイトの管理者の間で繰り返される質問が、www URL と非 www URL のどちらを選択するかです。このページでは、何が最良かについてアドバイスを提供します。 -

ドメイン名とは何か

+## ドメイン名とは何か -

HTTP の URL では、先頭の http:// または https:// に続く部分文字列をドメインと呼びます。ドメイン名は、文書が存在するサーバーにホスティングされています。

+HTTP の URL では、先頭の `http://` または `https://` に続く部分文字列をドメインと呼びます。ドメイン名は、文書が存在するサーバーにホスティングされています。 -

サーバーは物理的な装置である必要はありません。同じ物理的な装置上に複数のサーバーを配置できます。あるいは複数の装置がひとつのサーバーとして扱われることもあり、協力して回答を生成したり、サーバー間でリクエストの負荷を分散したりします。重要なことは、意味的にひとつのドメイン名がひとつのサーバーを表すことです。

+サーバーは物理的な装置である必要はありません。同じ物理的な装置上に複数のサーバーを配置できます。あるいは複数の装置がひとつのサーバーとして扱われることもあり、協力して回答を生成したり、サーバー間でリクエストの負荷を分散したりします。重要なことは、意味的に*ひとつのドメイン名がひとつのサーバーを表す*ことです。 -

では、自身のウェブサイトでどちらかを選択しなければならないのか

+## では、自身のウェブサイトでどちらかを選択しなければならないのか - +- **はい**、ひとつを選択して維持しなければなりません。基準となる場所に応じてどちらを選択するかはあなた次第ですが、どちらかを選択したら、それを維持してください。それにより、ユーザーや検索エンジンから見てウェブサイトが首尾一貫したものになります。これは、常に選択したドメインにリンクする (ウェブサイト内で相対 URL を使用すれば、難しくはないでしょう)、および常に同じドメインへのリンクを (電子メールやソーシャルネットワークなどで) 共有することを含みます。 +- **いいえ**、二つ持つことができます。どちらが公式なドメインであるかについて、一貫性を持って矛盾しないことが重要です。**この公式なドメインは*正規名*と呼ばれます。**すべての絶対パスリンクで正規名を使用するべきです。しかし、それでも他のドメインを機能させることができます。HTTP ではどちらのドメインが正規のものであるかをユーザーや検索エンジンに対して明らかにするとともに、非正規のドメインが機能して想定したページを提供できるようにするための技術が 2 つあります。 -

従って、正規なドメインとしてひとつ選択してください! 以下の 2 つの技術によって、非正規のドメインも機能させることができます。

+従って、正規なドメインとしてひとつ選択してください! 以下の 2 つの技術によって、非正規のドメインも機能させることができます。 -

非正規の URL のための技術

+## 非正規の URL のための技術 -

どのウェブサイトが正規であるかを選択するための、さまざまな方法があります。

+どのウェブサイトが*正規*であるかを選択するための、さまざまな方法があります。 -

HTTP 301 リダイレクトを使用する

+### HTTP 301 リダイレクトを使用する -

この場合は非正規ドメインへのリクエストに対して適切な HTTP {{HTTPStatus(301)}} レスポンスを返すために、HTTP リクエストを受けるサーバー (おそらく、www URL 向けと非 www URL 向けは同じでしょう) の設定が必要です。これは、非正規 URL へアクセスしようとしたブラウザーを正規な同等 URL へリダイレクトします。例えば非 www URL を正規なものとして使用することを選択した場合は、すべての www URL を、www をつけない同等の URL にリダイレクトします。

+この場合は非正規ドメインへのリクエストに対して適切な HTTP {{HTTPStatus(301)}} レスポンスを返すために、HTTP リクエストを受けるサーバー (おそらく、www URL 向けと非 www URL 向けは同じでしょう) の設定が必要です。これは、非正規 URL へアクセスしようとしたブラウザーを正規な同等 URL へリダイレクトします。例えば非 www URL を正規なものとして使用することを選択した場合は、すべての www URL を、www をつけない同等の URL にリダイレクトします。 -

例:

+例: -
    -
  1. サーバーが http://www.example.org/whaddup へのリクエストを受けます (正規のドメインが example.org であるとき)。
  2. -
  3. サーバーは {{HTTPHeader("Location")}}: http://example.org/whaddup ヘッダーを伴う {{HTTPStatus(301)}} コードのレスポンスを返します。
  4. -
  5. クライアントは正規ドメイン http://example.org/whatddup へのリクエストを発行します。
  6. -
+1. サーバーが `http://www.example.org/whaddup` へのリクエストを受けます (正規のドメインが example.org であるとき)。 +2. サーバーは `{{HTTPHeader("Location")}}: http://example.org/whaddup` ヘッダーを伴う {{HTTPStatus(301)}} コードのレスポンスを返します。 +3. クライアントは正規ドメイン `http://example.org/whatddup` へのリクエストを発行します。 -

HTML5 boilerplate project に、あるドメインから別のドメインへリダイレクトするように Apache を設定する方法 の例があります。

+[HTML5 boilerplate project](https://github.com/h5bp/html5-boilerplate) に、[あるドメインから別のドメインへリダイレクトするように Apache を設定する方法](https://github.com/h5bp/html5-boilerplate/blob/7a22a33d4041c479d0962499e853501073811887/.htaccess#L219-L258) の例があります。 - +### _``_ を使用する -

ページの正規のアドレスは何かを示す、専用の HTML {{HTMLElement("link")}} 要素をページに追加できます。これは人間向けのページリーダーには影響がありませんが、検索エンジンのクローラーに対してページが実際はどこにあるかを示します。この方法では検索エンジンが同じページで何度もインデックスを作成したり、重複したコンテンツやスパムであると判断されたり、検索エンジンの結果ページでページが排除されたりランクが下がったりすることがなくなります。

+ページの正規のアドレスは何かを示す、専用の HTML {{HTMLElement("link")}} 要素をページに追加できます。これは人間向けのページリーダーには影響がありませんが、検索エンジンのクローラーに対してページが実際はどこにあるかを示します。この方法では検索エンジンが同じページで何度もインデックスを作成したり、重複したコンテンツやスパムであると判断されたり、検索エンジンの結果ページでページが排除されたりランクが下がったりすることがなくなります。 -

このようなタグを追加するときは両方のドメインで同じコンテンツを提供して、どの URL が正規であるかを検索エンジンに示します。先ほどの例では http://www.example.org/whadduphttp://example.org/whaddup と同じコンテンツを提供していますが、head に {{htmlelement("link")}} 要素を追加します:

+このようなタグを追加するときは両方のドメインで同じコンテンツを提供して、どの URL が正規であるかを検索エンジンに示します。先ほどの例では `http://www.example.org/whaddup` が `http://example.org/whaddup` と同じコンテンツを提供していますが、head に {{htmlelement("link")}} 要素を追加します: -

<link href="http://example.org/whaddup" rel="canonical">

+`` -

リダイレクトの場合と異なり、ブラウザーの履歴では非 www URL と www URL が独立した項目であるとみなします。

+リダイレクトの場合と異なり、ブラウザーの履歴では非 www URL と www URL が独立した項目であるとみなします。 -

どちらでもページを動作させる

+## どちらでもページを動作させる -

これらの技術と併せて、 www つきドメインと www なしドメインの両方で正しく応答するようにサーバーを設定しましょう。ユーザーがブラウザーの URL バーにどちらの URL を入力するかは予測できませんので、これを行うことはよい助言になります。これは正式な場所としてどちらを使用したいかを選択するという問題であり、その結果に応じて他の URL をリダイレクトします。

+これらの技術と併せて、 www つきドメインと www なしドメインの両方で正しく応答するようにサーバーを設定しましょう。ユーザーがブラウザーの URL バーにどちらの URL を入力するかは予測できませんので、これを行うことはよい助言になります。これは正式な場所としてどちらを使用したいかを選択するという問題であり、その結果に応じて他の URL をリダイレクトします。 -

状況を判断する

+## 状況を判断する

これは自転車置き場問題と考えられる、とても主観的な話題です。もっと深く読んでみたいと思ったら、この件に関する多くの記事をご覧ください。

-

関連情報

+## 関連情報 - +- [Stats on what people type in the URL bar](https://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/) (2011) diff --git a/files/ja/web/http/basics_of_http/data_urls/index.md b/files/ja/web/http/basics_of_http/data_urls/index.md index 9058204e286ae4..936ccbe162f458 100644 --- a/files/ja/web/http/basics_of_http/data_urls/index.md +++ b/files/ja/web/http/basics_of_http/data_urls/index.md @@ -10,130 +10,117 @@ tags: translation_of: Web/HTTP/Basics_of_HTTP/Data_URIs original_slug: Web/HTTP/Basics_of_HTTP/Data_URIs --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

データ URLdata: スキームが先頭についた URL で、小さなファイルをインラインで文書に埋め込むことができます。以前、 WHATWG で取り下げられるまでは "data URIs" と呼ばれていました。

+**データ URL** は `data:` スキームが先頭についた URL で、小さなファイルをインラインで文書に埋め込むことができます。以前、 WHATWG で取り下げられるまでは "data URIs" と呼ばれていました。 -
-

: 最近のブラウザーでは、データ URL はナビゲーションを担当する設定オブジェクトの起源を継承するのではなく、一意の不透明な起点として扱われます。

-
+> **Note:** **注**: 最近のブラウザーでは、データ URL はナビゲーションを担当する設定オブジェクトの起源を継承するのではなく、一意の不透明な起点として扱われます。 -

構文

+## 構文 -

データ URL は接頭辞 (data:)、データの種類を示す MIME タイプ、テキストではないデータである場合のオプションである base64 トークン、データ自体の 4 つの部品で構成されます。

+データ URL は接頭辞 (`data:`)、データの種類を示す [MIME タイプ](/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types)、テキストではないデータである場合のオプションである `base64` トークン、データ自体の 4 つの部品で構成されます。 -
data:[<mediatype>][;base64],<data>
-
+``` +data:[][;base64], +``` -

mediatypeMIME タイプで, 例えば 'image/jpeg' で JPEG 画像を表します。省略時の既定値は text/plain;charset=US-ASCII です。

+`mediatype` は [MIME タイプ](/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types)で, 例えば `'image/jpeg'` で JPEG 画像を表します。省略時の既定値は `text/plain;charset=US-ASCII` です。 -

データが文字ならば、そのまま埋め込めます (埋め込む文書タイプに応じて、適切な実体参照やエスケープを行なってください)。それ以外では base64 を指定し、 base64 エンコードしたバイナリデータを埋め込みます。 MIME タイプについての詳しい情報はこちらこちらにあります。

+データが文字ならば、そのまま埋め込めます (埋め込む文書タイプに応じて、適切な実体参照やエスケープを行なってください)。それ以外では `base64` を指定し、 base64 エンコードしたバイナリデータを埋め込みます。 MIME タイプについての詳しい情報は[こちら](/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types)や[こちら](/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types)にあります。 -

例:

+例: -
-
data:,Hello%2C%20World!
-
平易な text/plain データです。引用符や空白にはパーセントエンコーディング (URL エンコーディング) を使用します。また、 CSV データ (MIME タイプは "text/csv") もスプレッドシートの行を区切るための改行文字を保存するためにパーセントエンコーディングが必要です。
-
data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==
-
同じ内容の base64 エンコード版
-
data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E
-
<h1>Hello, World!</h1> という HTML 文書
-
data:text/html,<script>alert('hi');</script>
-
JavaScript のアラートを実行する HTML 文書。終了タグが必要ですので注意してください。
-
+- `data:,Hello%2C%20World!` + - : 平易な text/plain データです。引用符や空白には[パーセントエンコーディング](/ja/docs/Glossary/percent-encoding) (URL エンコーディング) を使用します。また、 CSV データ (MIME タイプは "text/csv") もスプレッドシートの行を区切るための改行文字を保存するためにパーセントエンコーディングが必要です。 +- `data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==` + - : 同じ内容の base64 エンコード版 +- `data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E` + - : `

Hello, World!

` という HTML 文書 +- `data:text/html,` + - : JavaScript のアラートを実行する HTML 文書。終了タグが必要ですので注意してください。 -

データの base64 形式へのエンコード

+## データの base64 形式へのエンコード -

Base64 はバイナリからテキストへのエンコード方法の集まりで、バイナリデータを64進数表現に変換することで ASCII 文字列形式にするものです。 ASCII 文字のみから成るため、 Base64 の文字列は一般に URL でも安全ですので、データ URL のデータのエンコードに利用することができます。

+Base64 はバイナリからテキストへのエンコード方法の集まりで、バイナリデータを 64 進数表現に変換することで ASCII 文字列形式にするものです。 ASCII 文字のみから成るため、 Base64 の文字列は一般に URL でも安全ですので、データ URL のデータのエンコードに利用することができます。 -

Javascript でのエンコード

+### Javascript でのエンコード -

Web API には、 Base64 をエンコードまたはデコードするためのネイティブメソッド、 Base64 encoding and decoding があります。

+Web API には、 Base64 をエンコードまたはデコードするためのネイティブメソッド、 [Base64 encoding and decoding](/ja/docs/Web/API/WindowBase64/Base64_encoding_and_decoding) があります。 -

Unix システムでのエンコード

+### Unix システムでのエンコード -

Linux や Mac OS X システムでのファイルまたは文字列の Base64 エンコードは、コマンドラインの base64 (または、他にも uuencode ユーティリティの -m オプションつき) を使用して実現できます。

+Linux や Mac OS X システムでのファイルまたは文字列の Base64 エンコードは、コマンドラインの `base64` (または、他にも `uuencode` ユーティリティの `-m` オプションつき) を使用して実現できます。 -
echo -n hello|base64
+```bash
+echo -n hello|base64
 # コンソールへの出力: aGVsbG8=
 
-echo -n hello>a.txt
+echo -n hello>a.txt
 base64 a.txt
 # コンソールへの出力: aGVsbG8=
 
-base64 a.txt>b.txt
+base64 a.txt>b.txt
 # b.txt ファイルへの出力: aGVsbG8=
-
+``` -

Microsoft Windows でのエンコード

+### Microsoft Windows でのエンコード -

Windows では、 Convert.ToBase64String を PowerShell で使用することで Base64 エンコードを行うことができます。

+Windows では、 [Convert.ToBase64String](https://docs.microsoft.com/ja-jp/dotnet/api/system.convert.tobase64string?view=net-5.0) を PowerShell で使用することで Base64 エンコードを行うことができます。 -
[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello"))
+```
+[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello"))
 # outputs to console: aGVsbG8=
-
+``` -

他にも、 GNU/Linux シェル (WSL など) が base64 ユーティリティを提供しています。

+他にも、 GNU/Linux シェル ([WSL](https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux) など) が `base64` ユーティリティを提供しています。 -
bash$ echo -n hello | base64
+```
+bash$ echo -n hello | base64
 # outputs to console: aGVsbG8=
-
- -

よくある問題

- -

この章では data の URL を作ったり使ったりするときに、よく起こる問題について述べます。

- -
data:text/html,lots of text...<p><a name%3D"bottom">bottom</a>?arg=val
-
- -

これは次の内容の HTML リソースを表します。

- -
lots of text...<p><a name="bottom">bottom</a>?arg=val
-
- -
-
構文
-
data URL の書式は非常に単純ですが、"データ" 部分の前にカンマを置くのを忘れがちです。忘れるとデータが正しく base64 形式にエンコードされません。
-
HTML におけるフォーマット
-
data はファイル内でファイルを提供しますが、外側の文書に比べて幅がとても広くなる可能性があります。 URL としては、 data はホワイトスペース (改行、タブ、空白) で体裁を整えることができるはずですが、 base64 エンコードをすると起こる問題 があります。
-
長さの制限
-
Firefox は基本的に長さ制限のない data URL に対応していますが、ブラウザーは特定の最大長のデータに対応する必要はありません。たとえば、 Opera 11 ブラウザーでは URL が65535文字に制限されており、 data URL は65529文字に制限されています (65529文字は、 MIME タイプを指定せずにプレーンの data: を使用した場合、ソースではなくエンコードされたデータの長さです)。
-
エラー処理の欠如
-
メディア内の不正な引数や、 'base64' の定義内の打ち間違いは無視され、何もエラーは出ません。
-
クエリ文字列のサポートの欠如、など
-
-

データ URL のデータ部分は不透明 (opaque) なので、データ URL と一緒にクエリ文字列 (<url>?parameter-data という構文で表されるページ固有のパラメータ) を使うと、データ URL が表現するデータに単にクエリ文字列が含まれたものになります。

-
-
セキュリティの課題
-
多数のセキュリティ問題 (フィッシングなど) がデータ URL に関連付けられており、ブラウザーの最上位でそれらに移動しています。このような問題を軽減するために、Firefox 59+ (リリース版、Nightly/Beta は58以降) では data:// URL へのトップレベルのナビゲーションがブロックされており、他のブラウザがすぐに対応することを期待しています。詳細については、Firefox 58 におけるデータ URL へのトップレベルナビゲーションのブロックを参照してください。
-
- -

仕様書

- - - - - - - - - - - - -
仕様書題名
{{RFC("2397")}}The "data" URL scheme
- -

ブラウザーの互換性

- -

{{compat("http.data-url")}}

- -

関連情報

- - +``` + +## よくある問題 + +この章では `data` の URL を作ったり使ったりするときに、よく起こる問題について述べます。 + +``` +data:text/html,lots of text...

bottom?arg=val +``` + +これは次の内容の HTML リソースを表します。 + +``` +lots of text...

bottom?arg=val +``` + +- 構文 + - : `data` URL の書式は非常に単純ですが、"データ" 部分の前にカンマを置くのを忘れがちです。忘れるとデータが正しく base64 形式にエンコードされません。 +- HTML におけるフォーマット + - : `data` はファイル内でファイルを提供しますが、外側の文書に比べて幅がとても広くなる可能性があります。 URL としては、 `data` はホワイトスペース (改行、タブ、空白) で体裁を整えることができるはずですが、 [base64 エンコードをすると起こる問題](http://bugzilla.mozilla.org/show_bug.cgi?id=73026#c12) があります。 +- 長さの制限 + - : Firefox は基本的に長さ制限のない `data` URL に対応していますが、ブラウザーは特定の最大長のデータに対応する必要はありません。たとえば、 Opera 11 ブラウザーでは URL が 65535 文字に制限されており、 `data` URL は 65529 文字に制限されています (65529 文字は、 MIME タイプを指定せずにプレーンの `data:` を使用した場合、ソースではなくエンコードされたデータの長さです)。 +- エラー処理の欠如 + - : メディア内の不正な引数や、 `'base64'` の定義内の打ち間違いは無視され、何もエラーは出ません。 +- クエリ文字列のサポートの欠如、など + - : データ URL のデータ部分は不透明 (opaque) なので、データ URL と一緒にクエリ文字列 (`?parameter-data` という構文で表されるページ固有のパラメータ) を使うと、データ URL が表現するデータに単にクエリ文字列が含まれたものになります。 +- セキュリティの課題 + - : 多数のセキュリティ問題 (フィッシングなど) がデータ URL に関連付けられており、ブラウザーの最上位でそれらに移動しています。このような問題を軽減するために、Firefox 59+ (リリース版、Nightly/Beta は 58 以降) では `data://` URL へのトップレベルのナビゲーションがブロックされており、他のブラウザがすぐに対応することを期待しています。詳細については、[Firefox 58 におけるデータ URL へのトップレベルナビゲーションのブロック](https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/)を参照してください。 + +## 仕様書 + +| 仕様書 | 題名 | +| -------------------- | --------------------- | +| {{RFC("2397")}} | The "data" URL scheme | + +## ブラウザーの互換性 + +{{compat("http.data-url")}} + +## 関連情報 + +- [Base64 のエンコードとデコード](/ja/docs/Web/API/WindowBase64/Base64_encoding_and_decoding) +- [パーセントエンコーディング](/ja/docs/Glossary/percent-encoding) +- {{domxref("WindowBase64.atob","atob()")}} +- {{domxref("WindowBase64.btoa","btoa()")}} +- [CSS `url()`](/ja/docs/Web/CSS/uri) +- [URI](/ja/docs/Glossary/URI) diff --git a/files/ja/web/http/basics_of_http/evolution_of_http/index.md b/files/ja/web/http/basics_of_http/evolution_of_http/index.md index 3c2d8645d1b2b8..3b492573dd00a1 100644 --- a/files/ja/web/http/basics_of_http/evolution_of_http/index.md +++ b/files/ja/web/http/basics_of_http/evolution_of_http/index.md @@ -8,95 +8,98 @@ tags: - NeedsUpdate(HTTP/3) translation_of: Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP --- -

{{HTTPSidebar}}
+{{HTTPSidebar}} -

HTTP は World Wide Web を支えるプロトコルです。 Tim Berners-Lee によって 1989-1991 年に開発されれてから、HTTP にはシンプルさのほとんどを維持しながら柔軟性をさらに形作る、多くの変更がみられます。 HTTP は初期のいくぶん信頼された研究所の環境内でファイルを交換するプロトコルから、現代のインターネットの迷宮で高解像度や 3D の画像や動画を運ぶプロトコルに進化しました。

+**HTTP** は World Wide Web を支えるプロトコルです。 Tim Berners-Lee によって 1989-1991 年に開発されれてから、HTTP にはシンプルさのほとんどを維持しながら柔軟性をさらに形作る、多くの変更がみられます。 HTTP は初期のいくぶん信頼された研究所の環境内でファイルを交換するプロトコルから、現代のインターネットの迷宮で高解像度や 3D の画像や動画を運ぶプロトコルに進化しました。 -

World Wide Web の発明

+## World Wide Web の発明 -

1989 年、 CERN で働いていた Tim Berners-Lee は、インターネット上のハイパーテキストシステムを構築するための提案書を執筆しました。当初 Mesh と呼ばれていたそのシステムは、1990 年に実装されている間に World Wide Web へ改名されました。 World Wide Web は既存の TCP および IP プロトコル上に構築され、4 つの要素から構成されました:

+1989 年、 CERN で働いていた Tim Berners-Lee は、インターネット上のハイパーテキストシステムを構築するための提案書を執筆しました。当初 _Mesh_ と呼ばれていたそのシステムは、1990 年に実装されている間に _World Wide Web_ へ改名されました。 World Wide Web は既存の TCP および IP プロトコル上に構築され、4 つの要素から構成されました: -
    -
  • ハイパーテキスト文書を表現するテキスト形式である HyperText Markup Language (HTML)。
  • -
  • それらの文書を交換するシンプルなプロトコルである HypertText Transfer Protocol (HTTP)。
  • -
  • それらの文書を表示 (および付随的に編集) するクライアントである、WorldWideWeb と呼ばれた最初のウェブブラウザー。
  • -
  • 文書へのアクセス機能を提供するサーバーである、httpd の初期バージョン。
  • -
+- ハイパーテキスト文書を表現するテキスト形式である _[HyperText Markup Language](/ja/docs/Web/HTML)_ (HTML)。 +- それらの文書を交換するシンプルなプロトコルである _HypertText Transfer Protocol_ (HTTP)。 +- それらの文書を表示 (および付随的に編集) するクライアントである、_WorldWideWeb_ と呼ばれた最初のウェブブラウザー。 +- 文書へのアクセス機能を提供するサーバーである、_httpd_ の初期バージョン。 -

これら 4 つの構成要素は 1990 年の末に完成して、最初のサーバーが早くも 1991 年の初期に CERN の外部で稼働しました。1991 年 8 月 6 日の、 Tim Berners-Lee による alt.hypertext 公開ニュースグループへの 投稿 が、公開プロジェクトとしての World Wide Web の公式な開始日と考えられています。

+これら 4 つの構成要素は 1990 年の末に完成して、最初のサーバーが早くも 1991 年の初期に CERN の外部で稼働しました。1991 年 8 月 6 日の、 Tim Berners-Lee による _alt.hypertext_ 公開ニュースグループへの [投稿](https://www.w3.org/People/Berners-Lee/1991/08/art-6484.txt) が、公開プロジェクトとしての World Wide Web の公式な開始日と考えられています。 -

初期段階で使用された HTTP プロトコルはとてもシンプルであり、後に HTTP/0.9 と名付けられ、また時にはワンラインプロトコルとも呼ばれました。

+初期段階で使用された HTTP プロトコルはとてもシンプルであり、後に HTTP/0.9 と名付けられ、また時にはワンラインプロトコルとも呼ばれました。 -

HTTP/0.9 – ワンラインプロトコル

+## HTTP/0.9 – ワンラインプロトコル -

初期バージョンの HTTP にはバージョン番号がありませんでした。以降のバージョンと区別するため、後に 0.9 と呼ばれるようになりました。HTTP/0.9 はとても単純です。リクエストは唯一使用可能なメソッドである {{HTTPMethod("GET")}} で始まって、リソースへのパス (サーバーに接続すればプロトコル、サーバー名、ポートが必要ではなくなるため、 URL ではありません) が後に続く 1 行で構成されます。

+初期バージョンの HTTP にはバージョン番号がありませんでした。以降のバージョンと区別するため、後に 0.9 と呼ばれるようになりました。HTTP/0.9 はとても単純です。リクエストは唯一使用可能なメソッドである {{HTTPMethod("GET")}} で始まって、リソースへのパス (サーバーに接続すればプロトコル、サーバー名、ポートが必要ではなくなるため、 URL ではありません) が後に続く 1 行で構成されます。 -
GET /mypage.html
+``` +GET /mypage.html +``` -

レスポンスも、とても単純です。こちらはファイル自身だけで構成されます。

+レスポンスも、とても単純です。こちらはファイル自身だけで構成されます。 -
<HTML>
+```
+
 A very simple HTML page
-</HTML>
+ +``` -

以降の進化形とは異なり、HTTP ヘッダーがなく HTML ファイルだけが転送可能であり、他の種類の文書は転送できません。また、ステータスやエラーのコードはありません。問題が発生すると、人間が使用するために問題の説明を収めた専用の HTML ファイルを返送します。

+以降の進化形とは異なり、HTTP ヘッダーがなく HTML ファイルだけが転送可能であり、他の種類の文書は転送できません。また、ステータスやエラーのコードはありません。問題が発生すると、人間が使用するために問題の説明を収めた専用の HTML ファイルを返送します。 -

HTTP/1.0 – 拡張性を築く

+## HTTP/1.0 – 拡張性を築く -

HTTP/0.9 は制約がとても多いため、多目的に使用できるようにブラウザーやサーバーがいち早く拡張しました。

+HTTP/0.9 は制約がとても多いため、多目的に使用できるようにブラウザーやサーバーがいち早く拡張しました。 -
    -
  • 各リクエストでバージョン情報を送信するようになりました (HTTP/1.0GET の行に追加されました)。
  • -
  • レスポンスの始めにステータスコードの行を送信し、ブラウザー自体がリクエストの成功または失敗を理解して、その結果に応じて動作を順応できる (特定の方法でローカルのキャッシュを更新または使用するなど) ようになりました
  • -
  • リクエストとレスポンスの両方で HTTP ヘッダーの概念を導入して、メタデータの送信を可能にするとともにプロトコルを極めて柔軟かつ拡張可能にしました。
  • -
  • 新たな HTTP ヘッダーの助けを借りて、プレーン HTML ファイル以外の文書を転送する機能を追加する ({{HTTPHeader("Content-Type")}} ヘッダーのおかげ)。
  • -
+- 各リクエストでバージョン情報を送信するようになりました (`HTTP/1.0` が `GET` の行に追加されました)。 +- レスポンスの始めにステータスコードの行を送信し、ブラウザー自体がリクエストの成功または失敗を理解して、その結果に応じて動作を順応できる (特定の方法でローカルのキャッシュを更新または使用するなど) ようになりました +- リクエストとレスポンスの両方で HTTP ヘッダーの概念を導入して、メタデータの送信を可能にするとともにプロトコルを極めて柔軟かつ拡張可能にしました。 +- 新たな HTTP ヘッダーの助けを借りて、プレーン HTML ファイル以外の文書を転送する機能を追加する ({{HTTPHeader("Content-Type")}} ヘッダーのおかげ)。 -

この時点で、一般的なリクエストとレスポンスはこのようになりました。

+この時点で、一般的なリクエストとレスポンスはこのようになりました。 -
GET /mypage.html HTTP/1.0
+```
+GET /mypage.html HTTP/1.0
 User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
 
 200 OK
 Date: Tue, 15 Nov 1994 08:12:31 GMT
 Server: CERN/3.0 libwww/2.17
 Content-Type: text/html
-<HTML>
+
 A page with an image
-  <IMG SRC="/myimage.gif">
-</HTML>
+ + +``` -

次のコネクションが続いて、画像の読み込みをリクエストします (前のリクエストのレスポンスに続きます)。

+次のコネクションが続いて、画像の読み込みをリクエストします (前のリクエストのレスポンスに続きます)。 -
GET /myimage.gif HTTP/1.0
+```
+GET /myimage.gif HTTP/1.0
 User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
 
 200 OK
 Date: Tue, 15 Nov 1994 08:12:32 GMT
 Server: CERN/3.0 libwww/2.17
 Content-Type: text/gif
-(画像コンテンツ)
+(画像コンテンツ) +``` -

これらの新機能は協調作業によらず、1991 年から 1995 年の間に試行錯誤によって導入されました。サーバーとブラウザーにある機能を追加して、効果があるかを確認していました。多くの相互運用性の問題が日常茶飯事でした。1996 年 11 月にこれらの問題を解消するため、共通の慣行を説明する情報文書である {{RFC(1945)}} が発行されました。これは HTTP/1.0 の定義であり、狭義の意味で公式の標準ではないことは注目に値します。

+これらの新機能は協調作業によらず、1991 年から 1995 年の間に試行錯誤によって導入されました。サーバーとブラウザーにある機能を追加して、効果があるかを確認していました。多くの相互運用性の問題が日常茶飯事でした。1996 年 11 月にこれらの問題を解消するため、共通の慣行を説明する情報文書である {{RFC(1945)}} が発行されました。これは HTTP/1.0 の定義であり、狭義の意味で公式の標準ではないことは注目に値します。 -

HTTP/1.1 – 標準化されたプロトコル

+## HTTP/1.1 – 標準化されたプロトコル -

さまざまな HTTP/1.0 の使用によるやや混沌した状況と並行して、HTTP/1.0 の文書の公開を翌年に控えた 1995 年から、正式な標準化が進められました。HTTP で最初に標準化されたバージョンである HTTP/1.1 が、HTTP/1.0 から数か月後である 1997 年初頭に公開されました。

+さまざまな HTTP/1.0 の使用によるやや混沌した状況と並行して、HTTP/1.0 の文書の公開を翌年に控えた 1995 年から、正式な標準化が進められました。HTTP で最初に標準化されたバージョンである HTTP/1.1 が、HTTP/1.0 から数か月後である 1997 年初頭に公開されました。 -

HTTP/1.1 ではあいまいな部分を明確にするとともに、いくつもの改良を施しました:

+HTTP/1.1 ではあいまいな部分を明確にするとともに、いくつもの改良を施しました: -
    -
  • コネクションの再利用が可能になりました。最初に取り込んだひとつの文書内に埋め込まれているリソースを表示するために、コネクションを何度も開く時間を節約します。
  • -
  • パイプライン機能を追加しました。最初のリクエストへの回答が完全に転送される前に次のリクエストを送信でき、通信のレイテンシーを削減します。
  • -
  • Chunked 形式のレスポンスをサポートしました。
  • -
  • 新たなキャッシュ制御の仕組みを追加しました。
  • -
  • 言語、エンコーディング、タイプのコンテンツネゴシエーションを導入しました。クライアントとサーバーが、もっとも適切なコンテンツを交換するよう同意することができます。
  • -
  • 同じ IP アドレスで異なるドメインを提供できる {{HTTPHeader("Host")}} ヘッダーのおかげで、サーバーのコロケーションが可能になりました。
  • -
+- コネクションの再利用が可能になりました。最初に取り込んだひとつの文書内に埋め込まれているリソースを表示するために、コネクションを何度も開く時間を節約します。 +- パイプライン機能を追加しました。最初のリクエストへの回答が完全に転送される前に次のリクエストを送信でき、通信のレイテンシーを削減します。 +- Chunked 形式のレスポンスをサポートしました。 +- 新たなキャッシュ制御の仕組みを追加しました。 +- 言語、エンコーディング、タイプのコンテンツネゴシエーションを導入しました。クライアントとサーバーが、もっとも適切なコンテンツを交換するよう同意することができます。 +- 同じ IP アドレスで異なるドメインを提供できる {{HTTPHeader("Host")}} ヘッダーのおかげで、サーバーのコロケーションが可能になりました。 -

ひとつのコネクションで行われる典型的なリクエストのフローは、以下のようになりました。

+ひとつのコネクションで行われる典型的なリクエストのフローは、以下のようになりました。 -
GET /en-US/docs/Glossary/Simple_header HTTP/1.1
+```
+GET /en-US/docs/Glossary/Simple_header HTTP/1.1
 Host: developer.mozilla.org
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
@@ -116,7 +119,7 @@ Server: Apache
 Transfer-Encoding: chunked
 Vary: Cookie, Accept-Encoding
 
-(コンテンツ)
+(コンテンツ)
 
 
 GET /static/img/header-background.png HTTP/1.1
@@ -137,74 +140,69 @@ Date: Thu, 31 Mar 2016 13:34:46 GMT
 Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
 Server: Apache
 
-(3077 バイトの画像コンテンツ)
+(3077 バイトの画像コンテンツ) +``` -

HTTP/1.1 は、1997 年 1 月に {{rfc(2068)}} として初版が発行されました。

+HTTP/1.1 は、1997 年 1 月に {{rfc(2068)}} として初版が発行されました。 -

15 年以上にわたる拡張

+## 15 年以上にわたる拡張 -

HTTP の拡張性 (新たなヘッダーやメソッドを容易に追加できる) のおかげで、HTTP/2 が公開される前に 1999 年 1 月に発行された {{RFC("2616")}} や 2014 年 6 月に発行された {{RFC("7230")}}-{{RFC("7235")}} によって HTTP/1.1 プロトコルが 2 度改版されても、このプロトコルは 15 年以上にわたって極めて安定していました。

+HTTP の拡張性 (新たなヘッダーやメソッドを容易に追加できる) のおかげで、HTTP/2 が公開される前に 1999 年 1 月に発行された {{RFC("2616")}} や 2014 年 6 月に発行された {{RFC("7230")}}-{{RFC("7235")}} によって HTTP/1.1 プロトコルが 2 度改版されても、このプロトコルは 15 年以上にわたって極めて安定していました。 -

安全な転送のために HTTP を使用する

+### 安全な転送のために HTTP を使用する -

HTTP でもっとも大きな変化が、早くも 1994 年の末に発生しました。基本的な TCP/IP スタック上で HTTP を送信するかわりに、TCP/IP の上層に追加する暗号化された転送レイヤーである SSL を Netscape Communications が開発しました。SSL 1.0 は社外に公開されませんでしたが、SSL 2.0 とその後継である SSL 3.0 は、サーバーとクライアントの間で交換されるメッセージの暗号化および信頼性の保証によって、電子商取引のウェブサイトの作成を可能にしました。 SSL は標準化の過程に乗せられて最終的に TLS になり、バージョン 1.0、1.1、1.2、1.3 が脆弱性を抑えることに成功しました。

+HTTP でもっとも大きな変化が、早くも 1994 年の末に発生しました。基本的な TCP/IP スタック上で HTTP を送信するかわりに、TCP/IP の上層に追加する暗号化された転送レイヤーである SSL を Netscape Communications が開発しました。SSL 1.0 は社外に公開されませんでしたが、SSL 2.0 とその後継である SSL 3.0 は、サーバーとクライアントの間で交換されるメッセージの暗号化および信頼性の保証によって、電子商取引のウェブサイトの作成を可能にしました。 SSL は標準化の過程に乗せられて最終的に TLS になり、バージョン 1.0、1.1、1.2、1.3 が脆弱性を抑えることに成功しました。 -

それと同時に、暗号化されたトランスポート層の必要性が発生しました。ウェブが主に学術用ネットワークにある比較的信頼された状況を失って、広告者やさまざまな個人や犯罪者が人々の個人情報を多く得ようと競い合い、なりすましや改変されたデータによる置き換えを図るようになりました。HTTP 上に構築されたアプリケーションがさらに強力になるのに従ってアドレス帳、電子メール、ユーザーの位置情報といったさらに個人的な情報へアクセスするようになり、TLS の必要性は電子商取引を越えていたるところに存在します。

+それと同時に、暗号化されたトランスポート層の必要性が発生しました。ウェブが主に学術用ネットワークにある比較的信頼された状況を失って、広告者やさまざまな個人や犯罪者が人々の個人情報を多く得ようと競い合い、なりすましや改変されたデータによる置き換えを図るようになりました。HTTP 上に構築されたアプリケーションがさらに強力になるのに従ってアドレス帳、電子メール、ユーザーの位置情報といったさらに個人的な情報へアクセスするようになり、TLS の必要性は電子商取引を越えていたるところに存在します。 -

複雑なアプリケーションのために HTTP を使用する

+### 複雑なアプリケーションのために HTTP を使用する -

Tim Berners-Lee による当初のウェブのビジョンは、読み取り専用の手段ではありませんでした。彼はウェブについて、人々が遠隔操作で文書を追加や移動することができる開かれたファイルシステムを描いていました。1996 年頃に HTTP はオーサリングができるように拡張され、WebDAV という名前の標準仕様が作られました。これはアドレス帳の項目を扱う CardDAV やカレンダーを扱う CalDAV など、特定のアプリケーション向けにさらに拡張されました。しかしこれらの *DAV 拡張には、それが使用するサーバーに実装されている必要があり、またとても複雑であったという欠点があります。ウェブの領域でこれらは、内輪で使用されているままです。

+Tim Berners-Lee による当初のウェブのビジョンは、読み取り専用の手段ではありませんでした。彼はウェブについて、人々が遠隔操作で文書を追加や移動することができる開かれたファイルシステムを描いていました。1996 年頃に HTTP はオーサリングができるように拡張され、WebDAV という名前の標準仕様が作られました。これはアドレス帳の項目を扱う CardDAV やカレンダーを扱う CalDAV など、特定のアプリケーション向けにさらに拡張されました。しかしこれらの \*DAV 拡張には、それが使用するサーバーに実装されている必要があり、またとても複雑であったという欠点があります。ウェブの領域でこれらは、内輪で使用されているままです。 -

2000 年に、HTTP を使用する新たなパターンである {{glossary("REST", "representational state transfer")}} (REST) が考案されました。API が発したアクションは新たな HTTP メソッドによって伝達されず、基本的な HTTP/1.1 メソッドによって特定の URI にアクセスする場合に限られます。これによりウェブアプリケーションは、ブラウザーやサーバーを更新することなくデータの取り出しや変更ができる API の提供が可能になります。必要なものはすべて、標準の HTTP/1.1 によってウェブサイトから提供されるファイルに埋め込まれています。それぞれのウェブサイトが独自の非標準な RESTful API を定義して、それらがウェブサイトを制御するという事実に REST モデルの欠点があります。*DAV 拡張との違いは、クライアントとサーバーが相互使用可能ではないことです。RESTful API は、2010 年代にはとても一般的になりました。

+2000 年に、HTTP を使用する新たなパターンである {{glossary("REST", "representational state transfer")}} (REST) が考案されました。API が発したアクションは新たな HTTP メソッドによって伝達されず、基本的な HTTP/1.1 メソッドによって特定の URI にアクセスする場合に限られます。これによりウェブアプリケーションは、ブラウザーやサーバーを更新することなくデータの取り出しや変更ができる API の提供が可能になります。必要なものはすべて、標準の HTTP/1.1 によってウェブサイトから提供されるファイルに埋め込まれています。それぞれのウェブサイトが独自の非標準な RESTful API を定義して、それらがウェブサイトを制御するという事実に REST モデルの欠点があります。\*DAV 拡張との違いは、クライアントとサーバーが相互使用可能ではないことです。RESTful API は、2010 年代にはとても一般的になりました。 -

2005 年よりウェブページを格段に向上させる API セットが利用可能になりました。またこれらのいくつかは特定用途向けに、主に新たな固有の HTTP ヘッダーを作成して HTTP プロトコルを拡張しました:

+2005 年よりウェブページを格段に向上させる API セットが利用可能になりました。またこれらのいくつかは特定用途向けに、主に新たな固有の HTTP ヘッダーを作成して HTTP プロトコルを拡張しました: -
    -
  • Server-sent events。サーバーがクライアントに対して、特別なメッセージを送信できます。
  • -
  • WebSocket。既存の HTTP コネクションを更新することでセットアップできる、新たなプロトコルです。
  • -
+- [Server-sent events](/ja/docs/Web/API/Server-sent_events)。サーバーがクライアントに対して、特別なメッセージを送信できます。 +- [WebSocket](/ja/docs/Web/API/WebSocket_API)。既存の HTTP コネクションを更新することでセットアップできる、新たなプロトコルです。 -

ウェブのセキュリティモデルを緩和する

+### ウェブのセキュリティモデルを緩和する -

HTTP はウェブのセキュリティモデルである 同一オリジンポリシー とは独立した存在です。実は、現在のウェブのセキュリティモデルは HTTP を作成した後に開発されたのです!長年かけて、一定の条件の下でこのポリシーの制限の一部を解除できるようにすることにより、より寛大にできることが有効であると立証されました。いつどのようにしてこれらの制限を解除するかは、新たな HTTP ヘッダー群を使用してサーバーからクライアントに送信されます。これは Cross-Origin Resource Sharing (CORS) や Content Security Policy (CSP) といった仕様で定義されています。

+HTTP はウェブのセキュリティモデルである [同一オリジンポリシー](/ja/docs/Web/Security/Same-origin_policy) とは独立した存在です。実は、現在のウェブのセキュリティモデルは HTTP を作成した後に開発されたのです!長年かけて、一定の条件の下でこのポリシーの制限の一部を解除できるようにすることにより、より寛大にできることが有効であると立証されました。いつどのようにしてこれらの制限を解除するかは、新たな HTTP ヘッダー群を使用してサーバーからクライアントに送信されます。これは [Cross-Origin Resource Sharing](/ja/docs/Glossary/CORS) (CORS) や [Content Security Policy](/ja/docs/Web/Security/CSP) (CSP) といった仕様で定義されています。 -

これらの大きな拡張に加えて、ほかにも実験用に限るものを含めて多くのヘッダーが追加されました。主なヘッダーとしてプライバシーを制御するための Do Not Track ({{HTTPHeader("DNT")}}) ヘッダー、{{HTTPHeader("X-Frame-Options")}}、{{HTTPHeader('Upgrade-Insecure-Request')}} がありますが、さらに多くのヘッダーが存在します。

+これらの大きな拡張に加えて、ほかにも実験用に限るものを含めて多くのヘッダーが追加されました。主なヘッダーとしてプライバシーを制御するための Do Not Track ({{HTTPHeader("DNT")}}) ヘッダー、{{HTTPHeader("X-Frame-Options")}}、{{HTTPHeader('Upgrade-Insecure-Request')}} がありますが、さらに多くのヘッダーが存在します。 -

HTTP/2 – 高パフォーマンスなプロトコル

+## HTTP/2 – 高パフォーマンスなプロトコル -

長年かけてウェブページはより複雑になり、アプリケーション自体も同様に複雑化しました。表示する視覚メディアの量や、対話機能を追加するスクリプトの規模やサイズも増加しました。著しく多くの HTTP リクエストによって、より多くのデータが転送されます。HTTP/1.1 のコネクションは、正しい順序でリクエストを送信しなければなりません。理論上は並行していくつかのコネクションを使用できます (通常 5 から 8 の間) が、かなりのオーバーヘッドや複雑性をもたらします。たとえば HTTP パイプラインは、ウェブ開発でリソースの負荷になることが明らかになりました。

+長年かけてウェブページはより複雑になり、アプリケーション自体も同様に複雑化しました。表示する視覚メディアの量や、対話機能を追加するスクリプトの規模やサイズも増加しました。著しく多くの HTTP リクエストによって、より多くのデータが転送されます。HTTP/1.1 のコネクションは、正しい順序でリクエストを送信しなければなりません。理論上は並行していくつかのコネクションを使用できます (通常 5 から 8 の間) が、かなりのオーバーヘッドや複雑性をもたらします。たとえば HTTP パイプラインは、ウェブ開発でリソースの負荷になることが明らかになりました。 -

2010 年代の前半に Google は実験的なプロトコルである SPDY を実装して、クライアントとサーバーの間でデータを交換するための代替手段を示しました。これは、ブラウザーやサーバーの両方の開発者から多くの関心を集めました。応答性の向上を明確にするとともに、転送するデータの重複による問題を解決することで、SPDY は HTTP/2 プロトコルの基礎を務めました。

+2010 年代の前半に Google は実験的なプロトコルである SPDY を実装して、クライアントとサーバーの間でデータを交換するための代替手段を示しました。これは、ブラウザーやサーバーの両方の開発者から多くの関心を集めました。応答性の向上を明確にするとともに、転送するデータの重複による問題を解決することで、SPDY は HTTP/2 プロトコルの基礎を務めました。 -

HTTP/2 プロトコルには、HTTP/1.1 との大きな違いがいくつかあります:

+HTTP/2 プロトコルには、HTTP/1.1 との大きな違いがいくつかあります: -
    -
  • テキスト形式ではなく、バイナリ形式のプロトコルです。このハードルにより内容を読んだり手作業で作成したりすることができなくなりましたが、改良された最適化技術を実装できるようになりました。
  • -
  • 多重化されたプロトコルです。同じコネクションでリクエストを並行して扱うことができ、HTTP/1.x プロトコルの順序やブロッキングの制約を排除しています。
  • -
  • ヘッダーを圧縮します。一式のリクエスト内で似たものが存在することが多いため、これはデータ転送の重複やオーバーヘッドを削減します。
  • -
  • サーバープッシュと呼ばれる仕組みによって、リクエストより先にサーバーがクライアントのキャッシュにデータを加えることができます。
  • -
+- テキスト形式ではなく、バイナリ形式のプロトコルです。このハードルにより内容を読んだり手作業で作成したりすることができなくなりましたが、改良された最適化技術を実装できるようになりました。 +- 多重化されたプロトコルです。同じコネクションでリクエストを並行して扱うことができ、HTTP/1.x プロトコルの順序やブロッキングの制約を排除しています。 +- ヘッダーを圧縮します。一式のリクエスト内で似たものが存在することが多いため、これはデータ転送の重複やオーバーヘッドを削減します。 +- サーバープッシュと呼ばれる仕組みによって、リクエストより先にサーバーがクライアントのキャッシュにデータを加えることができます。 -

HTTP/2 は 2015 年 5 月に正式に標準化され、多くの成功例がありました。2016 年 7 月には、すべてのウェブサイトの 8.7% [1] ですでに使用されており、すべてのリクエストの 68% 以上を占めています[2]。トラフィックが多いウェブサイトでもっとも早く採用されており、データ転送のオーバーヘッドやそれによる経費をかなり削減しています。

+HTTP/2 は 2015 年 5 月に正式に標準化され、多くの成功例がありました。2016 年 7 月には、すべてのウェブサイトの 8.7% [\[1\]](https://w3techs.com/technologies/details/ce-http2/all/all) ですでに使用されており、すべてのリクエストの 68% 以上を占めています[\[2\]](https://www.keycdn.com/blog/http2-statistics/)。トラフィックが多いウェブサイトでもっとも早く採用されており、データ転送のオーバーヘッドやそれによる経費をかなり削減しています。 -

HTTP/2 はウェブサイトやアプリケーションの改造が不要 (これらにとって HTTP/1.1 を使用するか HTTP/2 を使用するかは透過的です) ですので、このすばやい採用のペースはもっともです。最近のブラウザーと通信する最新のサーバーがあれば、HTTP/2 を有効化するのに十分です。限られたグループだけが採用のきっかけとして必要であり、古いブラウザーやサーバーが更新されるのに従って、ウェブ開発者の努力なしに使用個所が自然に増えていきます。

+HTTP/2 はウェブサイトやアプリケーションの改造が不要 (これらにとって HTTP/1.1 を使用するか HTTP/2 を使用するかは透過的です) ですので、このすばやい採用のペースはもっともです。最近のブラウザーと通信する最新のサーバーがあれば、HTTP/2 を有効化するのに十分です。限られたグループだけが採用のきっかけとして必要であり、古いブラウザーやサーバーが更新されるのに従って、ウェブ開発者の努力なしに使用個所が自然に増えていきます。 -

HTTP/2 以降の進化

+## HTTP/2 以降の進化 -

HTTP/2 の公開によって HTTP の進化が止まったわけではありません。過去の HTTP/1.x と同様に、新しい機能を追加するために HTTP の拡張性が今でも活用されています。特に、2016 年に現れた新たな HTTP の拡張を挙げることができます:

+HTTP/2 の公開によって HTTP の進化が止まったわけではありません。過去の HTTP/1.x と同様に、新しい機能を追加するために HTTP の拡張性が今でも活用されています。特に、2016 年に現れた新たな HTTP の拡張を挙げることができます: -
    -
  • {{HTTPHeader("Alt-Svc")}} に対応することで、指定されたリソースの場所と同一性を分離することができ、よりスマートな {{Glossary("CDN")}} のキャッシュ機構を可能にします。
  • -
  • {{HTTPHeader("Client-Hints")}} の導入によりブラウザーやクライアントがサーバーに対して、クライアントの要件やハードウェアの制約に関する情報を率先して伝えることができます。
  • -
  • {{HTTPHeader("Cookie")}} ヘッダーに導入されたセキュリティ関連の接頭辞は、安全な Cookie が改変されていないことを保証する助けになります。
  • -
+- {{HTTPHeader("Alt-Svc")}} に対応することで、指定されたリソースの場所と同一性を分離することができ、よりスマートな {{Glossary("CDN")}} のキャッシュ機構を可能にします。 +- {{HTTPHeader("Client-Hints")}} の導入によりブラウザーやクライアントがサーバーに対して、クライアントの要件やハードウェアの制約に関する情報を率先して伝えることができます。 +- {{HTTPHeader("Cookie")}} ヘッダーに導入されたセキュリティ関連の接頭辞は、安全な Cookie が改変されていないことを保証する助けになります。 -

これらの HTTP の進化はプロトコルの拡張性やシンプルさを実証しており、多くのアプリケーションの作成やプロトコルの採用を促しています。今日の HTTP が使用される環境は、1990 年代初頭にみられた環境とは大きく異なっています。 HTTP の本来の設計は傑作であることを実証しており、四半世紀にわたって抵抗されることなくウェブを進化させることができました。 HTTP を成功させた柔軟性や拡張性を維持ししながら欠点を直した HTTP/2 の採用は、プロトコルの明るい未来を暗示しています。

+これらの HTTP の進化はプロトコルの拡張性やシンプルさを実証しており、多くのアプリケーションの作成やプロトコルの採用を促しています。今日の HTTP が使用される環境は、1990 年代初頭にみられた環境とは大きく異なっています。 HTTP の本来の設計は傑作であることを実証しており、四半世紀にわたって抵抗されることなくウェブを進化させることができました。 HTTP を成功させた柔軟性や拡張性を維持ししながら欠点を直した HTTP/2 の採用は、プロトコルの明るい未来を暗示しています。 -

HTTP/3 - HTTP over QUIC

+## HTTP/3 - HTTP over QUIC -

{{SeeCompatTable}}

+{{SeeCompatTable}} -

次のメジャーバージョンの HTTP である HTTP/3 は、トランスポート層に TCP/TLS の代わりに QUIC を使用する予定です。

+次のメジャーバージョンの HTTP である HTTP/3 は、トランスポート層に TCP/TLS の代わりに QUIC を使用する予定です。 -

Firefox での実装状況については {{bug(1158011)}} を参照してください。

+Firefox での実装状況については {{bug(1158011)}} を参照してください。 diff --git a/files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.md b/files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.md index 8b3539719da9b7..3de79786cd0d78 100644 --- a/files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.md +++ b/files/ja/web/http/basics_of_http/identifying_resources_on_the_web/index.md @@ -17,176 +17,116 @@ tags: - resources translation_of: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

HTTP 要求の対象は「リソース」と呼ばれ、その本質は細かく定義されていません。ドキュメント、写真、その他の何にでもなりえます。それぞれのリソースは、リソースを特定するために HTTP の至るところで使用される Uniform Resource Identifier ({{Glossary("URI")}}) で特定されます。

+HTTP 要求の対象は「リソース」と呼ばれ、その本質は細かく定義されていません。ドキュメント、写真、その他の何にでもなりえます。それぞれのリソースは、リソースを特定するために HTTP の至るところで使用される Uniform Resource Identifier ({{Glossary("URI")}}) で特定されます。 -

ウェブ上にあるリソースの身元や場所は、たいていひとつの URL (Uniform Resource Locator、 一種の URI) によって与えられます。時々、同一の URI によって身元や場所が与えられない理由が存在します。要求されたリソースについて、クライアントに別の場所へアクセスしてほしい場合に、HTTP では {{HTTPHeader("Alt-Svc")}} ヘッダーを使用します。

+ウェブ上にあるリソースの身元や場所は、たいていひとつの URL (Uniform Resource Locator、 一種の URI) によって与えられます。時々、同一の URI によって身元や場所が与えられない理由が存在します。要求されたリソースについて、クライアントに別の場所へアクセスしてほしい場合に、HTTP では {{HTTPHeader("Alt-Svc")}} ヘッダーを使用します。 -

URL と URN

+## URL と URN -

URL

+### URL -

もっとも一般的な URI の形式は Uniform Resource Locator ({{Glossary("URL")}}) であり、ウェブアドレスとして知られています。

+もっとも一般的な URI の形式は Uniform Resource Locator ({{Glossary("URL")}}) であり、*ウェブアドレス*として知られています。 -
https://developer.mozilla.org
+```
+https://developer.mozilla.org
 https://developer.mozilla.org/en-US/docs/Learn/
-https://developer.mozilla.org/en-US/search?q=URL
+https://developer.mozilla.org/en-US/search?q=URL +``` -

ブラウザーのアドレスバーに URL を入力して、URL に関連付けられているページ (リソース) を読み込むように指示できます。

+ブラウザーのアドレスバーに URL を入力して、URL に関連付けられているページ (リソース) を読み込むように指示できます。 -

URL はさまざまな部品で構成されており、必須のものと省略可能なものがあります。より複雑な URL の例は、以下のようになります:

+URL はさまざまな部品で構成されており、必須のものと省略可能なものがあります。より複雑な URL の例は、以下のようになります: -
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
+``` +http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument +``` -

URN

+### URN -

Uniform Resource Name (URN) は、特定の名前空間内の名前によってリソースを特定する URI です。

+Uniform Resource Name (URN) は、特定の名前空間内の名前によってリソースを特定する URI です。 -
urn:isbn:9780141036144
+```
+urn:isbn:9780141036144
 urn:ietf:rfc:7230
-
- -

2 つの URN は以下のものに対応します:

- -
    -
  • George Orwell の書籍 Nineteen Eighty-Four
  • -
  • IETF 仕様書 7230、 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
  • -
- -

Uniform Resource Identifiers (URI) の構文

- -

スキームまたはプロトコル

- -
-
Protocol
-
http:// はプロトコルです。これは、ブラウザーが使用すべきプロトコルを示します。通常、 HTTP プロトコルまたは安全なバージョンである HTTPS になります。ウェブではこれら2つのうちひとつを必要としますが、ブラウザーは mailto: (メールクライアントを開く) やファイル転送を扱う ftp: といったほかのプロトコルの扱い方も知っていますので、このようなプロトコルが現れても驚かないでください。主なスキームは以下のとおりです:
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
スキーム説明
dataData URI
fileホスト固有のファイル名
ftpFile Transfer Protocol
http/httpsHyper text transfer protocol (安全)
javascriptURL に埋め込まれた JavaScript のコード
mailto電子メールアドレス
sshSecure shell
tel電話
urnUniform Resource Names
view-sourceリソースのソースコード
ws/wss(暗号化された) WebSocket 接続
- -

オーソリティ

- -
-
Domaine Name
-
www.example.com は、名前空間を統制するドメイン名またはオーソリティです。これは、どのウェブサーバーが要求されているかを示します。代わりに {{Glossary("IP address","IP アドレス")}} を直接使用することもできますが、利便性が低いためウェブではあまり使用されません。
-
- -

ポート

- -
-
Port
-
ここで :80 はポートです。これはウェブサーバー内のリソースへアクセスするために使用する、技術上の "出入口" です。ウェブサーバーがリソースへのアクセスを受け入れるために HTTP プロトコルの標準ポート (HTTP では 80、HTTPS では 443) を使用している場合、通常はポートを省略します。それ以外の場合は、ポートが必須です。
-
- -

パス

- -
-
Path to the file
-
/path/to/myfile.html は、ウェブサーバー内にあるリソースのパスです。初期のウェブではこのようなパスが、ウェブサーバー内の物理的なファイルの場所を表していました。現代のパスはたいてい物理的な実情と関係がない、ウェブサーバーによって制御される抽象的なものになっています。
-
- -

クエリ

- -
-
Parameters
-
?key1=value1&key2=value2 は、ウェブサーバーに提供する追加パラメーターです。このパラメーターは & 記号で区切られた、キーと値のペアのリストです。ウェブサーバーは、ユーザーへリソースを返す前に追加の処理を行うために、このパラメーターを使用できます。それぞれのウェブサーバーはパラメーターについて独自の規則を持っており、特定のウェブサーバーがパラメーターを扱う方法を知るために唯一信頼できる方法は、ウェブサーバーの所有者に尋ねることです。
-
- -

フラグメント

- -
-
Anchor
-
#SomewhereInTheDocument は、リソース自体の別の場所へのアンカーです。アンカーはリソース内の一種の "ブックマーク" を表しており、 "ブックマーク" 地点にあるコンテンツを表示するようにブラウザーへ指示を与えます。例えば HTML ドキュメントでは、ブラウザーはアンカーが定義されている位置にスクロールします。動画や音声のドキュメントでは、ブラウザーはアンカーが示す位置への移動を試みます。 # より後の部分はフラグメント識別としても知られており、要求でサーバーには送信されないことは注目に値します。
-
- -

使用上のメモ

- -

{{Glossary("HTML")}} コンテンツの中で URL を使用するとき、一般に使うことができる URL スキームはわずかです。サブリソースを参照する場合 — つまり、最初は巨大な文書の一部だけを使用する場合 — は、 HTTP 及び HTTPS スキームしか使用することができません。加えて、ブラウザーはセキュリティ上の理由から、 FTP を使用したサブリソースの読み込みの対応を削除しつつあります。

- -

FTP は最上位では利用できますが (ブラウザーの URL バーに直接入力したり、リンクの対象とした理)、ブラウザーによっては FTP コンテンツの読み込みを他のアプリケーションに委譲するかもしれません。

- -

- -
https://developer.mozilla.org/en-US/docs/Learn
+```
+
+2 つの URN は以下のものに対応します:
+
+- George Orwell の書籍 Nineteen Eighty-Four
+- IETF 仕様書 7230、 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
+
+## Uniform Resource Identifiers (URI) の構文
+
+### スキームまたはプロトコル
+
+- ![Protocol](https://mdn.mozillademos.org/files/8013/mdn-url-protocol@x2.png)
+  - : `http://` はプロトコルです。これは、ブラウザーが使用すべきプロトコルを示します。通常、 HTTP プロトコルまたは安全なバージョンである HTTPS になります。ウェブではこれら 2 つのうちひとつを必要としますが、ブラウザーは `mailto:` (メールクライアントを開く) やファイル転送を扱う `ftp:` といったほかのプロトコルの扱い方も知っていますので、このようなプロトコルが現れても驚かないでください。主なスキームは以下のとおりです:
+
+| スキーム    | 説明                                                             |
+| ----------- | ---------------------------------------------------------------- |
+| data        | [Data URI](/ja/docs/Web/HTTP/Basics_of_HTTP/Data_URIs)           |
+| file        | ホスト固有のファイル名                                           |
+| ftp         | [File Transfer Protocol](/ja/docs/Glossary/FTP)                  |
+| http/https  | [Hyper text transfer protocol (安全)](/ja/docs/Glossary/HTTP)    |
+| javascript  | URL に埋め込まれた JavaScript のコード                           |
+| mailto      | 電子メールアドレス                                               |
+| ssh         | Secure shell                                                     |
+| tel         | 電話                                                             |
+| urn         | Uniform Resource Names                                           |
+| view-source | リソースのソースコード                                           |
+| ws/wss      | (暗号化された) [WebSocket](/ja/docs/Web/API/WebSockets_API) 接続 |
+
+### オーソリティ
+
+- ![Domaine Name](https://mdn.mozillademos.org/files/8015/mdn-url-domain@x2.png)
+  - : `www.example.com` は、名前空間を統制するドメイン名またはオーソリティです。これは、どのウェブサーバーが要求されているかを示します。代わりに {{Glossary("IP address","IP アドレス")}} を直接使用することもできますが、利便性が低いためウェブではあまり使用されません。
+
+### ポート
+
+- ![Port](https://mdn.mozillademos.org/files/8017/mdn-url-port@x2.png)
+  - : ここで `:80` はポートです。これはウェブサーバー内のリソースへアクセスするために使用する、技術上の "出入口" です。ウェブサーバーがリソースへのアクセスを受け入れるために HTTP プロトコルの標準ポート (HTTP では 80、HTTPS では 443) を使用している場合、通常はポートを省略します。それ以外の場合は、ポートが必須です。
+
+### パス
+
+- ![Path to the file](https://mdn.mozillademos.org/files/8019/mdn-url-path@x2.png)
+  - : `/path/to/myfile.html` は、ウェブサーバー内にあるリソースのパスです。初期のウェブではこのようなパスが、ウェブサーバー内の物理的なファイルの場所を表していました。現代のパスはたいてい物理的な実情と関係がない、ウェブサーバーによって制御される抽象的なものになっています。
+
+### クエリ
+
+- ![Parameters](https://mdn.mozillademos.org/files/8021/mdn-url-parameters@x2.png)
+  - : `?key1=value1&key2=value2` は、ウェブサーバーに提供する追加パラメーターです。このパラメーターは `&` 記号で区切られた、キーと値のペアのリストです。ウェブサーバーは、ユーザーへリソースを返す前に追加の処理を行うために、このパラメーターを使用できます。それぞれのウェブサーバーはパラメーターについて独自の規則を持っており、特定のウェブサーバーがパラメーターを扱う方法を知るために唯一信頼できる方法は、ウェブサーバーの所有者に尋ねることです。
+
+### フラグメント
+
+- ![Anchor](https://mdn.mozillademos.org/files/8023/mdn-url-anchor@x2.png)
+  - : `#SomewhereInTheDocument` は、リソース自体の別の場所へのアンカーです。アンカーはリソース内の一種の "ブックマーク" を表しており、 "ブックマーク" 地点にあるコンテンツを表示するようにブラウザーへ指示を与えます。例えば HTML ドキュメントでは、ブラウザーはアンカーが定義されている位置にスクロールします。動画や音声のドキュメントでは、ブラウザーはアンカーが示す位置への移動を試みます。 # より後の部分はフラグメント識別としても知られており、要求でサーバーには送信されないことは注目に値します。
+
+## 使用上のメモ
+
+{{Glossary("HTML")}} コンテンツの中で URL を使用するとき、一般に使うことができる URL スキームはわずかです。サブリソースを参照する場合 — つまり、最初は巨大な文書の一部だけを使用する場合 — は、 HTTP 及び HTTPS スキームしか使用することができません。加えて、ブラウザーはセキュリティ上の理由から、 FTP を使用したサブリソースの読み込みの対応を削除しつつあります。
+
+FTP は最上位では利用できますが (ブラウザーの URL バーに直接入力したり、リンクの対象とした理)、ブラウザーによっては FTP コンテンツの読み込みを他のアプリケーションに委譲するかもしれません。
+
+## 例
+
+```
+https://developer.mozilla.org/en-US/docs/Learn
 tel:+1-816-555-1212
 git@github.com:mdn/browser-compat-data.git
 ftp://example.org/resource.txt
 urn:isbn:9780141036144
 mailto:help@supercyberhelpdesk.info
-
- -

仕様書

- - - - - - - - - - - - -
仕様書題名
{{RFC("7230", "Uniform Resource Identifiers", "2.7")}}Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
- -

関連情報

- - +``` + +## 仕様書 + +| 仕様書 | 題名 | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------ | +| {{RFC("7230", "Uniform Resource Identifiers", "2.7")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | + +## 関連情報 + +- [URL とは何か](/ja/docs/Learn/Common_questions/What_is_a_URL) +- [IANA list of URI schemes](http://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml) diff --git a/files/ja/web/http/basics_of_http/index.md b/files/ja/web/http/basics_of_http/index.md index 0ea3565f5adb4b..79c39908982113 100644 --- a/files/ja/web/http/basics_of_http/index.md +++ b/files/ja/web/http/basics_of_http/index.md @@ -8,43 +8,41 @@ tags: - 概要 translation_of: Web/HTTP/Basics_of_HTTP --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

HTTP はとても拡張性のあるプロトコルです。リソースの記述や URI などわずかな基本概念に基づいており、メッセージ構造が単純で、コミュニケーションの流れはクライアント・サーバー構造です。これらの基本概念の上に、いくつもの拡張が何年にもわたって行われ、新しい機能や新しい意味が新しい HTTP メソッドやヘッダーによって追加されています。

+HTTP はとても拡張性のあるプロトコルです。リソースの記述や URI などわずかな基本概念に基づいており、メッセージ構造が単純で、コミュニケーションの流れはクライアント・サーバー構造です。これらの基本概念の上に、いくつもの拡張が何年にもわたって行われ、新しい機能や新しい意味が新しい HTTP メソッドやヘッダーによって追加されています。 -

記事

+## 記事 -
-
HTTP の概要
-
HTTP とは何であるか、そしてウェブアーキテクチャにおけるこのプロトコルの役割について説明します。
-
HTTP の進化
-
HTTP は1990年代初めに作成され、何度も拡張されました。この記事では、 HTTP/0.9、 HTTP/1.0、 HTTP/1.1、現代の HTTP/2、および長年にわたり導入されている小さなノベルティについての歴史を説明します。
-
HTTP バージョンのネゴシエーション
-
クライアントとサーバーが特定の HTTP バージョンをネゴシエートし、最終的に使用されたプロトコルバージョンをアップグレードする方法を説明します。
-
リソースと URI
-
ウェブ上のリソース、識別子、および場所の概念を簡単に紹介します。
-
ウェブ上のリソースの識別
-
ウェブリソースの参照方法とどのように配置されるのかについて説明します。
-
データ URI
-
それが表すリソースを直接埋め込む特定の種類の URI。データ URI はとても便利ですが、いくつかの注意点があります。
-
リソース URL {{Non-standard_Inline}}
-
resource: というスキームの接頭辞が付いた URL は、 Firefox と Firefox のブラウザー拡張機能によってリソースを内部的に読み込むために使用されますが、情報の一部はブラウザーが接続するサイトでも利用できます。
-
リソースの識別と場所の分離: Alt-Svc HTTP ヘッダー
-
ほとんどの場合、ウェブリソースの識別子と場所は共有されますが、これは {{HTTPHeader("Alt-Svc")}} ヘッダーで変更できます。
-
MIME タイプ
-
HTTP/1.0 以降では、様々なタイプのコンテンツを送信することができます。 この記事では {{HTTPHeader("Content-Type")}} ヘッダーと MIME 標準を使用してこれがどのように行われるかについて説明します。
-
www URL とそうでない URL の選択
-
www という接頭辞のドメインを使うかどうかに関するアドバイスで、この記事では選択の結果とその作成方法について説明します。
-
HTTP セッションの流れ
-
この基本的な記事では典型的な HTTP セッションについて説明します。ブラウザーのリンクをクリックすると、何が起こるのでしょうか
-
HTTP メッセージ
-
HTTP リクエストまたはレスポンス中に送信されるメッセージは、非常に明確な構造を持っています。この入門記事ではその構造、目的、可能性について説明します。
-
HTTP/2 でのフレームとメッセージ構造
-
HTTP/2 は HTTP/1.x メッセージをカプセル化し、バイナリフレームで表現します。この記事ではフレームの構造、目的、エンコード方法について説明します。
-
HTTP/1.x でのコネクション管理
-
HTTP/1.1 は持続的な接続とパイプライン処理をサポートする HTTP の最初のバージョンでした。この記事ではこれらの2つの概念について説明します。
-
HTTP/2 でのコネクション管理
-
HTTP/2 では接続の作成方法とメンテナンス方法が完全に再考されました。この記事では HTTP フレームが多重化を許可し、以前の HTTP バージョンの 'head-of-line' ブロック問題を解決する方法について説明します。
-
コンテンツネゴシエーション
-
HTTP はブラウザが好みの形式、言語、またはエンコーディングをアナウンスするための方法として Accept- から始まる一連のヘッダを導入しています。この記事ではこの宣言がどのように起こるか、サーバがどのように反応すると予想され、どのように最も適切な応答を選択するかについて説明します。
-
+- [HTTP の概要](/ja/docs/Web/HTTP/Overview) + - : HTTP とは何であるか、そしてウェブアーキテクチャにおけるこのプロトコルの役割について説明します。 +- [HTTP の進化](/ja/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP) + - : HTTP は 1990 年代初めに作成され、何度も拡張されました。この記事では、 HTTP/0.9、 HTTP/1.0、 HTTP/1.1、現代の HTTP/2、および長年にわたり導入されている小さなノベルティについての歴史を説明します。 +- [HTTP バージョンのネゴシエーション](/ja/docs/Web/HTTP/Basics_of_HTTP/Negotiating_an_HTTP_version) + - : クライアントとサーバーが特定の HTTP バージョンをネゴシエートし、最終的に使用されたプロトコルバージョンをアップグレードする方法を説明します。 +- [リソースと URI](/ja/docs/Web/HTTP/Resources_and_URIs) + - : ウェブ上のリソース、識別子、および場所の概念を簡単に紹介します。 +- [ウェブ上のリソースの識別](/ja/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) + - : ウェブリソースの参照方法とどのように配置されるのかについて説明します。 +- [データ URI](/ja/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) + - : それが表すリソースを直接埋め込む特定の種類の URI。データ URI はとても便利ですが、いくつかの注意点があります。 +- [リソース URL](/ja/docs/Web/HTTP/Basics_of_HTTP/Resource_URLs) {{Non-standard_Inline}} + - : `resource:` というスキームの接頭辞が付いた URL は、 Firefox と Firefox のブラウザー拡張機能によってリソースを内部的に読み込むために使用されますが、情報の一部はブラウザーが接続するサイトでも利用できます。 +- リソースの識別と場所の分離: Alt-Svc HTTP ヘッダー + - : ほとんどの場合、ウェブリソースの識別子と場所は共有されますが、これは {{HTTPHeader("Alt-Svc")}} ヘッダーで変更できます。 +- [MIME タイプ](/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types) + - : HTTP/1.0 以降では、様々なタイプのコンテンツを送信することができます。 この記事では {{HTTPHeader("Content-Type")}} ヘッダーと MIME 標準を使用してこれがどのように行われるかについて説明します。 +- [www URL とそうでない URL の選択](/ja/docs/Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs) + - : www という接頭辞のドメインを使うかどうかに関するアドバイスで、この記事では選択の結果とその作成方法について説明します。 +- [HTTP セッションの流れ](/ja/docs/Web/HTTP/Flow_of_an_HTTP_session) + - : この基本的な記事では典型的な HTTP セッションについて説明します。ブラウザーのリンクをクリックすると、何が起こるのでしょうか +- [HTTP メッセージ](/ja/docs/Web/HTTP/Messages) + - : HTTP リクエストまたはレスポンス中に送信されるメッセージは、非常に明確な構造を持っています。この入門記事ではその構造、目的、可能性について説明します。 +- [HTTP/2 でのフレームとメッセージ構造]() + - : HTTP/2 は HTTP/1.x メッセージをカプセル化し、バイナリフレームで表現します。この記事ではフレームの構造、目的、エンコード方法について説明します。 +- [HTTP/1.x でのコネクション管理](/ja/docs/Web/HTTP/Connection_management_in_HTTP_1.x) + - : HTTP/1.1 は持続的な接続とパイプライン処理をサポートする HTTP の最初のバージョンでした。この記事ではこれらの 2 つの概念について説明します。 +- [HTTP/2 でのコネクション管理](/ja/docs/Web/HTTP/Connection_management_in_HTTP_2) + - : HTTP/2 では接続の作成方法とメンテナンス方法が完全に再考されました。この記事では HTTP フレームが多重化を許可し、以前の HTTP バージョンの 'head-of-line' ブロック問題を解決する方法について説明します。 +- [コンテンツネゴシエーション](/ja/docs/Web/HTTP/Content_negotiation) + - : HTTP はブラウザが好みの形式、言語、またはエンコーディングをアナウンスするための方法として `Accept-` から始まる一連のヘッダを導入しています。この記事ではこの宣言がどのように起こるか、サーバがどのように反応すると予想され、どのように最も適切な応答を選択するかについて説明します。 diff --git a/files/ja/web/http/basics_of_http/mime_types/common_types/index.md b/files/ja/web/http/basics_of_http/mime_types/common_types/index.md index e19297a919fde5..2d1f6d36f28a75 100644 --- a/files/ja/web/http/basics_of_http/mime_types/common_types/index.md +++ b/files/ja/web/http/basics_of_http/mime_types/common_types/index.md @@ -14,392 +14,445 @@ tags: - 音声 translation_of: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

これは文書の種類に関連付けられている MIME タイプの一覧であり、一般的な拡張子の昇順に並べています。

+これは文書の種類に関連付けられている MIME タイプの一覧であり、一般的な拡張子の昇順に並べています。 -

2 つの主要な MIME タイプは、既定のタイプの役割として重要です。

+2 つの主要な MIME タイプは、既定のタイプの役割として重要です。 -
    -
  • text/plain は、テキスト形式ファイルの既定の値です。テキスト形式ファイルは人間が読めるはずであり、バイナリーデータを含んではなりません。
  • -
  • application/octet-stream は、上記以外の場合の既定値です。未知の種類のファイルは、このタイプを使用するべきです。ブラウザーはこれらのファイルを扱う際に特に注意を払い、危険な動作からユーザーを保護しようとします。
  • -
+- `text/plain` は、テキスト形式ファイルの既定の値です。テキスト形式ファイルは人間が読めるはずであり、バイナリーデータを含んではなりません。 +- `application/octet-stream` は、上記以外の場合の既定値です。未知の種類のファイルは、このタイプを使用するべきです。ブラウザーはこれらのファイルを扱う際に特に注意を払い、危険な動作からユーザーを保護しようとします。 -

IANA は MIME メディアタイプの公式な登録先であり、すべての公式 MIME タイプの一覧 を管理しています。以下の表は、ウェブ向けに重要な一部の MIME タイプを掲載しています:

+IANA は MIME メディアタイプの公式な登録先であり、[すべての公式 MIME タイプの一覧](http://www.iana.org/assignments/media-types/media-types.xhtml) を管理しています。以下の表は、ウェブ向けに重要な一部の MIME タイプを掲載しています: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
拡張子文書の種類MIME タイプ
.aacAAC 音声audio/aac
.abwAbiWord 文書application/x-abiword
.arc(複数のファイルが埋め込まれた) アーカイブ文書application/x-freearc
.aviAVI: Audio Video Interleavevideo/x-msvideo
.azwAmazon Kindle eBook 形式application/vnd.amazon.ebook
.bin任意の種類のバイナリーデータapplication/octet-stream
.bmpWindows OS/2 ビットマップ画像image/bmp
.bzBZip アーカイブapplication/x-bzip
.bz2BZip2 アーカイブapplication/x-bzip2
.cshC-Shell スクリプトapplication/x-csh
.cssカスケーディングスタイルシート (CSS)text/css
.csvカンマ区切り値 (CSV)text/csv
.docMicrosoft Wordapplication/msword
.docxMicrosoft Word (OpenXML)application/vnd.openxmlformats-officedocument.wordprocessingml.document
.eotMS 埋め込み OpenType フォントapplication/vnd.ms-fontobject
.epub電子出版 (EPUB)application/epub+zip
.gzGZip 圧縮アーカイブapplication/gzip
.gifグラフィック交換形式 (GIF)image/gif
.htm
- .html
ハイパーテキストマークアップ言語 (HTML)text/html
.icoアイコン形式image/vnd.microsoft.icon
.icsiCalendar 形式text/calendar
.jarJava Archive (JAR)application/java-archive
.jpeg
- .jpg
JPEG 画像image/jpeg
.jsJavaScript -

以下の仕様書によれば text/javascript

- - -
.jsonJSON 形式application/json
.jsonldJSON-LD 形式application/ld+json
.mid
- .midi
Musical Instrument Digital Interface (MIDI)audio/midi audio/x-midi
.mjsJavaScript モジュールtext/javascript
.mp3MP3 音声audio/mpeg
.mpegMPEG 動画video/mpeg
.mpkgApple Installer Packageapplication/vnd.apple.installer+xml
.odpOpenDocuemnt プレゼンテーション文書application/vnd.oasis.opendocument.presentation
.odsOpenDocuemnt 表計算文書application/vnd.oasis.opendocument.spreadsheet
.odtOpenDocument テキスト文書application/vnd.oasis.opendocument.text
.ogaOGG 音声audio/ogg
.ogvOGG 動画video/ogg
.ogxOGGapplication/ogg
.opusOpus 音声audio/opus
.otfOpenType フォントfont/otf
.pngPortable Network Graphicsimage/png
.pdfAdobe Portable Document Format (PDF)application/pdf
.phpHypertext Preprocessor (Personal Home Page)application/x-httpd-php
.pptMicrosoft PowerPointapplication/vnd.ms-powerpoint
.pptxMicrosoft PowerPoint (OpenXML)application/vnd.openxmlformats-officedocument.presentationml.presentation
.rarRAR アーカイブapplication/vnd.rar
.rtfリッチテキスト形式 (RTF)application/rtf
.shBourne shell スクリプトapplication/x-sh
.svgScalable Vector Graphics (SVG)image/svg+xml
.swfSmall web format (SWF) または Adobe Flash 文書application/x-shockwave-flash
.tarTape Archive (TAR)application/x-tar
.tif
- .tiff
Tagged Image File Format (TIFF)image/tiff
.tsMPEG transport streamvideo/mp2t
.ttfTrueType フォントfont/ttf
.txtテキストファイル (一般に ASCII or ISO 8859-n)text/plain
.vsdMicrosoft Visioapplication/vnd.visio
.wavWaveform 音声形式audio/wav
.webaWEBM 音声audio/webm
.webmWEBM 動画video/webm
.webpWEBP 画像image/webp
.woffWeb Open Font Format (WOFF)font/woff
.woff2Web Open Font Format (WOFF)font/woff2
.xhtmlXHTMLapplication/xhtml+xml
.xlsMicrosoft Excelapplication/vnd.ms-excel
.xlsxMicrosoft Excel (OpenXML)application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlXMLapplication/xml: 一般のユーザーから読めるものではない場合 (RFC 3023, section 3)
- text/xml: 一般のユーザーから読めるものである場合 (RFC 3023, section 3)
.xulXULapplication/vnd.mozilla.xul+xml
.zipZIP アーカイブapplication/zip
.3gp3GPP 音声/動画コンテナーvideo/3gpp
- 動画を含まない場合は audio/3gpp
.3g23GPP2 音声/動画コンテナーvideo/3gpp2
- 動画を含まない場合は audio/3gpp2
.7z7-zip アーカイブapplication/x-7z-compressed
拡張子文書の種類MIME タイプ
.aacAAC 音声audio/aac
.abwAbiWord 文書application/x-abiword
.arc(複数のファイルが埋め込まれた) アーカイブ文書application/x-freearc
.aviAVI: Audio Video Interleavevideo/x-msvideo
.azwAmazon Kindle eBook 形式application/vnd.amazon.ebook
.bin任意の種類のバイナリーデータapplication/octet-stream
.bmpWindows OS/2 ビットマップ画像image/bmp
.bzBZip アーカイブapplication/x-bzip
.bz2BZip2 アーカイブapplication/x-bzip2
.cshC-Shell スクリプトapplication/x-csh
.cssカスケーディングスタイルシート (CSS)text/css
.csvカンマ区切り値 (CSV)text/csv
.docMicrosoft Wordapplication/msword
.docxMicrosoft Word (OpenXML) + application/vnd.openxmlformats-officedocument.wordprocessingml.document +
.eotMS 埋め込み OpenType フォントapplication/vnd.ms-fontobject
.epub電子出版 (EPUB)application/epub+zip
.gzGZip 圧縮アーカイブapplication/gzip
.gifグラフィック交換形式 (GIF)image/gif
+ .htm
.html
+
ハイパーテキストマークアップ言語 (HTML)text/html
.icoアイコン形式image/vnd.microsoft.icon
.icsiCalendar 形式text/calendar
.jarJava Archive (JAR)application/java-archive
.jpeg
.jpg
JPEG 画像image/jpeg
.jsJavaScript +

以下の仕様書によれば text/javascript

+ +
.jsonJSON 形式application/json
.jsonldJSON-LD 形式application/ld+json
.mid
.midi
Musical Instrument Digital Interface (MIDI)audio/midi audio/x-midi
.mjsJavaScript モジュールtext/javascript
.mp3MP3 音声audio/mpeg
.mpegMPEG 動画video/mpeg
.mpkgApple Installer Packageapplication/vnd.apple.installer+xml
.odpOpenDocuemnt プレゼンテーション文書application/vnd.oasis.opendocument.presentation
.odsOpenDocuemnt 表計算文書application/vnd.oasis.opendocument.spreadsheet
.odtOpenDocument テキスト文書application/vnd.oasis.opendocument.text
.ogaOGG 音声audio/ogg
.ogvOGG 動画video/ogg
.ogxOGGapplication/ogg
.opusOpus 音声audio/opus
.otfOpenType フォントfont/otf
.pngPortable Network Graphicsimage/png
.pdf + Adobe + Portable Document Format + (PDF) + application/pdf
.phpHypertext Preprocessor (Personal Home Page)application/x-httpd-php
.pptMicrosoft PowerPointapplication/vnd.ms-powerpoint
.pptxMicrosoft PowerPoint (OpenXML) + application/vnd.openxmlformats-officedocument.presentationml.presentation +
.rarRAR アーカイブapplication/vnd.rar
.rtfリッチテキスト形式 (RTF)application/rtf
.shBourne shell スクリプトapplication/x-sh
.svgScalable Vector Graphics (SVG)image/svg+xml
.swf + Small web format (SWF) + または Adobe Flash 文書 + application/x-shockwave-flash
.tarTape Archive (TAR)application/x-tar
+ .tif
.tiff
+
Tagged Image File Format (TIFF)image/tiff
.tsMPEG transport streamvideo/mp2t
.ttfTrueType フォントfont/ttf
.txtテキストファイル (一般に ASCII or ISO 8859-n)text/plain
.vsdMicrosoft Visioapplication/vnd.visio
.wavWaveform 音声形式audio/wav
.webaWEBM 音声audio/webm
.webmWEBM 動画video/webm
.webpWEBP 画像image/webp
.woffWeb Open Font Format (WOFF)font/woff
.woff2Web Open Font Format (WOFF)font/woff2
.xhtmlXHTMLapplication/xhtml+xml
.xlsMicrosoft Excelapplication/vnd.ms-excel
.xlsxMicrosoft Excel (OpenXML) + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +
.xmlXML + application/xml: + 一般のユーザーから読めるものではない場合 (RFC 3023, section 3)
text/xml: + 一般のユーザーから読めるものである場合 (RFC 3023, section 3) +
.xulXULapplication/vnd.mozilla.xul+xml
.zipZIP アーカイブapplication/zip
.3gp + 3GPP + 音声/動画コンテナー + + video/3gpp
動画を含まない場合は + audio/3gpp +
.3g2 + 3GPP2 + 音声/動画コンテナー + + video/3gpp2
動画を含まない場合は + audio/3gpp2 +
.7z + 7-zip アーカイブ + application/x-7z-compressed
diff --git a/files/ja/web/http/basics_of_http/resource_urls/index.md b/files/ja/web/http/basics_of_http/resource_urls/index.md index 1161f32c54bfda..ae0506c9cfad94 100644 --- a/files/ja/web/http/basics_of_http/resource_urls/index.md +++ b/files/ja/web/http/basics_of_http/resource_urls/index.md @@ -8,66 +8,70 @@ tags: - Resource translation_of: Web/HTTP/Basics_of_HTTP/Resource_URLs --- -

{{HTTPSidebar}}{{non-standard_header}}

+{{HTTPSidebar}}{{non-standard_header}} -

resource: というスキームのプレフィックスが付いたリソース URL は、Firefox と Firefox のブラウザ拡張機能によってリソースを内部的に読み込むために使用されますが、情報の一部はブラウザが接続するサイトでも利用できます。

+`resource:` というスキームのプレフィックスが付いたリソース URL は、Firefox と Firefox のブラウザ拡張機能によってリソースを内部的に読み込むために使用されますが、情報の一部はブラウザが接続するサイトでも利用できます。 -

構文

+## 構文 -

リソースURLは、接頭辞 (resource:) とロードするリソースを指す URL の2つの部分で構成されます。

+リソース URL は、接頭辞 (`resource:`) とロードするリソースを指す URL の 2 つの部分で構成されます。 -
resource://<url>
+``` +resource:// +``` -

+例 -
resource://gre/res/svg.css
+``` +resource://gre/res/svg.css +``` -

リソース URL ('->') に矢印がある場合は、最初のファイルが次のファイルにロードされたことを意味します。

+リソース URL ('->') に矢印がある場合は、最初のファイルが次のファイルにロードされたことを意味します。 -
resource://<File-loader> -> <File-loaded>
+``` +resource:// -> +``` -

より一般的な詳細については、ウェブ上のリソースの識別を参照してください。

+より一般的な詳細については、[ウェブ上のリソースの識別](/ja/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web)を参照してください。 -

この記事では、組み込みのリソースを指すために Firefox が内部的に使用するリソース URI に焦点を当てます。

+この記事では、組み込みのリソースを指すために Firefox が内部的に使用するリソース URI に焦点を当てます。 -

脅威

+## 脅威 -

resource: URL によって共有される情報の一部はウェブサイトで利用できるため、ウェブページは内部スクリプトを実行し、デフォルトの設定を含む Firefox の内部リソースを調べることができます。

+`resource:` URL によって共有される情報の一部はウェブサイトで利用できるため、ウェブページは内部スクリプトを実行し、デフォルトの設定を含む Firefox の内部リソースを調べることができます。 -

たとえば、Browserleaks のスクリプトは、サイトで実行されている簡単なスクリプトでクエリが実行されたときに Firefox が表示する内容を強調表示します (コードは https://browserleaks.com/firefox#more にあります)。

+たとえば、[Browserleaks のスクリプト](https://www.browserleaks.com/firefox)は、サイトで実行されている簡単なスクリプトでクエリが実行されたときに Firefox が表示する内容を強調表示します (コードは にあります)。 -

ファイル firefox.js は、プリファレンス名と値を pref() 関数に渡します。 例えば、

+ファイル firefox.js は、プリファレンス名と値を pref() 関数に渡します。 例えば、 -
http://searchfox.org/mozilla-central/rev/48ea452803907f2575d81021e8678634e8067fc2/browser/app/profile/firefox.js#575
+``` +http://searchfox.org/mozilla-central/rev/48ea452803907f2575d81021e8678634e8067fc2/browser/app/profile/firefox.js#575 +``` -

ウェブサイトではこの pref() 関数をオーバーライドし、スクリプトresource:///defaults/preferences/firefox.js を使用して、 Firefox のデフォルト設定を簡単に収集できます。

+ウェブサイトではこの `pref()` 関数をオーバーライドし、スクリプト`resource:///defaults/preferences/firefox.js` を使用して、 Firefox のデフォルト設定を簡単に収集できます。 -

さらに、プラットフォームやロケールなどのビルド構成によっては、ウェブサイトがこの情報を使用して個々のユーザーを識別できるという意味で、いくつかのデフォルト設定値が異なります。

+さらに、プラットフォームやロケールなどのビルド構成によっては、ウェブサイトがこの情報を使用して個々のユーザーを識別できるという意味で、いくつかのデフォルト設定値が異なります。 -

解決方法

+## 解決方法 -

この問題を解決するために、 Mozilla は {{bug(863246)}} のリソースを読み込む動作を変更しました。これは Firefox 57 (Quantum) で登場しました。

+この問題を解決するために、 Mozilla は {{bug(863246)}} のリソースを読み込む動作を変更しました。これは [Firefox 57 (Quantum)](/ja/docs/Mozilla/Firefox/Releases/57) で登場しました。 -

過去には、ウェブコンテンツは、 Firefox の内部リソースだけでなく、拡張機能の資産も含め、URIが必要とするあらゆるリソースにアクセスすることができました。 現在、この動作はデフォルトでは禁止されています。

+過去には、ウェブコンテンツは、 Firefox の内部リソースだけでなく、拡張機能の資産も含め、URI が必要とするあらゆるリソースにアクセスすることができました。 現在、この動作はデフォルトでは禁止されています。 -

しかし、特定の状況下で Firefox がウェブコンテンツにリソースを読み込む必要があります。 たとえば、ビュー・ソース・ページ (ビュー・ソースまたはビュー選択ソース) を開くと、 resource: URI を介して viewsource.css が必要です。ウェブコンテンツに公開する必要があるリソースは、 resource://content-accessible/という名前の新しい場所に移動されました。これは隔離されており、重要ではないリソースのみが含まれています。 このようにして、重要なリソースを公開し、ほとんどの脅威を排除できます。

+しかし、特定の状況下で Firefox がウェブコンテンツにリソースを読み込む必要があります。 たとえば、ビュー・ソース・ページ (ビュー・ソースまたはビュー選択ソース) を開くと、 `resource:` URI を介して `viewsource.css` が必要です。ウェブコンテンツに公開する必要があるリソースは、 `resource://content-accessible/`という名前の新しい場所に移動されました。これは隔離されており、重要ではないリソースのみが含まれています。 このようにして、重要なリソースを公開し、ほとんどの脅威を排除できます。 -
-

メモ: ウェブと拡張機能の開発者がリソース URL をもう使用しようとしないことをお勧めします。彼らの使い方はうまくいきませんでした。そしてほとんどの使用法はこれ以上動作しません。

-
+> **Note:** **メモ**: ウェブと拡張機能の開発者がリソース URL をもう使用しようとしないことをお勧めします。彼らの使い方はうまくいきませんでした。そしてほとんどの使用法はこれ以上動作しません。 -

仕様

+## 仕様 -

resource: はどの仕様書にも定義されていません。

+resource: はどの仕様書にも定義されていません。 -

ブラウザーの対応

+## ブラウザーの対応 -

resource: は Firefox のみ対応

+resource: は Firefox のみ対応 -

関連情報

+## 関連情報 - +- [ウェブ上のリソースの識別](/ja/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) +- [URL とは何か](/ja/docs/Learn/Common_questions/What_is_a_URL) +- [IANA list of URI schemes](https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml) (`resource:` is [covered here](https://www.iana.org/assignments/uri-schemes/prov/resource)) diff --git a/files/ja/web/http/browser_detection_using_the_user_agent/index.md b/files/ja/web/http/browser_detection_using_the_user_agent/index.md index e7eae62de1cffd..e4d880ebc1c3ae 100644 --- a/files/ja/web/http/browser_detection_using_the_user_agent/index.md +++ b/files/ja/web/http/browser_detection_using_the_user_agent/index.md @@ -7,105 +7,73 @@ tags: - Web Development translation_of: Web/HTTP/Browser_detection_using_the_user_agent --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

ブラウザーによって異なるウェブページまたはサービスを提供するのは、ふつうは良いことではありません。ウェブは使用しているブラウザーや機器に関係なく、誰からでもアクセスできるものです。ウェブサイトを開発する方法として、特定のブラウザーを対象にするのではなく、機能が利用できるかどうかに基づいたプログレッシブエンハンスメントにする方法があります。

+ブラウザーによって異なるウェブページまたはサービスを提供するのは、ふつうは良いことではありません。ウェブは使用しているブラウザーや機器に関係なく、誰からでもアクセスできるものです。ウェブサイトを開発する方法として、特定のブラウザーを対象にするのではなく、機能が利用できるかどうかに基づいたプログレッシブエンハンスメントにする方法があります。 -

しかし、ブラウザーや標準は完全ではなく、ブラウザーの判定を必要とする場合も稀にあります。ユーザーエージェント文字列を使用してブラウザーを判定することは簡単に見えますが、うまく行くようにするのは、実はとても難しい問題です。この文書では、これをできるだけ正しく行う方法を案内します。

+しかし、ブラウザーや標準は完全ではなく、ブラウザーの判定を必要とする場合も稀にあります。ユーザーエージェント文字列を使用してブラウザーを判定することは簡単に見えますが、うまく行くようにするのは、実はとても難しい問題です。この文書では、これをできるだけ正しく行う方法を案内します。 -
-

繰り返します。ユーザーエージェントを調べるのが良いことはめったにありません。問題を解決するには、もっと良い、もっと広く互換性のある方法が見つかるはずです。

-
+> **Note:** 繰り返します。ユーザーエージェントを調べるのが良いことはめったにありません。問題を解決するには、もっと良い、もっと広く互換性のある方法が見つかるはずです。 -

ブラウザーの判定を用いる前に考えること

+## ブラウザーの判定を用いる前に考えること -

ユーザーエージェント文字列を使用して、使用されているブラウザーを判定することを検討している場合は、できればまずは回避するようにしてください。なぜそれをやりたいのかを見分けることから始めましょう。

+ユーザーエージェント文字列を使用して、使用されているブラウザーを判定することを検討している場合は、できればまずは回避するようにしてください。**なぜ**それをやりたいのかを見分けることから始めましょう。 -
-
ブラウザーのあるバージョンの特有のバグを回避しようとしているのですか?
-
専門のフォーラムで見たり尋ねたりしてみましょう。この問題に最初に遭遇したのがあなたであることはほとんどありません。また専門家、あるいは別の視点を持つ人々が、バグを回避するためのアイディアをくれるかもしれません。珍しい問題である場合は、このバグがバグ追跡システム (Mozilla; WebKit; Blink; Opera) を介してブラウザーのベンダーに報告されているかどうかを確認することが重要です。ブラウザーメーカーはバグレポートに注意を払い、そのバグの他の回避策を分析するかもしれません。
-
特定の機能が存在するかどうか確認しようとしているのですか?
-
一部のブラウザーがまだ対応していない特定のウェブ機能をサイトで使用する必要がある場合、未対応のブラウザーのユーザーには、より機能が少ないものの動作することが分かっている古いウェブサイトを送信したい場合があります。これはユーザーエージェントの検出を使用する最悪の理由です。なぜなら、この差は最終的に他のすべてのブラウザーが追いつくからです。さらに、これらのウェブ機能について、それほど一般的でないブラウザーを1つ1つテストするのは現実的ではありません。ユーザーエージェントによる判定は決して行うべきではありません。その代わりに常に機能の検出を行う代替手段があります。
-
使用されているブラウザーによって異なる HTML を提供する予定ですか?
-
通常では悪い慣例ですが、これが必要な場合もあります。このような場合は、まず自分の状況を分析してそれが本当に必要であることを確認してください。形式的な {{ HTMLElement("div") }} または {{ HTMLElement("span") }} 要素を追加することで、それを防ぐことができませんか?ユーザーエージェントの検出を正しく行うことは、 HTML の純度をいくらか損なっても構わないくらい難しいものです。また、デザインを考え直してください。プログレッシブエンハンスメントや流体レイアウトを使用することで、回避することはできませんか?
-
+- ブラウザーのあるバージョンの特有のバグを回避しようとしているのですか? + - : 専門のフォーラムで見たり尋ねたりしてみましょう。この問題に最初に遭遇したのがあなたであることはほとんどありません。また専門家、あるいは別の視点を持つ人々が、バグを回避するためのアイディアをくれるかもしれません。珍しい問題である場合は、このバグがバグ追跡システム ([Mozilla](https://bugzilla.mozilla.org); [WebKit](https://bugs.webkit.org); [Blink](https://www.chromium.org/issue-tracking); [Opera](https://bugs.opera.com/)) を介してブラウザーのベンダーに報告されているかどうかを確認することが重要です。ブラウザーメーカーはバグレポートに注意を払い、そのバグの他の回避策を分析するかもしれません。 +- 特定の機能が存在するかどうか確認しようとしているのですか? + - : 一部のブラウザーがまだ対応していない特定のウェブ機能をサイトで使用する必要がある場合、未対応のブラウザーのユーザーには、より機能が少ないものの動作することが分かっている古いウェブサイトを送信したい場合があります。これはユーザーエージェントの検出を使用する最悪の理由です。なぜなら、この差は最終的に他のすべてのブラウザーが追いつくからです。さらに、これらのウェブ機能について、それほど一般的でないブラウザーを1つ1つテストするのは現実的ではありません。ユーザーエージェントによる判定は**決して**行うべきではありません。その代わりに**常に**機能の検出を行う代替手段があります。 +- 使用されているブラウザーによって異なる HTML を提供する予定ですか? + - : 通常では悪い慣例ですが、これが必要な場合もあります。このような場合は、まず自分の状況を分析してそれが本当に必要であることを確認してください。形式的な {{ HTMLElement("div") }} または {{ HTMLElement("span") }} 要素を追加することで、それを防ぐことができませんか?ユーザーエージェントの検出を正しく行うことは、 HTML の純度をいくらか損なっても構わないくらい難しいものです。また、デザインを考え直してください。プログレッシブエンハンスメントや流体レイアウトを使用することで、回避することはできませんか? -

ユーザーエージェントの判定の回避

+## ユーザーエージェントの判定の回避 -

ユーザーエージェントの検出を使用しないようにするのであれば、いくつかの選択肢があります。

+ユーザーエージェントの検出を使用しないようにするのであれば、いくつかの選択肢があります。 -
-
機能の検出
-
機能の検出とは、ページを表示しているブラウザーを特定するのではなく、必要な機能が利用可能であるかどうかを確認することです。利用できない場合は代替手段を使用します。ブラウザーによって異なる動作をする場合は稀ですが、ユーザーエージェント文字列をチェックする代わりに、ブラウザーがその API をどう実装しているか検査する処理を実装し、そこから使い方を判断しましょう。機能の検出の今のところ良い例は次の通りです。最近、 Chrome は正規表現に実験的な後方参照の対応を追加しましたが、他のブラウザーは今のところ対応していません。ですから、間違って以下のようにするべきと思うかもしれません。
-
-
// this code snippet splits a string in a special notation
+
機能の検出
機能の検出とは、ページを表示しているブラウザーを特定するのではなく、必要な機能が利用可能であるかどうかを確認することです。利用できない場合は代替手段を使用します。ブラウザーによって異なる動作をする場合は稀ですが、ユーザーエージェント文字列をチェックする代わりに、ブラウザーがその API をどう実装しているか検査する処理を実装し、そこから使い方を判断しましょう。機能の検出の今のところ良い例は次の通りです。最近、 Chrome は正規表現に実験的な後方参照の対応を追加しましたが、他のブラウザーは今のところ対応していません。ですから、間違って以下のようにするべきと思うかもしれません。
// this code snippet splits a string in a special notation
 
 if (navigator.userAgent.indexOf("Chrome") !== -1){
-    // YES! The user is suspected to support look-behind regexps
-    // DO NOT USE /(?<=[A-Z])/. It will cause a syntax error in
-    //  browsers that do not support look-behind expressions
-    //  because all browsers parse the entire script, including
-    //  sections of the code that are never executed.
-    var camelCaseExpression = new RegExp("(?<=[A-Z])");
-    var splitUpString = function(str) {
-        return (""+str).split(camelCaseExpression);
-    };
+// YES! The user is suspected to support look-behind regexps
+// DO NOT USE /(?<=[A-Z])/. It will cause a syntax error in
+// browsers that do not support look-behind expressions
+// because all browsers parse the entire script, including
+// sections of the code that are never executed.
+var camelCaseExpression = new RegExp("(?<=[A-Z])");
+var splitUpString = function(str) {
+return (""+str).split(camelCaseExpression);
+};
 } else {
-    /*This fallback code is much less performant, but works*/
-    var splitUpString = function(str){
-        return str.replace(/[A-Z]/g,"z$1").split(/z(?=[A-Z])/g);
-    };
+/_This fallback code is much less performant, but works_/
+var splitUpString = function(str){
+return str.replace(/[A-Z]/g,"z$1").split(/z(?=[A-Z])/g);
+};
 }
 console.log(splitUpString("fooBare")); // ["fooB", "are"]
-console.log(splitUpString("jQWhy")); // ["jQ", "W", "hy"]
- -

上記のコードでは、いくつかの間違った仮定をするでしょう。

- -
    -
  • 部分文字列 "Chrome" を含むすべてのユーザーエージェント文字列が Chrome であると仮定するでしょう。 UA 文字列は誤解を招くことで有名です。
  • -
  • ブラウザーが Chrome であれば、ルックバインド機能は常に利用可能であると仮定しています。エージェントは対応が追加される前の古いバージョンの Chrome かもしれないし、 (当時は実験的な機能だったので) それが削除された後のバージョンの Chrome かもしれません。
  • -
  • 最も重要なのは、他のブラウザーがこの機能に対応していないことを前提としていることです。他のブラウザーではいつの間にか対応が追加されていたかもしれませんが、このコードでは劣った道を選択し続けることになります。
  • -
- -

このような問題は、機能自体の対応をテストすることで回避することができます。

- -
var isLookBehindSupported = false;
+console.log(splitUpString("jQWhy")); // ["jQ", "W", "hy"]

上記のコードでは、いくつかの間違った仮定をするでしょう。

  • 部分文字列 "Chrome" を含むすべてのユーザーエージェント文字列が Chrome であると仮定するでしょう。 UA 文字列は誤解を招くことで有名です。
  • ブラウザーが Chrome であれば、ルックバインド機能は常に利用可能であると仮定しています。エージェントは対応が追加される前の古いバージョンの Chrome かもしれないし、 (当時は実験的な機能だったので) それが削除された後のバージョンの Chrome かもしれません。
  • 最も重要なのは、他のブラウザーがこの機能に対応していないことを前提としていることです。他のブラウザーではいつの間にか対応が追加されていたかもしれませんが、このコードでは劣った道を選択し続けることになります。

このような問題は、機能自体の対応をテストすることで回避することができます。

var isLookBehindSupported = false;
 
 try {
-    new RegExp("(?<=)");
-    isLookBehindSupported = true;
+new RegExp("(?<=)");
+isLookBehindSupported = true;
 } catch (err) {
-    // If the agent doesn't support lookbehinds, the attempted
-    // creation of a RegExp object using that syntax throws and
-    // isLookBehindSupported remains false.
+// If the agent doesn't support lookbehinds, the attempted
+// creation of a RegExp object using that syntax throws and
+// isLookBehindSupported remains false.
 }
 
 var splitUpString = isLookBehindSupported ? function(str) {
-    return (""+str).split(new RegExp("(?<=[A-Z])"));
+return (""+str).split(new RegExp("(?<=[A-Z])"));
 } : function(str) {
-    return str.replace(/[A-Z]/g,"z$1").split(/z(?=[A-Z])/g);
+return str.replace(/[A-Z]/g,"z$1").split(/z(?=[A-Z])/g);
 };
-
- -

上記のコードが示すように、ブラウザーの互換性をユーザーエージェントの判定なしに行う方法は常にあります。このためにユーザーの文字列をチェックする理由は決してありません

- -

最後に、上記のコードスニペットは、常に考慮しなければならないクロスブラウザーのコーディングで重大な問題を引き起こします。サポート対象外のブラウザーでテストしている API を意図せず使用しないでください。これは明らかでシンプルに聞こえるかもしれませんが、そうでない時もあります。たとえば、上記のコードスニペットでは、短い regexp 表記 (たとえば /reg/igm) で lookbehind を使用すると、サポートされていないブラウザーで parser エラーが発生します。したがって、あなたのコードの lookbehind がサポートされているセクションであっても、上記の例では new RegExp("(?<=look_behind_stuff)");/(?<=look_behind_stuff)/ の代わりに使用します。

-
-
プログレッシブエンハンスメント
-
この設計手法は、ウェブサイトを「階層」で開発し、ボトムアップのアプローチを使用して、より簡単な階層から始め、階層が上がるに従ってより多くの機能を使用して、サイトの機能を向上させる方法です。
-
グレイスフルデグラデーション
-
これはトップダウンのアプローチで、必要なすべての機能を使用して最適なサイトを構築し、それを古いブラウザーでも使用できるように調整する方法です。これは、プログレッシブエンハンスメントよりも難しく、有効性が低くなりますが、場合によっては有用であることがあります。
-
モバイル端末の検出
-
おそらく、ユーザーエージェントの判定で最も一般的かつ誤った使用法は、その端末がモバイル端末であるかどうかを検出することです。しかし、それが後で本当にどうなるかは見過ごされがちです。開発者はユーザーエージェントの判定を使用して、ユーザーの端末がタッチ操作であることや小さい画面であることを判別し、それに応じてウェブサイトを最適化することがあります。ユーザーエージェントの判定でこれらを検出できることもありますが、すべての端末が同じではありません。モバイル端末が大きなサイズの画面を持っている場合もあるし、デスクトップが小さなタッチ画面を持っている場合もあるし、まったく異なる球技であるスマートテレビで見ている場合もあるし、タブレットの向きを回転させて画面の幅や高さを動的に変化させている人もいます。よって、ユーザーエージェントの検出は決定的な方法ではありません。幸い、はるかに良い代替方法があります。ユーザーの端末にタッチ画面があるかどうかを検出するには、 Navigator.maxTouchPoints を使用しましょう。そして、 if (!("maxTouchPoints" in navigator)) { /*Code here*/} の場合のみ、ユーザーエージェントの画面をチェックする既定に戻します。この情報を使用して端末にタッチ画面があるかどうかを確認することができますが、タッチ端末であるだけのためにウェブサイトのレイアウト全体を変更しないようにしてください。これは自分の作業とメンテナンスの量を増やすだけです。それよりも、タッチに適したより大きい、よりクリックしやすいボタンを追加しましょう (CSS を使用してフォントを拡大することができます)。モバイル端末で #exampleButton のパディングを 1em に拡張するコードの例を示します。
-
-
var hasTouchScreen = false;
+
+

上記のコードが示すように、ブラウザーの互換性をユーザーエージェントの判定なしに行う方法は常にあります。このためにユーザーの文字列をチェックする理由は決してありません

最後に、上記のコードスニペットは、常に考慮しなければならないクロスブラウザーのコーディングで重大な問題を引き起こします。サポート対象外のブラウザーでテストしている API を意図せず使用しないでください。これは明らかでシンプルに聞こえるかもしれませんが、そうでない時もあります。たとえば、上記のコードスニペットでは、短い regexp 表記 (たとえば /reg/igm) で lookbehind を使用すると、サポートされていないブラウザーで parser エラーが発生します。したがって、あなたのコードの lookbehind がサポートされているセクションであっても、上記の例では new RegExp("(?<=look_behind_stuff)");/(?<=look_behind_stuff)/ の代わりに使用します。

プログレッシブエンハンスメント
この設計手法は、ウェブサイトを「階層」で開発し、ボトムアップのアプローチを使用して、より簡単な階層から始め、階層が上がるに従ってより多くの機能を使用して、サイトの機能を向上させる方法です。
グレイスフルデグラデーション
これはトップダウンのアプローチで、必要なすべての機能を使用して最適なサイトを構築し、それを古いブラウザーでも使用できるように調整する方法です。これは、プログレッシブエンハンスメントよりも難しく、有効性が低くなりますが、場合によっては有用であることがあります。
モバイル端末の検出
おそらく、ユーザーエージェントの判定で最も一般的かつ誤った使用法は、その端末がモバイル端末であるかどうかを検出することです。しかし、それが後で本当にどうなるかは見過ごされがちです。開発者はユーザーエージェントの判定を使用して、ユーザーの端末がタッチ操作であることや小さい画面であることを判別し、それに応じてウェブサイトを最適化することがあります。ユーザーエージェントの判定でこれらを検出できることもありますが、すべての端末が同じではありません。モバイル端末が大きなサイズの画面を持っている場合もあるし、デスクトップが小さなタッチ画面を持っている場合もあるし、まったく異なる球技であるスマートテレビで見ている場合もあるし、タブレットの向きを回転させて画面の幅や高さを動的に変化させている人もいます。よって、ユーザーエージェントの検出は決定的な方法ではありません。幸い、はるかに良い代替方法があります。ユーザーの端末にタッチ画面があるかどうかを検出するには、 Navigator.maxTouchPoints を使用しましょう。そして、 if (!("maxTouchPoints" in navigator)) { /*Code here*/} の場合のみ、ユーザーエージェントの画面をチェックする既定に戻します。この情報を使用して端末にタッチ画面があるかどうかを確認することができますが、タッチ端末であるだけのためにウェブサイトのレイアウト全体を変更しないようにしてください。これは自分の作業とメンテナンスの量を増やすだけです。それよりも、タッチに適したより大きい、よりクリックしやすいボタンを追加しましょう (CSS を使用してフォントを拡大することができます)。モバイル端末で #exampleButton のパディングを 1em に拡張するコードの例を示します。
var hasTouchScreen = false;
 if ("maxTouchPoints" in navigator) {
-    hasTouchScreen = navigator.maxTouchPoints > 0;
+    hasTouchScreen = navigator.maxTouchPoints > 0;
 } else if ("msMaxTouchPoints" in navigator) {
-    hasTouchScreen = navigator.msMaxTouchPoints > 0;
+    hasTouchScreen = navigator.msMaxTouchPoints > 0;
 } else {
-    var mQ = window.matchMedia && matchMedia("(pointer:coarse)");
-    if (mQ && mQ.media === "(pointer:coarse)") {
+    var mQ = window.matchMedia && matchMedia("(pointer:coarse)");
+    if (mQ && mQ.media === "(pointer:coarse)") {
         hasTouchScreen = !!mQ.matches;
     } else if ('orientation' in window) {
         hasTouchScreen = true; // deprecated, but good fallback
@@ -119,23 +87,19 @@ if ("maxTouchPoints" in navigator) {
     }
 }
 if (hasTouchScreen)
-    document.getElementById("exampleButton").style.padding="1em";
-
-
画面のサイズについては、 window.innerWidth と window.addEventListener("resize", function(){ /*refresh screen size dependent things*/ }) を使用してください。画面サイズの対策としてやりたいことは、小さな画面の時に情報を削らないことです。デスクトップバージョンを使用するようになるので、人々を悩ますだけです。むしろ、小さい画面で長いページでは情報の列数を少なくし、画面サイズが大きいほど短いページで多くの列を持つようにしてください。この効果は、 CSS フレックスボックスを使用し、時には部分的な代替手段として浮動レイアウトを用いることで簡単に達成できます。
-
また、関連性や重要性の低い情報を下に移動させ、ページのコンテンツを有意義にまとめてみてください。トピック外ではありますが、以下の詳細な例を見れば、ユーザーエージェントのスニッフィングを避けるための洞察力やアイデアが得られるかもしれません。複数の情報のボックスで構成されたページを想像してみましょう。それぞれのボックスは様々な猫や犬の品種についてのものであるとします。各ボックスには、画像、概要、経緯があるとします。画像は、大画面でも適切な最大の大きさが維持されるとします。意味のあるグループ分けをするために、すべての猫のボックスとすべての犬のボックスを分離し、猫と犬の箱が混在しないようにしています。大きな画面では、段組みをして画像の左右の無駄な空間を縮小することで、空間を節約します。このボックスは2つの等価な方法により、段組みに分割することができます。ここで、犬のボックスはすべてソースコードの上の方にあり、猫のボックスはすべてソースコードの下の方にあり、これらの箱の親要素はすべて共通であると仮定します。もちろん、猫ボックスのすぐ上に犬ボックスの単一のインスタンスがあります。最初の方法では、水平方向のフレックスボックスを使用してコンテンツをグループ化し、ページがエンドユーザーに表示されたときに、すべての犬のボックスをページの上部に配置し、すべての猫のボックスをページの下部に配置するようにします。2つ目の方法は段組みレイアウトを使用し、すべての犬を左に、すべての猫を右に配置します。この特定のシナリオでのみ、フレックスボックス/段組みのフォールバックを提供しないことが適切であり、その結果、古いブラウザー上では非常に幅の広いボックスの単一の列になります。また、以下のことも考慮してください。より多くの人がウェブページに猫を見に来るのであれば、ソースコード上で犬よりも猫をすべて先に書くと、コンテンツが一段になるような小さな画面でも、より多くの人が探しているものをより早く見つけることができるようになるので、良い考えかもしれません。
-
次に、コードを常に動的にしましょう。ユーザーは携帯端末の向きを回転させて、ページの幅と高さを変更することがあります。または、将来は広げると画面が拡張できるような、折り畳み式電話のような奇妙な端末が現れるかもしれません。折り畳み式電話のような端末をどのように扱うかということに頭を悩ませないでください。開発者ツールのサイドパネルを開いて画面のサイズを変更してみて、ウェブページが滑らかに、流動的に、動的にサイズ変更されるようになるまで満足しないようにしてください。これを行う最も単純な方法は、画面の大きさに基づいてコンテンツを移動させるすべてのコードを、ページが読み込まれたときと、その後の resize イベントのたびに呼び出される単一の関数に分離することです。もし、このレイアウト関数がページの新しいレイアウトを決定する前に多くの計算がある場合は、イベントリスナーが呼び出されないようにイベントリスナーをデバウンスすることを検討してください。また、メディアクエリの (max-width: 25em), not all and (min-width: 25em), (max-width: 24.99em) の間には大きな違いがあることにも注意してください。 (max-width: 25em)(max-width: 25em) を除外し、 not all and (min-width: 25em)(max-width: 25em) を含みます。 (max-width: 24.99em) は、 not all and (min-width: 25em) の哀れな人のバージョンです。 (max-width: 24.99em) を使用しないでください。適切なメディアクエリを選択し、対応する JavaScript の中で適切な >=, <=, >, < を選択すると、これらが混ざってしまいやすく、結果として、レイアウトが変更された画面サイズでウェブサイトを見てしまうことになるからです。そのため、レイアウト変更が適切に行われているかどうかを確認するために、レイアウト変更が行われている正確な幅/高さでウェブサイトを徹底的にテストしてください。
-
+ document.getElementById("exampleButton").style.padding="1em";
画面のサイズについては、 window.innerWidth と window.addEventListener("resize", function(){ /*refresh screen size dependent things*/ }) を使用してください。画面サイズの対策としてやりたいことは、小さな画面の時に情報を削らないことです。デスクトップバージョンを使用するようになるので、人々を悩ますだけです。むしろ、小さい画面で長いページでは情報の列数を少なくし、画面サイズが大きいほど短いページで多くの列を持つようにしてください。この効果は、 CSS フレックスボックスを使用し、時には部分的な代替手段として浮動レイアウトを用いることで簡単に達成できます。
また、関連性や重要性の低い情報を下に移動させ、ページのコンテンツを有意義にまとめてみてください。トピック外ではありますが、以下の詳細な例を見れば、ユーザーエージェントのスニッフィングを避けるための洞察力やアイデアが得られるかもしれません。複数の情報のボックスで構成されたページを想像してみましょう。それぞれのボックスは様々な猫や犬の品種についてのものであるとします。各ボックスには、画像、概要、経緯があるとします。画像は、大画面でも適切な最大の大きさが維持されるとします。意味のあるグループ分けをするために、すべての猫のボックスとすべての犬のボックスを分離し、猫と犬の箱が混在しないようにしています。大きな画面では、段組みをして画像の左右の無駄な空間を縮小することで、空間を節約します。このボックスは2つの等価な方法により、段組みに分割することができます。ここで、犬のボックスはすべてソースコードの上の方にあり、猫のボックスはすべてソースコードの下の方にあり、これらの箱の親要素はすべて共通であると仮定します。もちろん、猫ボックスのすぐ上に犬ボックスの単一のインスタンスがあります。最初の方法では、水平方向のフレックスボックスを使用してコンテンツをグループ化し、ページがエンドユーザーに表示されたときに、すべての犬のボックスをページの上部に配置し、すべての猫のボックスをページの下部に配置するようにします。2つ目の方法は段組みレイアウトを使用し、すべての犬を左に、すべての猫を右に配置します。この特定のシナリオでのみ、フレックスボックス/段組みのフォールバックを提供しないことが適切であり、その結果、古いブラウザー上では非常に幅の広いボックスの単一の列になります。また、以下のことも考慮してください。より多くの人がウェブページに猫を見に来るのであれば、ソースコード上で犬よりも猫をすべて先に書くと、コンテンツが一段になるような小さな画面でも、より多くの人が探しているものをより早く見つけることができるようになるので、良い考えかもしれません。
次に、コードを常に動的にしましょう。ユーザーは携帯端末の向きを回転させて、ページの幅と高さを変更することがあります。または、将来は広げると画面が拡張できるような、折り畳み式電話のような奇妙な端末が現れるかもしれません。折り畳み式電話のような端末をどのように扱うかということに頭を悩ませないでください。開発者ツールのサイドパネルを開いて画面のサイズを変更してみて、ウェブページが滑らかに、流動的に、動的にサイズ変更されるようになるまで満足しないようにしてください。これを行う最も単純な方法は、画面の大きさに基づいてコンテンツを移動させるすべてのコードを、ページが読み込まれたときと、その後の resize イベントのたびに呼び出される単一の関数に分離することです。もし、このレイアウト関数がページの新しいレイアウトを決定する前に多くの計算がある場合は、イベントリスナーが呼び出されないようにイベントリスナーをデバウンスすることを検討してください。また、メディアクエリの (max-width: 25em), not all and (min-width: 25em), (max-width: 24.99em) の間には大きな違いがあることにも注意してください。 (max-width: 25em)(max-width: 25em) を除外し、 not all and (min-width: 25em)(max-width: 25em) を含みます。 (max-width: 24.99em) は、 not all and (min-width: 25em) の哀れな人のバージョンです。 (max-width: 24.99em) を使用しないでください。適切なメディアクエリを選択し、対応する JavaScript の中で適切な >=, <=, >, < を選択すると、これらが混ざってしまいやすく、結果として、レイアウトが変更された画面サイズでウェブサイトを見てしまうことになるからです。そのため、レイアウト変更が適切に行われているかどうかを確認するために、レイアウト変更が行われている正確な幅/高さでウェブサイトを徹底的にテストしてください。
-

最適なユーザーエージェントの判定

+## 最適なユーザーエージェントの判定 -

ユーザーエージェントの判定のよりよい代替案をすべて検討したうえで、ユーザーエージェントの判定が適切で正当化される可能性のある場合がまだいくつかあります。

+ユーザーエージェントの判定のよりよい代替案をすべて検討したうえで、ユーザーエージェントの判定が適切で正当化される可能性のある場合がまだいくつかあります。 -

そのような場合のひとつに、端末にタッチパネルがあるかどうかを検出する際に、ユーザーエージェントの判定をフォールバックとして使用するというものがあります。詳細は モバイル端末の検出の節を参照してください。

+そのような場合のひとつに、端末にタッチパネルがあるかどうかを検出する際に、ユーザーエージェントの判定をフォールバックとして使用するというものがあります。詳細は [モバイル端末の検出](#mobile_device_detection)の節を参照してください。 -

もう一つの例として、自動更新されないブラウザーのバグを修正する場合があります。 Internet Explorer (Windows) と Webkit (iOS) がその好例です。バージョン 9 以前のInternet Explorer は、レンダリングのバグ、 CSS のバグ、 API のバグなど、信じられないほどの問題を抱えていました。しかし、バージョン 9 以前の Internet Explorer は特別な小さな wasp 例外だったため、利用可能なブラウザー固有の機能に基づいてブラウザーを検出するのは非常に簡単でした。 Webkit は、 Apple が iOS 上のすべてのブラウザーに内部的に Webkit を使用するように強制しているため、ユーザーは古い端末上でより良い、より更新されたブラウザーを取得する方法がありません。ほとんどのバグは検出できますが、バグによっては他よりも検出に手間がかかる場合があります。そのような場合は、ユーザーエージェント検出を使用してパフォーマンスを節約するのが有効です。たとえば、 Webkit 6 にはデバイスの向きが変わると、ブラウザーが {{domxref("MediaQueryList")}} リスナーを実行しない場合があるというバグがあります。このバグを回避するには、以下のコードを参照してください。

+もう一つの例として、自動更新されないブラウザーのバグを修正する場合があります。 Internet Explorer (Windows) と Webkit (iOS) がその好例です。バージョン 9 以前の Internet Explorer は、レンダリングのバグ、 CSS のバグ、 API のバグなど、信じられないほどの問題を抱えていました。しかし、バージョン 9 以前の Internet Explorer は特別な小さな ~~wasp~~ 例外だったため、利用可能なブラウザー固有の機能に基づいてブラウザーを検出するのは非常に簡単でした。 Webkit は、 Apple が iOS 上のすべてのブラウザーに内部的に Webkit を使用するように強制しているため、ユーザーは古い端末上でより良い、より更新されたブラウザーを取得する方法がありません。ほとんどのバグは検出できますが、バグによっては他よりも検出に手間がかかる場合があります。そのような場合は、ユーザーエージェント検出を使用してパフォーマンスを節約するのが有効です。たとえば、 Webkit 6 にはデバイスの向きが変わると、ブラウザーが {{domxref("MediaQueryList")}} リスナーを実行しない場合があるというバグがあります。このバグを回避するには、以下のコードを参照してください。 -
var UA=navigator.userAgent, isWebkit=/\b(iPad|iPhone|iPod)\b/.test(UA) &&
-               /WebKit/.test(UA) && !/Edge/.test(UA) && !window.MSStream;
+```js
+var UA=navigator.userAgent, isWebkit=/\b(iPad|iPhone|iPod)\b/.test(UA) &&
+               /WebKit/.test(UA) && !/Edge/.test(UA) && !window.MSStream;
 
 var mediaQueryUpdated = true, mqL = [];
 function whenMediaChanges(){mediaQueryUpdated = true}
@@ -145,7 +109,7 @@ var listenToMediaQuery = isWebkit ? function(mQ, f) {
     mQ.addListener(f), mQ.addListener(whenMediaChanges);
 } : function(){};
 var destroyMediaQuery = isWebkit ? function(mQ) {
-    for (var i=0,len=mqL.length|0; i<len; i=i+1|0)
+    for (var i=0,len=mqL.length|0; i
-
-

探している情報がユーザーエージェント文字列のどの部分に含まれているか

- -

ユーザーエージェント文字列のそれぞれの部分には統一性がないので、これは難しい部分です。

- -

ブラウザー名

- -

開発者が「ブラウザーを判定したい」という場合、実際は「レンダリングエンジンを判定したい」場合であることがしばしばあります。実際に SeaMonkey と Firefox を、または Chromium と Chrome を区別したいのでしょうか。それとも、実際にはブラウザーがレンダリングエンジンに Gecko を使用しているか、 WebKit を使用しているかを確認したいのしょうか。これが必要なのであれば、ページのもっと下を見てください。

- -

ほとんどのブラウザーは、 Internet Explorer の例外を除いて、名前とバージョンを BrowserName/VersionNumber の形式で設定します。しかし、ユーザーエージェント文字列はこのような形式の名前だけから成っている訳ではないので、ブラウザーの名前が分かるわけではなく、探している名前があるかどうかを確認することしかできません。しかし、ブラウザーによってはうそをつくこともあります。例えば Chrome は、 Chrome と Safari の両方の文字列を含みます。ですから Safari を判定するには、 Safari の文字列があって Chrome の文字列がないことを確認する必要がありますし、 Chromium は自分自身を Chrome と報告することがよくあり、 Seamonkey は自分自身を Firefox として報告することが時々あります。

- -

また、 BrowserName に単純な正規表現を使用しないように注意してください。ユーザーエージェント文字列には、 Keyword/Value 構文以外の文字列も含まれています。例えば、 Safari や Chrome では、 'like Gecko' のような文字列が含まれています。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
必ず含む決して含まない
FirefoxFirefox/xyzSeamonkey/xyz
SeamonkeySeamonkey/xyz
ChromeChrome/xyzChromium/xyz
ChromiumChromium/xyz
SafariSafari/xyzChrome/xyz または Chromium/xyzSafari はバージョン番号を2つ提供しており、一方は技術的な Safari/xyz のトークン、もう一方はユーザーに分かりやすい Version/xyz のトークンです
Opera -

OPR/xyz [1]

- -

Opera/xyz

-
-

[1] Opera 15+ (Blink ベースのエンジン)

- -

[2] Opera 12- (Presto ベースのエンジン)

-
Internet Explorer -

; MSIE xyz; [1]

- -

Trident/7.0; .*rv:xyz [2]

-
-

[1] Internet Explorer 10-

- -

[2] Internet Explorer 11

-
- -

もちろん、他のブラウザーがこれらの一部をハイジャックしないという絶対的な保証はありません (過去に Chrome が Safari の文字列をハイジャックしたように)。そのため、ユーザーエージェント文字列を使用したブラウザーの判定は信頼性が低いので、バージョン番号をチェックするのみにしてください (過去のバージョンをハイジャックすることはあまりありません)。

- -

ブラウザーのバージョン

- -

ブラウザーのバージョンは、例外はあるものの、多くがユーザーエージェント文字列の BrowserName/VersionNumber トークンの値の部分に入れられます。もちろんこれは Internet Explorer の場合は当てはまらず (MSIE トークンの直後にバージョン番号を入れる)、 Opera のバージョン10以降では、 Version/VersionNumber トークンが追加されています。

- -

ここで再度、探しているブラウザーの正しいトークンを取得していることを確認してください。他には妥当な番号が含まれているという保証はありません。

- -

レンダリングエンジン

- -

前述のように、多くの場合はレンダリングエンジンを探した方が良い方法になります。これは、あまり知られていないブラウザーを除外しないためにも役立つでしょう。共通のレンダリングエンジンを持つブラウザーはページを同じ方法で表示します。一方で動作するものはもう一方でも動作するということを想定することができます。

- -

主なレンダリングエンジンには、 Trident, Gecko, Presto, Blink, WebKit の5つがあります。レンダリングエンジンの名前を探すのが一般的であるため、たくさんのレンダリングエンジンが他のレンダリングエンジンの名前も追加して検出されるようにしています。したがって、レンダリングエンジンを判定する際には誤判定をしないように注意を払うことが重要です。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
必ず含む
GeckoGecko/xyz
WebKitAppleWebKit/xyz注意: WebKit ブラウザーは 'like Gecko' の文字列を追加するので、判定時に注意しないと Gecko と誤認することがあります。
PrestoOpera/xyz注: Presto は Opera ブラウザーのバージョン 15 以降では使用されない ('Blink' を参照)
TridentTrident/xyzInternet Explorer はこのトークンをユーザーエージェント文字列のコメント部分に入れる
EdgeHTMLEdge/xyzChromium ではない Edge は、 Edge/ のトークンの後にアプリケーションのバージョンではなく、エンジンのバージョンを入れる。
- 注: EdgeHTML は Edge ブラウザーのバージョン 79 以降では使用されない ('Blink' を参照)。
BlinkChrome/xyz
- -

レンダリングエンジンのバージョン

- -

ほとんどのレンダリングエンジンは、 Gecko を除いて RenderingEngine/VersionNumber のトークンにバージョン番号を入れています。 Gecko はユーザーエージェント文字列のコメント部分の中で、 rv: 文字列の後にバージョン番号を入れます。モバイル版の Gecko 14 とデスクトップ版の Gecko 17 から、この値を Gecko/version のトークン (以前のバージョンではビルド日付、その後は GeckoTrail と呼ばれる固定日付) に置きます。

- -

OS

- -

オペレーティングシステムは、多くのユーザーエージェント文字列で提供されますが (ただし Firefox OS のようなウェブ用のプラットフォームでは提供されません)、書式は大幅に異なります。これはユーザーエージェント文字列のコメント部分にある2つのセミコロン間の固定文字列です。これらの文字列はブラウザーに依存します。これは OS を示しますが、しばしばバージョンや依存するハードウェア (32/64ビットや、 Mac の場合の Intel / PPC) も示します。

- -

すべての場合と同様に、これらの文字列は将来変更される可能性があり、既にリリースされているブラウザーの判定と組み合わせて使用する必要があります。新しいバージョンのブラウザーが出現したときは、スクリプトを適合させるための技術調査が必要です。

- -

モバイルか、タブレットか、デスクトップか

- -

ユーザーエージェントの判別を行う最も一般的な理由は、ブラウザーが実行されている端末の種類を判別することです。目的は、それぞれの種類の端末に別々な HTML を提供することです。

- -
    -
  • ブラウザーやレンダリングエンジンは、1種類の端末でしか動作しないと想定しないでください。ブラウザーやレンダリングエンジンごとに、異なる既定値を設定しないでください。
  • -
  • ブラウザーがモバイル、タブレット、デスクトップのいずれであるかを定義するために、 OS トークンを使用しないでください。 OS は複数の種類の端末 (Android はタブレットや携帯電話など) で動作します。
  • -
- -

次の表は主要なブラウザーのベンダーが、ブラウザーがモバイル端末上で動作していることを示す方法をまとめたものです。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
各ブラウザーのユーザーエージェント文字列
ブラウザールール
Mozilla (Gecko, Firefox)Mobile または Tablet のトークンがコメントの中にある。Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0
WebKit ベースのもの (Android, Safari)Mobile Safari のトークンがコメントの外にある。Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Blink ベースのもの (Chromium, Google Chrome, Opera 15 以降)Mobile Safari のトークンがコメントの外にある。Mozilla/5.0 (Linux; Android 4.4.2); Nexus 5 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Mobile Safari/537.36 OPR/20.0.1396.72047
Presto ベースのもの (Opera 12 まで) -

Opera Mobi/xyz のトークンがコメントの中にある。 (Opera 12 まで)

-
-

Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50

-
Internet ExplorerIEMobile/xyz のトークンがコメントの中にある。Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)
Edge on Windows 10 MobileMobile/xyz & Edge/ tokens outside the comment.Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36 Edge/16.16299
- -

要するに、モバイル端末を検出するには、ユーザーエージェント文字列のどこかに文字列 “Mobi” があるかどうかを探すことをお勧めします。

- -
-

端末が大きくて “Mobi” と表示されていない場合は、デスクトップサイトを提供してください (ベストプラクティスとして、デスクトップ機にタッチ画面が採用されつつあるので、どちらにしてもタッチ入力に対応するようにしてください)。

-
+},0)); +``` + +## 探している情報がユーザーエージェント文字列のどの部分に含まれているか + +ユーザーエージェント文字列のそれぞれの部分には統一性がないので、これは難しい部分です。 + +### ブラウザー名 + +開発者が「ブラウザーを判定したい」という場合、実際は「レンダリングエンジンを判定したい」場合であることがしばしばあります。実際に SeaMonkey と Firefox を、または Chromium と Chrome を区別したいのでしょうか。それとも、実際にはブラウザーがレンダリングエンジンに Gecko を使用しているか、 WebKit を使用しているかを確認したいのしょうか。これが必要なのであれば、ページのもっと下を見てください。 + +ほとんどのブラウザーは、 Internet Explorer の例外を除いて、名前とバージョンを _BrowserName/VersionNumber_ の形式で設定します。しかし、ユーザーエージェント文字列はこのような形式の名前だけから成っている訳ではないので、ブラウザーの名前が分かるわけではなく、探している名前があるかどうかを確認することしかできません。しかし、ブラウザーによってはうそをつくこともあります。例えば Chrome は、 Chrome と Safari の両方の文字列を含みます。ですから Safari を判定するには、 Safari の文字列があって Chrome の文字列がないことを確認する必要がありますし、 Chromium は自分自身を Chrome と報告することがよくあり、 Seamonkey は自分自身を Firefox として報告することが時々あります。 + +また、 BrowserName に単純な正規表現を使用しないように注意してください。ユーザーエージェント文字列には、 Keyword/Value 構文以外の文字列も含まれています。例えば、 Safari や Chrome では、 'like Gecko' のような文字列が含まれています。 + +| | 必ず含む | 決して含まない | | +| ----------------- | ------------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | +| Firefox | Firefox/xyz | Seamonkey/xyz | | +| Seamonkey | Seamonkey/xyz | | | +| Chrome | Chrome/xyz | Chromium/xyz | | +| Chromium | Chromium/xyz | | | +| Safari | Safari/xyz | Chrome/xyz または Chromium/xyz | Safari はバージョン番号を 2 つ提供しており、一方は技術的な Safari/xyz のトークン、もう一方はユーザーに分かりやすい Version/xyz のトークンです | +| Opera | OPR/xyz \[1]Opera/xyz | | \[1] Opera 15+ (Blink ベースのエンジン)\[2] Opera 12- (Presto ベースのエンジン) | +| Internet Explorer | ; MSIE xyz; \[1]Trident/7.0; .\*rv:xyz \[2] | | \[1] Internet Explorer 10-\[2] Internet Explorer 11 | + +もちろん、他のブラウザーがこれらの一部をハイジャックしないという絶対的な保証はありません (過去に Chrome が Safari の文字列をハイジャックしたように)。そのため、ユーザーエージェント文字列を使用したブラウザーの判定は信頼性が低いので、バージョン番号をチェックするのみにしてください (過去のバージョンをハイジャックすることはあまりありません)。 + +### ブラウザーのバージョン + +ブラウザーのバージョンは、例外はあるものの、多くがユーザーエージェント文字列の _BrowserName/VersionNumber_ トークンの値の部分に入れられます。もちろんこれは Internet Explorer の場合は当てはまらず (MSIE トークンの直後にバージョン番号を入れる)、 Opera のバージョン 10 以降では、 Version/_VersionNumber_ トークンが追加されています。 + +ここで再度、探しているブラウザーの正しいトークンを取得していることを確認してください。他には妥当な番号が含まれているという保証はありません。 + +### レンダリングエンジン + +前述のように、多くの場合はレンダリングエンジンを探した方が良い方法になります。これは、あまり知られていないブラウザーを除外しないためにも役立つでしょう。共通のレンダリングエンジンを持つブラウザーはページを同じ方法で表示します。一方で動作するものはもう一方でも動作するということを想定することができます。 + +主なレンダリングエンジンには、 Trident, Gecko, Presto, Blink, WebKit の 5 つがあります。レンダリングエンジンの名前を探すのが一般的であるため、たくさんのレンダリングエンジンが他のレンダリングエンジンの名前も追加して検出されるようにしています。したがって、レンダリングエンジンを判定する際には誤判定をしないように注意を払うことが重要です。 + +| | 必ず含む | | +| -------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Gecko | Gecko/xyz | | +| WebKit | AppleWebKit/xyz | 注意: WebKit ブラウザーは 'like Gecko' の文字列を追加するので、判定時に注意しないと Gecko と誤認することがあります。 | +| Presto | Opera/xyz | **注:** Presto は Opera ブラウザーのバージョン 15 以降では使用されない ('Blink' を参照) | +| Trident | Trident/xyz | Internet Explorer はこのトークンをユーザーエージェント文字列の*コメント*部分に入れる | +| EdgeHTML | Edge/xyz | Chromium ではない Edge は、 _Edge/_ のトークンの後にアプリケーションのバージョンではなく、エンジンのバージョンを入れる。 **注:** EdgeHTML は Edge ブラウザーのバージョン 79 以降では使用されない ('Blink' を参照)。 | +| Blink | Chrome/xyz | | + +## レンダリングエンジンのバージョン + +ほとんどのレンダリングエンジンは、 Gecko を除いて _RenderingEngine/VersionNumber_ のトークンにバージョン番号を入れています。 Gecko はユーザーエージェント文字列のコメント部分の中で、 `rv:` 文字列の後にバージョン番号を入れます。モバイル版の Gecko 14 とデスクトップ版の Gecko 17 から、この値を `Gecko/version` のトークン (以前のバージョンではビルド日付、その後は GeckoTrail と呼ばれる固定日付) に置きます。 + +## OS + +オペレーティングシステムは、多くのユーザーエージェント文字列で提供されますが (ただし Firefox OS のようなウェブ用のプラットフォームでは提供されません)、書式は大幅に異なります。これはユーザーエージェント文字列のコメント部分にある 2 つのセミコロン間の固定文字列です。これらの文字列はブラウザーに依存します。これは OS を示しますが、しばしばバージョンや依存するハードウェア (32/64 ビットや、 Mac の場合の Intel / PPC) も示します。 + +すべての場合と同様に、これらの文字列は将来変更される可能性があり、既にリリースされているブラウザーの判定と組み合わせて使用する必要があります。新しいバージョンのブラウザーが出現したときは、スクリプトを適合させるための技術調査が必要です。 + +### モバイルか、タブレットか、デスクトップか + +ユーザーエージェントの判別を行う最も一般的な理由は、ブラウザーが実行されている端末の種類を判別することです。目的は、それぞれの種類の端末に別々な HTML を提供することです。 + +- ブラウザーやレンダリングエンジンは、1 種類の端末でしか動作しないと想定しないでください。ブラウザーやレンダリングエンジンごとに、異なる既定値を設定しないでください。 +- ブラウザーがモバイル、タブレット、デスクトップのいずれであるかを定義するために、 OS トークンを使用しないでください。 OS は複数の種類の端末 (Android はタブレットや携帯電話など) で動作します。 + +次の表は主要なブラウザーのベンダーが、ブラウザーがモバイル端末上で動作していることを示す方法をまとめたものです。 + +| ブラウザー | ルール | 例 | +| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mozilla (Gecko, Firefox) | [**Mobile** または **Tablet** のトークン](/ja/docs/Gecko_user_agent_string_reference)がコメントの中にある。 | Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0 | +| WebKit ベースのもの (Android, Safari) | [**Mobile Safari** のトークン](https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3)がコメントの外にある。 | Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 | +| Blink ベースのもの (Chromium, Google Chrome, Opera 15 以降) | [**Mobile Safari** のトークン](https://developers.google.com/chrome/mobile/docs/user-agent)がコメントの外にある。 | Mozilla/5.0 (Linux; Android 4.4.2); Nexus 5 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Mobile Safari/537.36 OPR/20.0.1396.72047 | +| Presto ベースのもの (Opera 12 まで) | [**Opera Mobi/xyz** のトークン](http://my.opera.com/community/openweb/idopera/)がコメントの中にある。 (Opera 12 まで) | Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50 | +| Internet Explorer | **IEMobile/xyz** のトークンがコメントの中にある。 | Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0) | +| Edge on Windows 10 Mobile | **Mobile/xyz** & **Edge/** tokens outside the comment. | Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36 Edge/16.16299 | + +要するに、モバイル端末を検出するには、ユーザーエージェント文字列のどこかに文字列 “Mobi” があるかどうかを探すことをお勧めします。 + +> **Note:** 端末が大きくて “Mobi” と表示されていない場合は、デスクトップサイトを提供してください (ベストプラクティスとして、デスクトップ機にタッチ画面が採用されつつあるので、どちらにしてもタッチ入力に対応するようにしてください)。 diff --git a/files/ja/web/http/caching/index.md b/files/ja/web/http/caching/index.md index c74b4ed30991d7..112760e36638ba 100644 --- a/files/ja/web/http/caching/index.md +++ b/files/ja/web/http/caching/index.md @@ -7,148 +7,155 @@ tags: - HTTP translation_of: Web/HTTP/Caching --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

過去に取得したリソースを再使用すると、ウェブサイトやアプリケーションのパフォーマンスが大きく向上するでしょう。ウェブキャッシュは遅延やネットワークのトラフィックを削減して、リソースを表示するために必要な時間も短縮します。HTTP キャッシュを使用すると、ウェブサイトの応答性が高まります。

+過去に取得したリソースを再使用すると、ウェブサイトやアプリケーションのパフォーマンスが大きく向上するでしょう。ウェブキャッシュは遅延やネットワークのトラフィックを削減して、リソースを表示するために必要な時間も短縮します。HTTP キャッシュを使用すると、ウェブサイトの応答性が高まります。 -

さまざまな種類のキャッシュ

+## さまざまな種類のキャッシュ -

キャッシュは、提供されたリソースの複製を保存して、要求されたときに背後でその複製を提供する技術です。ウェブキャッシュのストア内に要求されたリソースがあるとき、キャッシュはリクエストに介入して、提供元のサーバーから再びダウンロードする代わりにキャッシュ内の複製を返します。これにより、サーバーがすべてのクライアントに応対する必要がなくなり負荷が軽減する、キャッシュがクライアントに近いところにあるのでパフォーマンスが向上する、すなわちリソースを返すためにかかる時間を短くするといったことを実現できます。ウェブサイトについて、高いパフォーマンスを達成するための主要な構成要素です。一方、すべてのリソースを同じまま永久に保存しないよう、キャッシュを適切に設定しなければなりません。キャッシュはあまり長く保存せず、リソースが変更されるまでの間にすることが重要です。

+キャッシュは、提供されたリソースの複製を保存して、要求されたときに背後でその複製を提供する技術です。ウェブキャッシュのストア内に要求されたリソースがあるとき、キャッシュはリクエストに介入して、提供元のサーバーから再びダウンロードする代わりにキャッシュ内の複製を返します。これにより、サーバーがすべてのクライアントに応対する必要がなくなり負荷が軽減する、キャッシュがクライアントに近いところにあるのでパフォーマンスが向上する、すなわちリソースを返すためにかかる時間を短くするといったことを実現できます。ウェブサイトについて、高いパフォーマンスを達成するための主要な構成要素です。一方、すべてのリソースを同じまま永久に保存しないよう、キャッシュを適切に設定しなければなりません。キャッシュはあまり長く保存せず、リソースが変更されるまでの間にすることが重要です。 -

キャッシュにはさまざまな種類があり、これらはプライベートキャッシュと共有キャッシュの 2 つのカテゴリーに大きく分類できます。共有キャッシュは、複数のユーザーが再使用するためにレスポンスを保存するキャッシュです。プライベートキャッシュは、ひとりのユーザーのためのキャッシュです。このページでは主にブラウザーのキャッシュとプロキシのキャッシュを扱いますが、ウェブサイトやウェブアプリケーションの信頼性、パフォーマンス、規模を向上するためにウェブサーバーで展開されるゲートウェイのキャッシュ、CDN、リバースプロキシのキャッシュ、ロードバランサーも存在します。

+キャッシュにはさまざまな種類があり、これらはプライベートキャッシュと共有キャッシュの 2 つのカテゴリーに大きく分類できます。*共有キャッシュ*は、複数のユーザーが再使用するためにレスポンスを保存するキャッシュです。*プライベートキャッシュ*は、ひとりのユーザーのためのキャッシュです。このページでは主にブラウザーのキャッシュとプロキシのキャッシュを扱いますが、ウェブサイトやウェブアプリケーションの信頼性、パフォーマンス、規模を向上するためにウェブサーバーで展開されるゲートウェイのキャッシュ、CDN、リバースプロキシのキャッシュ、ロードバランサーも存在します。 -

What a cache provide, advantages/disadvantages of shared/private caches.

+![What a cache provide, advantages/disadvantages of shared/private caches.](/en-US/docs/Web/HTTP/Caching/http_cache_type.png) -

プライベートなブラウザーのキャッシュ

+### プライベートなブラウザーのキャッシュ -

プライベートキャッシュは、ひとりのユーザーのためのキャッシュです。ブラウザーの設定で "キャッシュ" を見たことがあるでしょう。ブラウザーのキャッシュは、ユーザーが HTTP でダウンロードしたすべての文書を保持します。このキャッシュは訪問済みの文書で、サーバーと追加のやり取りを行う必要なしに戻る/進む操作、ページの保存、ソースの表示などを可能にします。また同様に、キャッシュ済みコンテンツのオフライン表示が改善します。

+プライベートキャッシュは、ひとりのユーザーのためのキャッシュです。ブラウザーの設定で "キャッシュ" を見たことがあるでしょう。ブラウザーのキャッシュは、ユーザーが [HTTP](/ja/docs/Web/HTTP "HTTP") でダウンロードしたすべての文書を保持します。このキャッシュは訪問済みの文書で、サーバーと追加のやり取りを行う必要なしに戻る/進む操作、ページの保存、ソースの表示などを可能にします。また同様に、キャッシュ済みコンテンツのオフライン表示が改善します。 -

共有されるプロキシキャッシュ

+### 共有されるプロキシキャッシュ -

共有キャッシュは、複数のユーザーによって再使用されるレスポンスを保存するキャッシュです。例えば ISP や企業は、人気があるリソースを何度も再使用してネットワークのトラフィックや遅延を低減するために、ローカルネットワークの基盤の一部としてウェブプロキシを設置しているでしょう。

+共有キャッシュは、複数のユーザーによって再使用されるレスポンスを保存するキャッシュです。例えば ISP や企業は、人気があるリソースを何度も再使用してネットワークのトラフィックや遅延を低減するために、ローカルネットワークの基盤の一部としてウェブプロキシを設置しているでしょう。 -

キャッシュ処理の対象

+## キャッシュ処理の対象 -

HTTP キャッシュは必須ではありませんが、キャッシュしたリソースの再使用は通常望ましいことです。ただし一般的な HTTP キャッシュはたいてい、{{HTTPMethod("GET")}} のレスポンスのみキャッシュするよう制限されており、他のメソッドではキャッシュしません。主要なキャッシュのキーはリクエストメソッドと対象 URI で構成されます (GET リクエストだけをキャッシュの対象にするため、URI しか使用されないことがよくあります)。キャッシュ項目の一般的な形式は以下のとおりです。

+HTTP キャッシュは必須ではありませんが、キャッシュしたリソースの再使用は通常望ましいことです。ただし一般的な HTTP キャッシュはたいてい、{{HTTPMethod("GET")}} のレスポンスのみキャッシュするよう制限されており、他のメソッドではキャッシュしません。主要なキャッシュのキーはリクエストメソッドと対象 URI で構成されます (GET リクエストだけをキャッシュの対象にするため、URI しか使用されないことがよくあります)。キャッシュ項目の一般的な形式は以下のとおりです。 -
    -
  • 取得要求に成功した結果: {{HTTPMethod("GET")}} リクエストに対する {{HTTPStatus(200)}} (OK) レスポンスには、HTML 文書、画像、ファイルなどのリソースが含まれています。
  • -
  • 恒久的なリダイレクト: {{HTTPStatus(301)}} (Moved Permanently) レスポンス。
  • -
  • エラーレスポンス: {{HTTPStatus(404)}} (Not Found) のページ。
  • -
  • 不完全な結果: {{HTTPStatus(206)}} (Partial Content) レスポンス。
  • -
  • キャッシュのキーとして使用することが適切であると定義されていれば、{{HTTPMethod("GET")}} 以外のレスポンス。
  • -
+- 取得要求に成功した結果: {{HTTPMethod("GET")}} リクエストに対する {{HTTPStatus(200)}} (OK) レスポンスには、HTML 文書、画像、ファイルなどのリソースが含まれています。 +- 恒久的なリダイレクト: {{HTTPStatus(301)}} (Moved Permanently) レスポンス。 +- エラーレスポンス: {{HTTPStatus(404)}} (Not Found) のページ。 +- 不完全な結果: {{HTTPStatus(206)}} (Partial Content) レスポンス。 +- キャッシュのキーとして使用することが適切であると定義されていれば、{{HTTPMethod("GET")}} 以外のレスポンス。 -

リクエストがコンテンツネゴシエーションの対象である場合はキャッシュ項目が、第二のキーで区別される複数の保存済みレスポンスで構成されていることもあります。詳しくは、後述する {{HTTPHeader("Vary")}} ヘッダーの情報をご覧ください。

+リクエストがコンテンツネゴシエーションの対象である場合はキャッシュ項目が、第二のキーで区別される複数の保存済みレスポンスで構成されていることもあります。詳しくは、[後述](#Varying_responses)する {{HTTPHeader("Vary")}} ヘッダーの情報をご覧ください。 -

キャッシュを制御する

+## キャッシュを制御する -

Cache-Control ヘッダー

+### `Cache-Control` ヘッダー -

HTTP/1.1 の {{HTTPHeader("Cache-Control")}} 一般ヘッダーは、リクエストおよびレスポンスでキャッシュ機能に関するディレクティブを指定するために使用します。このヘッダーが提供するさまざまなディレクティブを使用して、キャッシュのポリシーを定義してください。

+HTTP/1.1 の {{HTTPHeader("Cache-Control")}} 一般ヘッダーは、リクエストおよびレスポンスでキャッシュ機能に関するディレクティブを指定するために使用します。このヘッダーが提供するさまざまなディレクティブを使用して、キャッシュのポリシーを定義してください。 -

キャッシュしない

+#### キャッシュしない -

クライアントのリクエストおよびサーバーのレスポンスについて、キャッシュに何も保存してはいけません。リクエストはサーバーに送信されて、リクエストごとに毎回完全なレスポンスをダウンロードします。

+クライアントのリクエストおよびサーバーのレスポンスについて、キャッシュに何も保存してはいけません。リクエストはサーバーに送信されて、リクエストごとに毎回完全なレスポンスをダウンロードします。 -
Cache-Control: no-store
-
+``` +Cache-Control: no-store +``` -

キャッシュするが再検証する

+#### キャッシュするが再検証する -

キャッシュした複製を渡す前に検証のため、キャッシュは生成元のサーバーにリクエストを送信します。

+キャッシュした複製を渡す前に検証のため、キャッシュは生成元のサーバーにリクエストを送信します。 -
Cache-Control: no-cache
+``` +Cache-Control: no-cache +``` -

private キャッシュと public キャッシュ

+#### private キャッシュと public キャッシュ -

"public" ディレクティブは、どのキャッシュでもレスポンスを保存してよいことを示します。これは、通常はキャッシュできない HTTP 認証やレスポンスステータスコードを伴うページをキャッシュしなければならない時に有用です。

+"public" ディレクティブは、どのキャッシュでもレスポンスを保存してよいことを示します。これは、通常はキャッシュできない HTTP 認証やレスポンスステータスコードを伴うページをキャッシュしなければならない時に有用です。 -

一方、"private" はレスポンスがひとりのユーザーのためのものであり、共有キャッシュに保存してはならないことを示します。ブラウザーのプライベートキャッシュは、この場合でもレスポンスを保存できます。

+一方、"private" はレスポンスがひとりのユーザーのためのものであり、共有キャッシュに保存してはならないことを示します。ブラウザーのプライベートキャッシュは、この場合でもレスポンスを保存できます。 -
Cache-Control: private
+```
+Cache-Control: private
 Cache-Control: public
-
+``` -

有効期限

+#### 有効期限 -

このヘッダーでもっとも重要なディレクティブが、リソースが陳腐化していないと考えられる最長期間を表す "max-age=<seconds>" です。{{HTTPHeader("Expires")}} とは対照的に、このディレクティブはリクエストの時刻と関係があります。変更しない予定のアプリケーションのファイルには、たいてい積極的なキャッシュを行います。これは例えば画像、CSS ファイル、JavaScript ファイルといった静的なファイルが含まれます。

+このヘッダーでもっとも重要なディレクティブが、リソースが陳腐化していないと考えられる最長期間を表す "`max-age=`" です。{{HTTPHeader("Expires")}} とは対照的に、このディレクティブはリクエストの時刻と関係があります。変更しない予定のアプリケーションのファイルには、たいてい積極的なキャッシュを行います。これは例えば画像、CSS ファイル、JavaScript ファイルといった静的なファイルが含まれます。 -

詳しくは、後述する 鮮度 のセクションもご覧ください。

+詳しくは、後述する [鮮度](#Freshness) のセクションもご覧ください。 -
Cache-Control: max-age=31536000
+``` +Cache-Control: max-age=31536000 +``` -

検証

+#### 検証 -

"must-revalidate" ディレクティブを使用すると、キャッシュはリソースを使用する前に陳腐化の状態を検証しなければならず、また期限切れのリソースを使用するべきではありません。詳しくは、キャッシュの検証 のセクションをご覧ください。

+"`must-revalidate`" ディレクティブを使用すると、キャッシュはリソースを使用する前に陳腐化の状態を検証しなければならず、また期限切れのリソースを使用するべきではありません。詳しくは、[キャッシュの検証](#Cache_validation) のセクションをご覧ください。 -
Cache-Control: must-revalidate
+``` +Cache-Control: must-revalidate +``` -

Pragma ヘッダー

+### `Pragma` ヘッダー -

{{HTTPHeader("Pragma")}} は HTTP/1.0 のヘッダーであり、HTTP レスポンスに特定されないため HTTP/1.1 の Cache-Control 一般ヘッダーを確実に置き換えるものではありません。しかし、リクエストで Cache-Control ヘッダーフィールドが省略された場合は Cache-Control: no-cache と同様に作用します。HTTP/1.0 クライアントとの後方互換用に限り、Pragma を使用してください。

+{{HTTPHeader("Pragma")}} は HTTP/1.0 のヘッダーであり、HTTP レスポンスに特定されないため HTTP/1.1 の `Cache-Control` 一般ヘッダーを確実に置き換えるものではありません。しかし、リクエストで `Cache-Control` ヘッダーフィールドが省略された場合は `Cache-Control: no-cache` と同様に作用します。HTTP/1.0 クライアントとの後方互換用に限り、`Pragma` を使用してください。 -

鮮度

+## 鮮度 -

リソースがキャッシュに保存されると、理論上は永久にキャッシュからリソースを提供することができます。キャッシュは有限の記憶領域ですので、アイテムは定期的に記憶領域から削除されます。この処理はキャッシュ・エビクションと呼ばれます。一方、サーバー上で変更されるリソースもあり、それはキャッシュを更新するべきです。HTTP はクライアントサーバープロトコルであり、リソースを変更したときにサーバーがキャッシュやクライアントに連絡することはできません。サーバーは、リソースの有効期限を伝えなければなりません。この有効期限に達するまではリソースが新鮮 (fresh) であり、また有効期限を過ぎるとリソースは陳腐化 (stale) します。エビクションアルゴリズムはたいてい、陳腐化したリソースよりも新鮮なリソースを優遇します。陳腐化したリソースは削除されたり無視されたりしないことに注意してください。陳腐化したリソースへのリクエストをキャッシュが受け取ると、実際はもう新鮮ではないかを確認するために {{HTTPHeader("If-None-Match")}} を付加してリクエストを転送します。新鮮な状態であれば、サーバーは要求されたリソースを送信せずに {{HTTPStatus("304")}} (Not Modified) ヘッダーを返して、帯域を節約します。

+リソースがキャッシュに保存されると、理論上は永久にキャッシュからリソースを提供することができます。キャッシュは有限の記憶領域ですので、アイテムは定期的に記憶領域から削除されます。この処理は*キャッシュ・エビクション*と呼ばれます。一方、サーバー上で変更されるリソースもあり、それはキャッシュを更新するべきです。HTTP はクライアントサーバープロトコルであり、リソースを変更したときにサーバーがキャッシュやクライアントに連絡することはできません。サーバーは、リソースの有効期限を伝えなければなりません。この有効期限に達するまではリソースが*新鮮 (fresh)* であり、また有効期限を過ぎるとリソースは*陳腐化 (stale)* します。エビクションアルゴリズムはたいてい、陳腐化したリソースよりも新鮮なリソースを優遇します。陳腐化したリソースは削除されたり無視されたりしないことに注意してください。陳腐化したリソースへのリクエストをキャッシュが受け取ると、実際はもう新鮮ではないかを確認するために {{HTTPHeader("If-None-Match")}} を付加してリクエストを転送します。新鮮な状態であれば、サーバーは要求されたリソースを送信せずに {{HTTPStatus("304")}} (Not Modified) ヘッダーを返して、帯域を節約します。 -

共有キャッシュのプロキシがある場合の処理例を以下に示します。

+共有キャッシュのプロキシがある場合の処理例を以下に示します。 -

Show how a proxy cache acts when a doc is not cache, in the cache and fresh, in the cache and stale.

+![Show how a proxy cache acts when a doc is not cache, in the cache and fresh, in the cache and stale.](https://mdn.mozillademos.org/files/13771/HTTPStaleness.png) -

鮮度の寿命は、いくつかのヘッダーを基に計算されます。"Cache-Control: max-age=N" ヘッダーが指定された場合は、鮮度の寿命が N に等しくなります。このヘッダーが与えられない場合がよくありますが、そのときは {{HTTPHeader("Expires")}} ヘッダーが与えられたかを確認します。Expires ヘッダーがある場合は、その値から {{HTTPHeader("Date")}} ヘッダーの値を減算した結果を鮮度の寿命にします。最後に、どちらのヘッダーも与えられていない場合は {{HTTPHeader("Last-Modified")}} ヘッダーを参照します。このヘッダーがある場合は、Date ヘッダーの値から Last-modified ヘッダーの値を減算して 10 で割った結果をキャッシュの寿命にします。
- 有効期限は以下のように計算します。

+鮮度の寿命は、いくつかのヘッダーを基に計算されます。"`Cache-Control: max-age=N`" ヘッダーが指定された場合は、鮮度の寿命が N に等しくなります。このヘッダーが与えられない場合がよくありますが、そのときは {{HTTPHeader("Expires")}} ヘッダーが与えられたかを確認します。`Expires` ヘッダーがある場合は、その値から {{HTTPHeader("Date")}} ヘッダーの値を減算した結果を鮮度の寿命にします。最後に、どちらのヘッダーも与えられていない場合は {{HTTPHeader("Last-Modified")}} ヘッダーを参照します。このヘッダーがある場合は、`Date` ヘッダーの値から `Last-modified` ヘッダーの値を減算して 10 で割った結果をキャッシュの寿命にします。 +有効期限は以下のように計算します。 -
expirationTime = responseTime + freshnessLifetime - currentAge
-
+``` +expirationTime = responseTime + freshnessLifetime - currentAge +``` -

ここで responseTime は、ブラウザーがレスポンスを受け取った時刻です。

+ここで `responseTime` は、ブラウザーがレスポンスを受け取った時刻です。 -

Revving を適用したリソース

+### Revving を適用したリソース -

キャッシュされたリソースをより多く使用すると、ウェブサイトの応答性やパフォーマンスが向上するでしょう。この最適化のために、有効期限をできるだけ遠い未来にすることが推奨されています。この方法は定期的あるいはよく更新されるリソースでも使用できますが、まれにしか更新されないリソースでは問題があります。それらはキャッシュされたリソースの恩恵を最大限に受けますが、更新することがとても難しくなります。この現象は、それぞれのウェブページに含まれたりリンクされたりする技術上のリソースで顕著です。JavaScript や CSS のファイルはあまり変更されませんが、変更点はすばやく反映されることが望まれます。

+キャッシュされたリソースをより多く使用すると、ウェブサイトの応答性やパフォーマンスが向上するでしょう。この最適化のために、有効期限をできるだけ遠い未来にすることが推奨されています。この方法は定期的あるいはよく更新されるリソースでも使用できますが、まれにしか更新されないリソースでは問題があります。それらはキャッシュされたリソースの恩恵を最大限に受けますが、更新することがとても難しくなります。この現象は、それぞれのウェブページに含まれたりリンクされたりする技術上のリソースで顕著です。JavaScript や CSS のファイルはあまり変更されませんが、変更点はすばやく反映されることが望まれます。 -

ウェブ開発者は、Steve Souders 氏が revving[1] と呼ぶ技術を発明しました。あまり更新しないファイルは、特定の方法で命名します。その方法とは、通常はファイル名である URL にリビジョン (またはバージョン) 番号を追加することです。この方法ではそれぞれの新しいリビジョンのリソースが変更されないリソースであるとみなされて、通常は 1 年あるいはそれ以上先の遠い未来を有効期限にすることができます。新しいバージョンを使用するためにすべてのリンクを変更しなければならないことが、この方法の欠点です。ウェブ開発者が使用するツールチェーンによって通常は注意される、追加の複雑性です。あまり変化しないリソースが変化するとき、よく変化するリソースにさらなる変化をもたらします。よく変化するリソースを読み込むときに、ほかのリソースの新しいバージョンも読み込まれます。

+ウェブ開発者は、Steve Souders 氏が _revving_[\[1\]](https://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/) と呼ぶ技術を発明しました。あまり更新しないファイルは、特定の方法で命名します。その方法とは、通常はファイル名である URL にリビジョン (またはバージョン) 番号を追加することです。この方法ではそれぞれの新しいリビジョンのリソースが*変更されない*リソースであるとみなされて、通常は 1 年あるいはそれ以上先の遠い未来を有効期限にすることができます。新しいバージョンを使用するためにすべてのリンクを変更しなければならないことが、この方法の欠点です。ウェブ開発者が使用するツールチェーンによって通常は注意される、追加の複雑性です。あまり変化しないリソースが変化するとき、よく変化するリソースにさらなる変化をもたらします。よく変化するリソースを読み込むときに、ほかのリソースの新しいバージョンも読み込まれます。 -

この手法には、さらなる利点があります。同時に 2 つのキャッシュ済みリソースを更新すると、ひとつのリソースが期限切れのバージョン、もうひとつのリソースが新しいバージョンという組み合わせで使用されることがなくなります。これは相互依存、すなわち、それぞれが同じ HTML 要素を参照しているためにお互いに依存しあっている CSS スタイルシートと JS スクリプトを使用するウェブサイトで特に重要です。

+この手法には、さらなる利点があります。同時に 2 つのキャッシュ済みリソースを更新すると、ひとつのリソースが期限切れのバージョン、もうひとつのリソースが新しいバージョンという組み合わせで使用されることがなくなります。これは相互依存、すなわち、それぞれが同じ HTML 要素を参照しているためにお互いに依存しあっている CSS スタイルシートと JS スクリプトを使用するウェブサイトで特に重要です。 -

+![](https://mdn.mozillademos.org/files/13779/HTTPRevved.png) -

revving を適用したリソースに追加するリビジョン情報は 1.1.3 のような伝統的なリビジョン文字列である必要はなく、単純に増加していく一組の番号でもかまいません。ハッシュ値や日付など、衝突を避けた情報にすることもできます。

+revving を適用したリソースに追加するリビジョン情報は 1.1.3 のような伝統的なリビジョン文字列である必要はなく、単純に増加していく一組の番号でもかまいません。ハッシュ値や日付など、衝突を避けた情報にすることもできます。 -

キャッシュの検証

+## キャッシュの検証 -

キャッシュされた文書の有効期限に達すると、検証または再取得を行います。キャッシュの検証は、サーバーが strong validator または weak validator を提供していれば実行できます。

+キャッシュされた文書の有効期限に達すると、検証または再取得を行います。キャッシュの検証は、サーバーが _strong validator_ または _weak validator_ を提供していれば実行できます。 -

ユーザーが再読み込みボタンを押すと、再検証が発生します。キャッシュされたレスポンスに "Cache-Control: must-revalidate" ヘッダーが含まれている場合は、通常のブラウジングでも再確認が発生します。もうひとつの要因が、詳細 -> キャッシュ 設定パネルにある、キャッシュ確認の設定です。ここに、文書を読み込むたびに確認を強いる設定項目があります。

+ユーザーが再読み込みボタンを押すと、再検証が発生します。キャッシュされたレスポンスに "`Cache-Control: must-revalidate`" ヘッダーが含まれている場合は、通常のブラウジングでも再確認が発生します。もうひとつの要因が、`詳細 -> キャッシュ` 設定パネルにある、キャッシュ確認の設定です。ここに、文書を読み込むたびに確認を強いる設定項目があります。 -

ETag

+### ETag -

{{HTTPHeader("ETag")}} レスポンスヘッダーは strong validator として使用できる、ユーザーエージェントにとって不透明な値です。ブラウザーなどの HTTP ユーザーエージェントは、この文字列が何を表すかがわからず、またこの値が何になるかを予測することもできません。ETag ヘッダーがリソースのレスポンスの一部に含まれていたら、クライアントは以降のリクエストでキャッシュ済みリソースの確認を行うために {{HTTPHeader("If-None-Match")}} をヘッダーに含めることができます。

+{{HTTPHeader("ETag")}} レスポンスヘッダーは strong validator として使用できる、*ユーザーエージェントにとって不透明*な値です。ブラウザーなどの HTTP ユーザーエージェントは、この文字列が何を表すかがわからず、またこの値が何になるかを予測することもできません。`ETag` ヘッダーがリソースのレスポンスの一部に含まれていたら、クライアントは以降のリクエストでキャッシュ済みリソースの確認を行うために {{HTTPHeader("If-None-Match")}} をヘッダーに含めることができます。 -

{{HTTPHeader("Last-Modified")}} レスポンスヘッダーは、weak validator として使用できます。これは分解能が 1 秒単位でしかないため、weak であると考えられます。Last-Modified ヘッダーがレスポンスに含まれていたら、クライアントはキャッシュ済み文書の確認を行うために {{HTTPHeader("If-Modified-Since")}} リクエストヘッダーを送信できます。

+{{HTTPHeader("Last-Modified")}} レスポンスヘッダーは、weak validator として使用できます。これは分解能が 1 秒単位でしかないため、weak であると考えられます。`Last-Modified` ヘッダーがレスポンスに含まれていたら、クライアントはキャッシュ済み文書の確認を行うために {{HTTPHeader("If-Modified-Since")}} リクエストヘッダーを送信できます。 -

確認要求が行われたとき、サーバーは確認要求を無視して通常の {{HTTPStatus(200)}} OK レスポンスを返すか、ブラウザーにキャッシュ済みの複製を使用するよう指示するために {{HTTPStatus(304)}} Not Modified (ボディは空にする) を返すことができます。後者のレスポンスでは、キャッシュ済み文書の有効期限を更新するヘッダーを含めることもできます。

+確認要求が行われたとき、サーバーは確認要求を無視して通常の {{HTTPStatus(200)}} `OK` レスポンスを返すか、ブラウザーにキャッシュ済みの複製を使用するよう指示するために {{HTTPStatus(304)}} `Not Modified` (ボディは空にする) を返すことができます。後者のレスポンスでは、キャッシュ済み文書の有効期限を更新するヘッダーを含めることもできます。 -

変化するレスポンス

+## 変化するレスポンス -

{{HTTPHeader("Vary")}} HTTP レスポンスヘッダーは、提供元のサーバーからレスポンスを得るように要求せずにキャッシュ済みのレスポンスを使用できるかを判断するために、以降のリクエストヘッダーをどのように照合するかを定義します。

+{{HTTPHeader("Vary")}} HTTP レスポンスヘッダーは、提供元のサーバーからレスポンスを得るように要求せずにキャッシュ済みのレスポンスを使用できるかを判断するために、以降のリクエストヘッダーをどのように照合するかを定義します。 -

Vary ヘッダーフィールドを持つキャッシュ済みレスポンスに合致可能なリクエストをキャッシュが受け取ったとき、Vary ヘッダーで指定されたすべてのヘッダーフィールドが元の (キャッシュ済み) リクエストと新たなリクエストの両方で一致しなければ、キャッシュ済みレスポンスを使用してはいけません。

+`Vary` ヘッダーフィールドを持つキャッシュ済みレスポンスに合致可能なリクエストをキャッシュが受け取ったとき、`Vary` ヘッダーで指定されたすべてのヘッダーフィールドが元の (キャッシュ済み) リクエストと新たなリクエストの両方で一致しなければ、キャッシュ済みレスポンスを使用してはいけません。 -

The Vary header leads cache to use more HTTP headers as key for the cache.

+![The Vary header leads cache to use more HTTP headers as key for the cache.](https://mdn.mozillademos.org/files/13769/HTTPVary.png) -

これは、例えば動的にコンテンツを提供する場合に有用です。Vary: User-Agent ヘッダーを使用すると、キャッシュサーバーはページをキャッシュから提供するかを判断するために、ユーザーエージェントを考慮します。モバイルユーザー向けに別のコンテンツを提供している場合、モバイルユーザー向けに誤ってデスクトップ版のサイトが提供されてしまうことを防ぐ助けになります。加えて、Google などの検索エンジンがモバイル版のページを発見する助けになり、クローキング を意図していないと知らせることもできるでしょう。

+これは、例えば動的にコンテンツを提供する場合に有用です。`Vary: User-Agent` ヘッダーを使用すると、キャッシュサーバーはページをキャッシュから提供するかを判断するために、ユーザーエージェントを考慮します。モバイルユーザー向けに別のコンテンツを提供している場合、モバイルユーザー向けに誤ってデスクトップ版のサイトが提供されてしまうことを防ぐ助けになります。加えて、Google などの検索エンジンがモバイル版のページを発見する助けになり、[クローキング](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0) を意図していないと知らせることもできるでしょう。 -
Vary: User-Agent
+``` +Vary: User-Agent +``` -

{{HTTPHeader("User-Agent")}} はモバイルクライアントとデスクトップクライアントで異なる ("vary") ため、誤ってモバイル版のコンテンツをデスクトップユーザー向けに使用する、あるいはその逆を行うことがなくなるでしょう。

+{{HTTPHeader("User-Agent")}} はモバイルクライアントとデスクトップクライアントで異なる ("vary") ため、誤ってモバイル版のコンテンツをデスクトップユーザー向けに使用する、あるいはその逆を行うことがなくなるでしょう。 -

関連情報

+## 関連情報 - +- [RFC 7234: Hypertext Transfer Protocol (HTTP/1.1): Caching](https://tools.ietf.org/html/rfc7234) +- [Caching Tutorial – Mark Nottingham](https://www.mnot.net/cache_docs) +- [HTTP caching – Ilya Grigorik](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching) +- [RedBot](https://redbot.org/): キャッシュ関係のヘッダーを確認するツール diff --git a/files/ja/web/http/client_hints/index.md b/files/ja/web/http/client_hints/index.md index 4c52fc70ee2ee8..106107f4b69872 100644 --- a/files/ja/web/http/client_hints/index.md +++ b/files/ja/web/http/client_hints/index.md @@ -10,31 +10,29 @@ tags: translation_of: Glossary/Client_hints original_slug: Glossary/Client_hints --- -

クライアントヒント (Client Hints) は、プロアクティブコンテンツネゴシエーション用の HTTP リクエストヘッダーフィールドのセットで、クライアントがデバイスとエージェントに固有の設定のリストを示すことができます。 クライアントヒントにより、画像の DPR 解像度の自動ネゴシエーションなどの最適化されたアセットの自動配信が可能になります。

+**クライアントヒント** (Client Hints) は、プロアクティブコンテンツネゴシエーション用の [HTTP リクエストヘッダー](/ja/docs/Web/HTTP/Headers)フィールドのセットで、クライアントがデバイスとエージェントに固有の設定のリストを示すことができます。 [クライアントヒント](/ja/docs/Web/HTTP/Headers#Client_hints)により、画像の DPR 解像度の自動ネゴシエーションなどの最適化されたアセットの自動配信が可能になります。 -

クライアントヒントの使用は自動ではありません。 サーバーはクライアントヒントをサポートしていることを知らせる必要があります。 サーバーは、Accept-CH (クライアントヒントを受け入れる) ヘッダーまたは http-equiv 属性を持つ同等の HTML の meta 要素を使用して、クライアントヒントのサポートを知らせます。

+クライアントヒントの使用は自動ではありません。 サーバーはクライアントヒントをサポートしていることを知らせる必要があります。 サーバーは、[`Accept-CH`](https://tools.ietf.org/html/draft-grigorik-http-client-hints-03#section-2.2.1) (クライアントヒントを受け入れる) ヘッダーまたは [`http-equiv`](/ja/docs/Web/HTML/Element/meta#Attributes) 属性を持つ同等の HTML の meta 要素を使用して、クライアントヒントのサポートを知らせます。 -

Accept-CH: DPR, Width, Viewport-Width, Downlink

+`Accept-CH: DPR, Width, Viewport-Width, Downlink` -

および/または

+および/または -

<meta http-equiv="Accept-CH" content="DPR, Width, Viewport-Width, Downlink">

+` ` -

クライアントが Accept-CH ヘッダーを受信すると、サポートしている場合は、知らされたフィールド値と一致するクライアントヒントのヘッダーを追加します。 例えば、上記の Accept-CH の例に基づいて、クライアントは DPR、Width、Viewport-Width、および Downlink のヘッダーを後続のすべてのリクエストに追加できます。 2番目の例では、サーバーは Accept-CH meta タグを設定することにより、ブラウザーにヒントを提供します。

+クライアントが `Accept-CH` ヘッダーを受信すると、サポートしている場合は、知らされたフィールド値と一致するクライアントヒントのヘッダーを追加します。 例えば、上記の Accept-CH の例に基づいて、クライアントは DPR、Width、Viewport-Width、および Downlink のヘッダーを後続のすべてのリクエストに追加できます。 2 番目の例では、サーバーは Accept-CH meta タグを設定することにより、ブラウザーにヒントを提供します。 -

基本的に、クライアントヒントのヘッダーを使用すると、開発者またはアプリは、デバイスピクセル比、ビューポート幅、ディスプレイ幅など、それ自体に関する情報をサーバーに知らせるようにブラウザーに指示できます。 その後、クライアントはサーバーにクライアントの環境に関する情報を提供でき、サーバーはその情報に基づいて送信するリソースを決定できます。

+基本的に、クライアントヒントのヘッダーを使用すると、開発者またはアプリは、デバイスピクセル比、ビューポート幅、ディスプレイ幅など、それ自体に関する情報をサーバーに知らせるようにブラウザーに指示できます。 その後、クライアントはサーバーにクライアントの環境に関する情報を提供でき、サーバーはその情報に基づいて送信するリソースを決定できます。 -

変化するクライアントヒント

+## 変化するクライアントヒント -

異なるクライアントヒントがレスポンスに影響する可能性があることをキャッシュに伝えるには、Vary HTTP ヘッダーを使用する必要があります。

+異なる[クライアントヒント](/ja/docs/Web/HTTP/Headers#Client_hints)がレスポンスに影響する可能性があることをキャッシュに伝えるには、[`Vary`](/ja/docs/Web/HTTP/Headers/Vary) HTTP ヘッダーを使用する必要があります。 -

変化するレスポンスの例:

+変化するレスポンスの例: -

Vary: Accept, DPR, Width, Viewport-Width, Downlink

+`Vary: Accept, DPR, Width, Viewport-Width, Downlink` -

関連情報

+## 関連情報 - +- [クライアントヒントのヘッダー](/ja/docs/Web/HTTP/Headers#Client_hints) +- [`Vary` HTTP ヘッダー](/ja/docs/Web/HTTP/Headers/Vary) diff --git a/files/ja/web/http/compression/index.md b/files/ja/web/http/compression/index.md index fd48194c13836b..1bd18689b50a37 100644 --- a/files/ja/web/http/compression/index.md +++ b/files/ja/web/http/compression/index.md @@ -8,63 +8,57 @@ tags: - 圧縮 translation_of: Web/HTTP/Compression --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

圧縮は、ウェブサイトのパフォーマンスを向上させるための重要な手段です。ドキュメントによっては、必要な帯域を最大 70% 削減するほどサイズが縮減します。長年かけてアルゴリズムはより効率的になり、またクライアントおよびサーバーが新たなアルゴリズムをサポートしました。

+**圧縮**は、ウェブサイトのパフォーマンスを向上させるための重要な手段です。ドキュメントによっては、必要な帯域を最大 70% 削減するほどサイズが縮減します。長年かけてアルゴリズムはより効率的になり、またクライアントおよびサーバーが新たなアルゴリズムをサポートしました。 -

実際のところ、圧縮の仕組みはブラウザーやサーバーがすでに実装していますので、ウェブ開発者が実装する必要性はありません。しかし、サーバーが適切に設定されるように注意しなければなりません。圧縮は、3 種類の異なるレベルで実施します。

+実際のところ、圧縮の仕組みはブラウザーやサーバーがすでに実装していますので、ウェブ開発者が実装する必要性はありません。しかし、サーバーが適切に設定されるように注意しなければなりません。圧縮は、3 種類の異なるレベルで実施します。 -
    -
  • 始めに、一部のファイル形式は、固有の最適化された方法で圧縮されます。
  • -
  • そして、一般的な暗号化が HTTP レベルで行われれる場合があります (リソースはエンドツーエンドで圧縮されて転送されます)
  • -
  • 最後に HTTP コネクションの 2 つのノード間で、コネクションレベルで圧縮が定義される場合があります。
  • -
+- 始めに、一部のファイル形式は、固有の最適化された方法で圧縮されます。 +- そして、一般的な暗号化が HTTP レベルで行われれる場合があります (リソースはエンドツーエンドで圧縮されて転送されます) +- 最後に HTTP コネクションの 2 つのノード間で、コネクションレベルで圧縮が定義される場合があります。 -

ファイル形式の圧縮

+## ファイル形式の圧縮 -

それぞれのデータ形式には、無駄なスペース (wasted space) と呼ばれる冗長な領域が内部にあります。テキストが一般的に 60% もの冗長性を持つとして、この割合は音声や動画といった他のメディアよりはるかに高くなります。テキストとは異なり、これらのその他のメディア形式はデータを格納するためにより多くの領域を使用するので、ストレージを最適化し領域を取り戻す必要性はごく初期に明らかになりました。技術者は特定の用途向けに設計されたファイル形式で使用される、最適化された圧縮アルゴリズムを設計しました。メディアファイルで使用される圧縮アルゴリズムは、大きく 2 つのカテゴリーに分類できます。

+それぞれのデータ形式には、無駄なスペース (_wasted space_) と呼ばれる冗長な領域が内部にあります。テキストが一般的に 60% もの冗長性を持つとして、この割合は音声や動画といった他のメディアよりはるかに高くなります。テキストとは異なり、これらのその他のメディア形式はデータを格納するためにより多くの領域を使用するので、ストレージを最適化し領域を取り戻す必要性はごく初期に明らかになりました。技術者は特定の用途向けに設計されたファイル形式で使用される、最適化された圧縮アルゴリズムを設計しました。メディアファイルで使用される圧縮アルゴリズムは、大きく 2 つのカテゴリーに分類できます。 -
    -
  • 可逆圧縮。圧縮・展開のサイクルで取り出したデータが変化しません。これは元のデータに (バイト単位で) 一致します。
    - 画像では gifpng が可逆圧縮を使用しています。
  • -
  • 非可逆圧縮。圧縮・展開のサイクルで、ユーザーが (できるだけ) 感知できない方法で元のデータを変更します。
    - ウェブ上の動画形式は非可逆です。 jpeg 画像も非可逆です。
  • -
+- _可逆圧縮_。圧縮・展開のサイクルで取り出したデータが変化しません。これは元のデータに (バイト単位で) 一致します。 + 画像では `gif` や `png` が可逆圧縮を使用しています。 +- _非可逆圧縮_。圧縮・展開のサイクルで、ユーザーが (できるだけ) 感知できない方法で元のデータを変更します。 + ウェブ上の動画形式は非可逆です。 `jpeg` 画像も非可逆です。 -

webp のように可逆圧縮と非可逆圧縮のいずれかを使用できる形式もありますが、通常は非可逆圧縮で高圧縮・低圧縮を設定でき、当然ながらそれは品質の高低に結びつきます。サイトのパフォーマンスを高めるには、満足できる品質レベルを維持しながら、できるだけ圧縮することが理想です。画像の場合は、ツールが生成する画像はウェブ向けに十分最適化されていない場合があります。要求する品質で可能な限り圧縮するツールを使用することをお勧めします。この用途に特化した 多くのツール があります。

+`webp` のように可逆圧縮と非可逆圧縮のいずれかを使用できる形式もありますが、通常は非可逆圧縮で高圧縮・低圧縮を設定でき、当然ながらそれは品質の高低に結びつきます。サイトのパフォーマンスを高めるには、満足できる品質レベルを維持しながら、できるだけ圧縮することが理想です。画像の場合は、ツールが生成する画像はウェブ向けに十分最適化されていない場合があります。要求する品質で可能な限り圧縮するツールを使用することをお勧めします。この用途に特化した [多くのツール](https://www.creativebloq.com/design/image-compression-tools-1132865) があります。 -

非可逆圧縮アルゴリズムは一般的に、可逆圧縮より効率がよくなります。

+非可逆圧縮アルゴリズムは一般的に、可逆圧縮より効率がよくなります。 -
-

特定の種類のファイルは圧縮が良好に機能しているため、通常は 2 度目の圧縮を行いません。実際のところ、大きなファイルの圧縮によって得られる追加の利益よりもオーバーヘッド (アルゴリズムは一般的に、初期のサイズに追加する辞書が必要です) のコストが上回る場合があります。圧縮済み形式のファイルで、以下の2つの技術は使用しないでください。

-
+> **Note:** 特定の種類のファイルは圧縮が良好に機能しているため、通常は 2 度目の圧縮を行いません。実際のところ、大きなファイルの圧縮によって得られる追加の利益よりもオーバーヘッド (アルゴリズムは一般的に、初期のサイズに追加する辞書が必要です) のコストが上回る場合があります。圧縮済み形式のファイルで、以下の 2 つの技術は使用しないでください。 -

エンドツーエンドの圧縮

+## エンドツーエンドの圧縮 -

エンドツーエンドの圧縮は、ウェブサイトのパフォーマンスをもっとも向上させます。エンドツーエンドの圧縮は、サーバーによって行われるメッセージボディの圧縮を指しており、圧縮されたデータはクライアントに到達するまで変更されません。中間のノードはすべて、ボディ部分に手をつけないままにします。

+エンドツーエンドの圧縮は、ウェブサイトのパフォーマンスをもっとも向上させます。エンドツーエンドの圧縮は、サーバーによって行われるメッセージボディの圧縮を指しており、圧縮されたデータはクライアントに到達するまで変更されません。中間のノードはすべて、ボディ部分に手をつけないままにします。 -

+![](https://mdn.mozillademos.org/files/13801/HTTPEnco1.png) -

現代のすべてのブラウザーやサーバーはこの圧縮をサポートしており、唯一取り決めることは、使用する圧縮アルゴリズムです。これらのアルゴリズムは、テキストに最適化されています。1990 年代に圧縮技術は速いペースで進歩して、いくつものアルゴリズムが、使用可能な選択肢に追加されました。現在妥当なアルゴリズムは、もっとも一般的な gzip と新たな挑戦者である br の 2 つだけです。

+現代のすべてのブラウザーやサーバーはこの圧縮をサポートしており、唯一取り決めることは、使用する圧縮アルゴリズムです。これらのアルゴリズムは、テキストに最適化されています。1990 年代に圧縮技術は速いペースで進歩して、いくつものアルゴリズムが、使用可能な選択肢に追加されました。現在妥当なアルゴリズムは、もっとも一般的な `gzip` と新たな挑戦者である `br` の 2 つだけです。 -

使用するアルゴリズムを選択するには、ブラウザーとサーバーで プロアクティブなコンテンツネゴシエーション を行います。ブラウザーは {{HTTPHeader("Accept-Encoding")}} ヘッダーで、サポートするアルゴリズムを優先度順に並べて送信します。サーバーはそのうちひとつを選択して、レスポンスのボディの圧縮に使用します。そして {{HTTPHeader("Content-Encoding")}} ヘッダーを使用して、選択したアルゴリズムをブラウザーに伝えます。エンコーディングに基づいて表現を選択するためにコンテンツネゴシエーションを使用したとき、少なくとも {{HTTPHeader("Content-Encoding")}} を含めた {{HTTPHeader("Vary")}} ヘッダーを、レスポンスとともに送信しなければなりません。この方法によって、リソースのさまざまな表現をキャッシュすることができます。

+使用するアルゴリズムを選択するには、ブラウザーとサーバーで [プロアクティブなコンテンツネゴシエーション](/ja/docs/Web/HTTP/Content_negotiation) を行います。ブラウザーは {{HTTPHeader("Accept-Encoding")}} ヘッダーで、サポートするアルゴリズムを優先度順に並べて送信します。サーバーはそのうちひとつを選択して、レスポンスのボディの圧縮に使用します。そして {{HTTPHeader("Content-Encoding")}} ヘッダーを使用して、選択したアルゴリズムをブラウザーに伝えます。エンコーディングに基づいて表現を選択するためにコンテンツネゴシエーションを使用したとき、少なくとも {{HTTPHeader("Content-Encoding")}} を含めた {{HTTPHeader("Vary")}} ヘッダーを、レスポンスとともに送信しなければなりません。この方法によって、リソースのさまざまな表現をキャッシュすることができます。 -

+![](https://mdn.mozillademos.org/files/13811/HTTPCompression1.png) -

圧縮によってパフォーマンスが大きく向上しますので、画像・音声・動画といったすでに圧縮されているものを除くすべてのファイルで圧縮を有効化することを推奨します。

+圧縮によってパフォーマンスが大きく向上しますので、画像・音声・動画といったすでに圧縮されているものを除くすべてのファイルで圧縮を有効化することを推奨します。 -

Apache は圧縮や mod_deflate をサポートします。 nginx では ngx_http_gzip_module、 IIS では <httpCompression> 要素があります。

+Apache は圧縮や [mod_deflate](https://httpd.apache.org/docs/current/mod/mod_deflate.html) をサポートします。 nginx では [ngx_http_gzip_module](https://nginx.org/en/docs/http/ngx_http_gzip_module.html)、 IIS では [``](https://www.iis.net/configreference/system.webserver/httpcompression) 要素があります。 -

ホップバイホップの圧縮

+## ホップバイホップの圧縮 -

ホップバイホップの圧縮はエンドツーエンドの圧縮に似ています。しかし、サーバー内のリソースでは圧縮を行わずに特定の表現形式を生成して転送しますが、クライアントとサーバーの間のパス上にある任意の 2 つのノードの間でメッセージのボディが圧縮されるという根本的な違いがあります。連続した中間ノードの間のコネクションで、異なる圧縮が行われることがあります。

+ホップバイホップの圧縮はエンドツーエンドの圧縮に似ています。しかし、サーバー内のリソースでは圧縮を行わずに特定の表現形式を生成して転送しますが、クライアントとサーバーの間のパス上にある任意の 2 つのノードの間でメッセージのボディが圧縮されるという根本的な違いがあります。連続した中間ノードの間のコネクションで、*異なる*圧縮が行われることがあります。 -

+![](https://mdn.mozillademos.org/files/13807/HTTPTE1.png) -

これを行うために、 HTTP ではエンドツーエンドの圧縮のコンテンツネゴシエーションに似ている仕組みを使用します。リクエストを転送するノードは {{HTTPHeader("TE")}} ヘッダーを使用して圧縮アルゴリズムを伝えます。相手のノードは適切な方式を選択して圧縮を行い、 {{HTTPHeader("Transfer-Encoding")}} ヘッダーを使用して、選択した方式を示します。

+これを行うために、 HTTP ではエンドツーエンドの圧縮のコンテンツネゴシエーションに似ている仕組みを使用します。リクエストを転送するノードは {{HTTPHeader("TE")}} ヘッダーを使用して圧縮アルゴリズムを伝えます。相手のノードは適切な方式を選択して圧縮を行い、 {{HTTPHeader("Transfer-Encoding")}} ヘッダーを使用して、選択した方式を示します。 -

+![](https://mdn.mozillademos.org/files/13809/HTTPComp2.png) -

実際は、ホップバイホップの圧縮はサーバーやクライアントにとって透過的であり、あまり使用されません。 {{HTTPHeader("TE")}} および {{HTTPHeader("Transfer-Encoding")}} は主にチャンク形式でレスポンスを送信するために使用され、長さがわからないリソースの転送を開始することができます。

+実際は、ホップバイホップの圧縮はサーバーやクライアントにとって透過的であり、あまり使用されません。 {{HTTPHeader("TE")}} および {{HTTPHeader("Transfer-Encoding")}} は主にチャンク形式でレスポンスを送信するために使用され、長さがわからないリソースの転送を開始することができます。 -

ホップレベルで圧縮や {{HTTPHeader("Transfer-Encoding")}} を使用することは Apache、nginx、IIS などほとんどのサーバーでまれであり、簡単に設定する方法はありません。このような設定は、主にプロキシレベルで行います。

+ホップレベルで圧縮や {{HTTPHeader("Transfer-Encoding")}} を使用することは Apache、nginx、IIS などほとんどのサーバーでまれであり、簡単に設定する方法はありません。このような設定は、主にプロキシレベルで行います。 diff --git a/files/ja/web/http/configuring_servers_for_ogg_media/index.md b/files/ja/web/http/configuring_servers_for_ogg_media/index.md index 4b40e4d61e75c5..c80e1700af23ad 100644 --- a/files/ja/web/http/configuring_servers_for_ogg_media/index.md +++ b/files/ja/web/http/configuring_servers_for_ogg_media/index.md @@ -8,83 +8,82 @@ tags: - Video translation_of: Web/HTTP/Configuring_servers_for_Ogg_media --- -

{{HTTPSidebar}}

+{{HTTPSidebar}} -

HTML {{HTMLElement("audio")}} 要素と {{HTMLElement("video")}} 要素を使用すると、ユーザーはプラグインやその他のソフトウェアをインストールする必要なくメディアを表示できます。サーバーが Ogg メディアを正しく配信するためには、いくつか設定が必要な場合があります。

+HTML {{HTMLElement("audio")}} 要素と {{HTMLElement("video")}} 要素を使用すると、ユーザーはプラグインやその他のソフトウェアをインストールする必要なくメディアを表示できます。サーバーが Ogg メディアを正しく配信するためには、いくつか設定が必要な場合があります。 -

正しい MIME タイプの Ogg メディアを提供する

+## 正しい MIME タイプの Ogg メディアを提供する -

*.ogg and *.ogv files containing video (possibly with an audio track as well, of course), should be served with the video/ogg MIME type. *.oga and *.ogg files containing only audio should be served with the audio/ogg MIME type.

+\*.ogg and \*.ogv files containing video (possibly with an audio track as well, of course), should be served with the `video/ogg` MIME type. \*.oga and \*.ogg files containing only audio should be served with the `audio/ogg` MIME type. -

If you don't know whether the Ogg file contains audio or video, you can serve it with the MIME type application/ogg, and Gecko will treat it as a video file.

+If you don't know whether the Ogg file contains audio or video, you can serve it with the MIME type application/ogg, and Gecko will treat it as a video file. -

Most servers don't by default serve Ogg media with the correct MIME types, so you'll likely need to add the appropriate configuration for this.

+Most servers don't by default serve Ogg media with the correct MIME types, so you'll likely need to add the appropriate configuration for this. -

For Apache, you can add the following to your configuration:

+For Apache, you can add the following to your configuration: -
AddType audio/ogg .oga
+```
+AddType audio/ogg .oga
 AddType video/ogg .ogv
 AddType application/ogg .ogg
-
+``` -

HTTP 1.1 byte range requests を正しく処理する

+## HTTP 1.1 byte range requests を正しく処理する -

In order to support seeking and playing back regions of the media that aren't yet downloaded, Gecko uses HTTP 1.1 byte-range requests to retrieve the media from the seek target position. In addition, Gecko uses byte-range requests to seek to the end of the media (assuming you serve the {{HTTPHeader("Content-Length")}} header) in order to determine the duration of the media.

+In order to support seeking and playing back regions of the media that aren't yet downloaded, Gecko uses HTTP 1.1 byte-range requests to retrieve the media from the seek target position. In addition, Gecko uses byte-range requests to seek to the end of the media (assuming you serve the {{HTTPHeader("Content-Length")}} header) in order to determine the duration of the media. -

Your server should accept the {{HTTPHeader("Accept-Ranges")}}: bytes HTTP header if it can accept byte-range requests. It must return {{HTTPStatus("206")}}: Partial content to all byte range requests; otherwise, browsers can't be sure you actually support byte range requests.

+Your server should accept the {{HTTPHeader("Accept-Ranges")}}`: bytes` HTTP header if it can accept byte-range requests. It must return {{HTTPStatus("206")}}`: Partial content` to all byte range requests; otherwise, browsers can't be sure you actually support byte range requests. -

Your server must also return "206: Partial Content" for the request "Range: bytes=0-" as well.

+Your server must also return "`206: Partial Content`" for the request "`Range: bytes=0-`" as well. -

通常のキーフレームを含める

+## 通常のキーフレームを含める -

When Gecko seeks through Ogg media to a specified time, it has to seek to the nearest key frame before the seek target, then download and decode the video from there until the requested target time. The farther apart your key frames are, the longer this takes, so it's helpful to include key frames at regular intervals.

+When Gecko seeks through Ogg media to a specified time, it has to seek to the nearest key frame before the seek target, then download and decode the video from there until the requested target time. The farther apart your key frames are, the longer this takes, so it's helpful to include key frames at regular intervals. -

By default, ffmpeg2theora uses one key frame every 64 frames (or about every 2 seconds at 30 frames per second), which works pretty well.

+By default, [`ffmpeg2theora`](http://v2v.cc/~j/ffmpeg2theora/) uses one key frame every 64 frames (or about every 2 seconds at 30 frames per second), which works pretty well. -
Note: Of course, the more key frames you use, the larger your video file is, so you may need to experiment a bit to get the right balance between file size and seek performance.
+> **Note:** Of course, the more key frames you use, the larger your video file is, so you may need to experiment a bit to get the right balance between file size and seek performance. -

preload 属性の使用を検討する

+## preload 属性の使用を検討する -

The HTML {{HTMLElement("audio")}} and {{HTMLElement("video")}} elements provide the preload attribute, which tells Gecko to attempt to download the entire media when the page loads. Without preload, Gecko only downloads enough of the media to display the first video frame, and to determine the media's duration.

+The HTML {{HTMLElement("audio")}} and {{HTMLElement("video")}} elements provide the `preload` attribute, which tells Gecko to attempt to download the entire media when the page loads. Without `preload`, Gecko only downloads enough of the media to display the first video frame, and to determine the media's duration. -

preload is off by default, so if getting to video is the point of your web page, your users may appreciate it if you include preload in your video elements.

+`preload` is off by default, so if getting to video is the point of your web page, your users may appreciate it if you include `preload` in your video elements. -

古いバージョンの Firefox の設定

+## 古いバージョンの Firefox の設定 -

Serve X-Content-Duration headers

+### Serve X-Content-Duration headers -
-

Note: As of Firefox 41, the X-Content-Duration header is no longer supported. See {{Bug(1160695)}} for more details.

-
+> **Note:** As of [Firefox 41](/ja/Firefox/Releases/41), the `X-Content-Duration` header is no longer supported. See {{Bug(1160695)}} for more details. -

The Ogg format doesn't encapsulate the duration of media, so for the progress bar on the video controls to display the duration of the video, Gecko needs to determine the length of the media using other means.

+The Ogg format doesn't encapsulate the duration of media, so for the progress bar on the video controls to display the duration of the video, Gecko needs to determine the length of the media using other means. -

There are two ways Gecko can do this. The best way is to offer an X-Content-Duration header when serving Ogg media files. This header provides the duration of the video in seconds (not in HH:MM:SS format) as a floating-point value.

+There are two ways Gecko can do this. The best way is to offer an `X-Content-Duration` header when serving Ogg media files. This header provides the duration of the video in seconds (**not** in HH:MM:SS format) as a floating-point value. -

For example, if the video is 1 minute and 32.6 seconds long, this header would be:

+For example, if the video is 1 minute and 32.6 seconds long, this header would be: -
X-Content-Duration: 92.6
-
+``` +X-Content-Duration: 92.6 +``` -

If your server provides the X-Content-Duration header when serving Ogg media, Gecko doesn't have to do any extra HTTP requests to seek to the end of the file to calculate its duration. This makes the entire process much more efficient as well as more accurate.

+If your server provides the `X-Content-Duration` header when serving Ogg media, Gecko doesn't have to do any extra HTTP requests to seek to the end of the file to calculate its duration. This makes the entire process much more efficient as well as more accurate. -

As an inferior alternative, Gecko can estimate the video length based on the Content-Length. See next point.

+As an inferior alternative, Gecko can estimate the video length based on the Content-Length. See next point. -

Don't use gzip/deflate compression

+### Don't use gzip/deflate compression -

One common way to reduce the load on a web server is to use gzip or deflate compression when serving to a supporting web browser. When Firefox requests an Ogg media, it advertises that it can handle a gzipped or deflated response; the HTTP request includes the Accept-Encoding: gzip,deflate header. But despite Firefox advertising that it supports gzip/deflate, you probably don't want to gzip or deflate Ogg media. If you serve an Ogg media compressed, Firefox won't be able to seek in the media, or determine its duration. Since the video/audio data in Ogg files is already compressed, gzip/deflate won't actually save you much bandwidth anyway, so you probably want to disable compression when serving Ogg files.

+One common way to reduce the load on a web server is to use [gzip or deflate compression](http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/) when serving to a supporting web browser. When Firefox requests an Ogg media, it advertises that it can handle a gzipped or deflated response; the HTTP request includes the `Accept-Encoding: gzip,deflate` header. But despite Firefox advertising that it supports gzip/deflate, you probably don't want to gzip or deflate Ogg media. If you serve an Ogg media compressed, Firefox won't be able to seek in the media, or determine its duration. Since the video/audio data in Ogg files is already compressed, gzip/deflate won't actually save you much bandwidth anyway, so you probably want to disable compression when serving Ogg files. -

Also, Apache servers don't send the Content-Length response header if gzip encoding is used.

+Also, Apache servers don't send the Content-Length response header if gzip encoding is used. -
-

Note: Starting in {{Gecko("2.0") }}, Gecko will no longer request gzip or deflate compression when downloading media. The above is only relevant for Firefox 3.5/3.6.

-
+> **Note:** Starting in {{Gecko("2.0") }}, Gecko will no longer request gzip or deflate compression when downloading media. The above is only relevant for Firefox 3.5/3.6. -

Getting the duration of Ogg media

+### Getting the duration of Ogg media -

You can use the oggz-info tool to get the media duration; this tool is included with the oggz-tools package. The output from oggz-info looks like this:

+You can use the `oggz-info` tool to get the media duration; this tool is included with the [`oggz-tools`](http://www.xiph.org/oggz/) package. The output from `oggz-info` looks like this: -
 $ oggz-info /g/media/bruce_vs_ironman.ogv
+```
+ $ oggz-info /g/media/bruce_vs_ironman.ogv
  Content-Duration: 00:01:00.046
 
  Skeleton: serialno 1976223438
@@ -102,15 +101,13 @@ AddType application/ogg .ogg
          4531 packets in 167 pages, 27.1 packets/page, 1.408% Ogg overhead
          Audio-Samplerate: 44100 Hz
          Audio-Channels: 2
-
+``` -

Note that you can't simply serve up the reported Content-Duration line reported by oggz-info, because it's reported in HH:MM:SS format. You'll need to convert it to seconds only, then serve that as your X-Content-Duration value. Just parse out the HH, MM, and SS into numbers, then do (HH*3600)+(MM*60)+SS to get the value you should report.

+Note that you can't simply serve up the reported Content-Duration line reported by `oggz-info`, because it's reported in HH:MM:SS format. You'll need to convert it to seconds only, then serve that as your `X-Content-Duration` value. Just parse out the HH, MM, and SS into numbers, then do (HH\*3600)+(MM\*60)+SS to get the value you should report. -

It's important to note that it appears that oggz-info makes a read pass of the media in order to calculate its duration, so it's a good idea to store the duration value in order to avoid lengthy delays while the value is calculated for every HTTP request of your Ogg media.

+It's important to note that it appears that `oggz-info` makes a read pass of the media in order to calculate its duration, so it's a good idea to store the duration value in order to avoid lengthy delays while the value is calculated for every HTTP request of your Ogg media. -

関連情報

+## 関連情報 - +- [Video and audio content](/ja/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content) +- [Media formats supported by the audio and video elements](/ja/docs/Web/HTML/Supported_media_formats) diff --git a/files/ja/web/http/connection_management_in_http_1.x/index.md b/files/ja/web/http/connection_management_in_http_1.x/index.md index 31a7b684efece5..e1fea769256909 100644 --- a/files/ja/web/http/connection_management_in_http_1.x/index.md +++ b/files/ja/web/http/connection_management_in_http_1.x/index.md @@ -10,84 +10,74 @@ tags: - WebMechanics translation_of: Web/HTTP/Connection_management_in_HTTP_1.x --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

コネクション管理は、 HTTP の重要なトピックです。コネクションを開いたり管理したりすることは、ウェブサイトやウェブアプリケーションのパフォーマンスに大きな影響を与えます。HTTP/1.x では短命な (short-lived) コネクション持続的な (persistent) コネクションHTTP パイプラインといったモデルがあります。

+コネクション管理は、 HTTP の重要なトピックです。コネクションを開いたり管理したりすることは、ウェブサイトやウェブアプリケーションのパフォーマンスに大きな影響を与えます。HTTP/1.x では*短命な (short-lived) コネクション*、_持続的な (persistent) コネクション_、*HTTP パイプライン*といったモデルがあります。 -

HTTP は、クライアントとサーバーの間のコネクションを提供するトランスポートプロトコルを、たいてい TCP に依存しています。初期のころ、 HTTP が使用するコネクションの制御モデルは 1 種類でした。それらのコネクションは短命です。リクエストの送信が必要になるたびに新たなコネクションを作成して、回答を受け取るとコネクションを閉じていました。

+HTTP は、クライアントとサーバーの間のコネクションを提供するトランスポートプロトコルを、たいてい TCP に依存しています。初期のころ、 HTTP が使用するコネクションの制御モデルは 1 種類でした。それらのコネクションは短命です。リクエストの送信が必要になるたびに新たなコネクションを作成して、回答を受け取るとコネクションを閉じていました。 -

このシンプルなモデルは、先天的なパフォーマンスの制約を抱えていました。それぞれの TCP コネクションを開く処理は、リソースを消費します。いくつかのメッセージを、クライアントとサーバーの間で交換しなければなりません。リクエストの送信が必要になると、ネットワークの遅延や帯域がパフォーマンスに影響を与えます。現代のウェブページは、必要な情報を提供するために多くのリクエスト (1 ダース以上) を必要としており、初期のモデルが非効率であることを実証しています。

+このシンプルなモデルは、先天的なパフォーマンスの制約を抱えていました。それぞれの TCP コネクションを開く処理は、リソースを消費します。いくつかのメッセージを、クライアントとサーバーの間で交換しなければなりません。リクエストの送信が必要になると、ネットワークの遅延や帯域がパフォーマンスに影響を与えます。現代のウェブページは、必要な情報を提供するために多くのリクエスト (1 ダース以上) を必要としており、初期のモデルが非効率であることを実証しています。 -

HTTP/1.1 で、新たなモデルを 2 種類導入しました。持続的なコネクションモデルは、連続したリクエストの間はコネクションを開き続けておくことで、新たなコネクションを開始するために必要な時間を削減します。 HTTP パイプラインモデルはさらに 1 歩進んで、回答を待っている間も複数の連続したリクエストを送信して、ネットワークの遅延の大部分を削減します。

+HTTP/1.1 で、新たなモデルを 2 種類導入しました。持続的なコネクションモデルは、連続したリクエストの間はコネクションを開き続けておくことで、新たなコネクションを開始するために必要な時間を削減します。 HTTP パイプラインモデルはさらに 1 歩進んで、回答を待っている間も複数の連続したリクエストを送信して、ネットワークの遅延の大部分を削減します。 -

HTTP/1.x の3つのコネクションモデルにおけるパフォーマンスの比較: 短命なコネクション、持続的なコネクション、 HTTP パイプライン

+![HTTP/1.x の3つのコネクションモデルにおけるパフォーマンスの比較: 短命なコネクション、持続的なコネクション、 HTTP パイプライン](http1_x_connections.png) -
-

HTTP/2 では、コネクションの管理モデルをさらに追加しました。

-
+> **Note:** HTTP/2 では、コネクションの管理モデルをさらに追加しました。 -

特筆すべき重要なポイントとして、 HTTP のコネクション管理は隣接したノードの間のコネクション、すなわちエンドツーエンドではなくホップバイホップに適用されることがあります。クライアントと最初のプロキシの間で使用するモデルと、プロキシと宛先サーバー (または任意の中間プロキシ) の間で使用するモデルが異なることもあります。{{HTTPHeader("Connection")}} や {{HTTPHeader("Keep-Alive")}} といったコネクションモデルの定義にかかわる HTTP ヘッダーは、中間のノードが値を変更できる ホップバイホップ ヘッダーです。

+特筆すべき重要なポイントとして、 HTTP のコネクション管理は隣接したノードの間のコネクション、すなわち[エンドツーエンド](/ja/docs/Web/HTTP/Headers#e2e)ではなく[ホップバイホップ](/ja/docs/Web/HTTP/Headers#hbh)に適用されることがあります。クライアントと最初のプロキシの間で使用するモデルと、プロキシと宛先サーバー (または任意の中間プロキシ) の間で使用するモデルが異なることもあります。{{HTTPHeader("Connection")}} や {{HTTPHeader("Keep-Alive")}} といったコネクションモデルの定義にかかわる HTTP ヘッダーは、中間のノードが値を変更できる [ホップバイホップ](/ja/docs/Web/HTTP/Headers#hbh) ヘッダーです。 -

関連するトピックとしては、 HTTP コネクションのアップグレードの概念、つまり HTTP/1.1 コネクションが TLS/1.0、 WebSocket、 又は平文の HTTP/2 のような異なるプロトコルにアップグレードされたことが挙げられます。このプロトコルのアップグレードメカニズムは他の場所でもっと詳しく文書化されています。

+関連するトピックとしては、 HTTP コネクションのアップグレードの概念、つまり HTTP/1.1 コネクションが TLS/1.0、 WebSocket、 又は平文の HTTP/2 のような異なるプロトコルにアップグレードされたことが挙げられます。この[プロトコルのアップグレードメカニズム](/ja/docs/Web/HTTP/Protocol_upgrade_mechanism)は他の場所でもっと詳しく文書化されています。 -

短命なコネクション

+## 短命なコネクション -

短命なコネクションは HTTP の初期のモデルであり、 HTTP/1.0 の既定のモデルです。それぞれの HTTP リクエストは、自身のコネクションで完結します。すなわち、各 HTTP リクエストの前に TCP のハンドシェイクが発生します。また、それらが連続します。

+*短命なコネクション*は HTTP の初期のモデルであり、 HTTP/1.0 の既定のモデルです。それぞれの HTTP リクエストは、自身のコネクションで完結します。すなわち、各 HTTP リクエストの前に TCP のハンドシェイクが発生します。また、それらが連続します。 -

TCP のハンドシェイク自体は時間がかかる処理ですが、 TCP のコネクションはその負荷に適応しており、より持続するコネクションによって効率が向上します。短命なコネクションは TCP の効率化機能を使用しておらず、また新たなコールド状態のコネクションで送信することに固執するため最適な状態よりもパフォーマンスが低下します。

+TCP のハンドシェイク自体は時間がかかる処理ですが、 TCP のコネクションはその負荷に適応しており、より持続するコネクションによって効率が向上します。短命なコネクションは TCP の効率化機能を使用しておらず、また新たなコールド状態のコネクションで送信することに固執するため最適な状態よりもパフォーマンスが低下します。 -

このモデルは HTTP/1.0 で使用する既定のモデルです ({{HTTPHeader("Connection")}} ヘッダーが存在しない、あるいはヘッダーの値が close である場合)。 HTTP/1.1 では、 {{HTTPHeader("Connection")}} ヘッダーで close の値が送信された場合に限り、このモデルを使用します。

+このモデルは HTTP/1.0 で使用する既定のモデルです ({{HTTPHeader("Connection")}} ヘッダーが存在しない、あるいはヘッダーの値が `close` である場合)。 HTTP/1.1 では、 {{HTTPHeader("Connection")}} ヘッダーで `close` の値が送信された場合に限り、このモデルを使用します。 -
-

とても古い (持続的なコネクションをサポートしていない) システムを扱う場合を除き、あえてこのモデルを使用する理由はありません。

-
+> **Note:** とても古い (持続的なコネクションをサポートしていない) システムを扱う場合を除き、あえてこのモデルを使用する理由はありません。 -

持続的なコネクション

+## 持続的なコネクション -

短命なコネクションには、大きな問題点が 2 つあります。新しいコネクションを確立するためにかなり時間がかかること、および下層の TCP コネクションは何度も使用するとき (ウォーム状態のコネクション) しかパフォーマンスが向上しないことです。これらの問題を緩和するため、 HTTP/1.1 より前から持続的なコネクションの概念が考えられてきました。あるいは、キープアライブ接続と呼ばれることもあります。

+短命なコネクションには、大きな問題点が 2 つあります。新しいコネクションを確立するためにかなり時間がかかること、および下層の TCP コネクションは何度も使用するとき (ウォーム状態のコネクション) しかパフォーマンスが向上しないことです。これらの問題を緩和するため、 HTTP/1.1 より前から*持続的なコネクション*の概念が考えられてきました。あるいは、*キープアライブ接続*と呼ばれることもあります。 -

持続的なコネクションはしばらくの間開かれたままであり、いくつかのリクエストで再使用できます。よって新たな TCP ハンドシェイクにかかる時間を節約して、 TCP のパフォーマンス向上機能を活用します。このコネクションはいつまでも開かれたままにはなりません。アイドル状態のコネクションはしばらく後に閉じられます (サーバーは、コネクションを開き続けておくべき最小時間を決めるために {{HTTPHeader("Keep-Alive")}} ヘッダーを使用するでしょう)。

+持続的なコネクションはしばらくの間開かれたままであり、いくつかのリクエストで再使用できます。よって新たな TCP ハンドシェイクにかかる時間を節約して、 TCP のパフォーマンス向上機能を活用します。このコネクションはいつまでも開かれたままにはなりません。アイドル状態のコネクションはしばらく後に閉じられます (サーバーは、コネクションを開き続けておくべき最小時間を決めるために {{HTTPHeader("Keep-Alive")}} ヘッダーを使用するでしょう)。 -

持続的な接続には欠点もあります。アイドル状態でもサーバーのリソースを消費しており、高負荷状態では {{glossary("DoS attack", "DoS 攻撃")}} を招く可能性があります。この場合、持続的ではない接続はアイドル状態になるとすぐに閉じられますので、パフォーマンスが向上するでしょう。

+持続的な接続には欠点もあります。アイドル状態でもサーバーのリソースを消費しており、高負荷状態では {{glossary("DoS attack", "DoS 攻撃")}} を招く可能性があります。この場合、持続的ではない接続はアイドル状態になるとすぐに閉じられますので、パフォーマンスが向上するでしょう。 -

HTTP/1.0 の既定のコネクションは、持続的ではありません。 {{HTTPHeader("Connection")}} を close 以外の何か、通常は retry-after に設定すると、持続的になります。

+HTTP/1.0 の既定のコネクションは、持続的ではありません。 {{HTTPHeader("Connection")}} を `close` 以外の何か、通常は `retry-after` に設定すると、持続的になります。 -

HTTP/1.1 では既定で持続的であり、ヘッダーは不要になりました (ただし HTTP/1.0 へのフォールバックが必要な場合の防衛策として、通常はヘッダーを追加します。)。

+HTTP/1.1 では既定で持続的であり、ヘッダーは不要になりました (ただし HTTP/1.0 へのフォールバックが必要な場合の防衛策として、通常はヘッダーを追加します。)。 -

HTTP パイプライン

+## HTTP パイプライン -
-

HTTP パイプラインは、現代のブラウザーでは既定で有効化されていません。

+> **Note:** HTTP パイプラインは、現代のブラウザーでは既定で有効化されていません。 +> +> - 不具合がある[プロキシ](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7)がまだ一般的であり、これらは開発者が容易には予見あるいは診断できない、奇妙かつ一定しない挙動の原因になります。 +> - パイプラインの正しい実装は複雑です。転送するリソースのサイズ、効果的な [RTT](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%83%88%E3%83%AA%E3%83%83%E3%83%97%E3%82%BF%E3%82%A4%E3%83%A0) および帯域が、パイプラインによる改善に対して直接的な影響力を持ちます。これらがわからなければ、重要なメッセージがそうでないメッセージより遅れる場合があります。重要さの概念は、ページのレイアウト中に高まります!よって、 HTTP パイプラインはほとんどの場合でわずかな改善にしかなりません。 +> - パイプラインは、 [HOL](https://en.wikipedia.org/wiki/Head-of-line_blocking) の問題に左右されます。 +> +> これらの理由により、パイプラインはよりよいアルゴリズムである*多重化*に置き換えられました。こちらは HTTP/2 で使用されています。 -
    -
  • 不具合があるプロキシがまだ一般的であり、これらは開発者が容易には予見あるいは診断できない、奇妙かつ一定しない挙動の原因になります。
  • -
  • パイプラインの正しい実装は複雑です。転送するリソースのサイズ、効果的な RTT および帯域が、パイプラインによる改善に対して直接的な影響力を持ちます。これらがわからなければ、重要なメッセージがそうでないメッセージより遅れる場合があります。重要さの概念は、ページのレイアウト中に高まります!よって、 HTTP パイプラインはほとんどの場合でわずかな改善にしかなりません。
  • -
  • パイプラインは、 HOL の問題に左右されます。
  • -
+既定で、[HTTP](/ja/docs/Web/HTTP) リクエストは順次発行されます。次のリクエストは、現在のリクエストのレスポンスが到着してから発行されます。これはネットワークの遅延や帯域の制約を受けるため、次のリクエストがサーバーで*見える*ようになるまでにかなりの遅延が発生する可能性があります。 -

これらの理由により、パイプラインはよりよいアルゴリズムである多重化に置き換えられました。こちらは HTTP/2 で使用されています。

-
+パイプラインは連続したリクエストを同一の持続的なコネクションで、回答を待たずに処理します。これは、コネクションの遅延を回避します。理論上は、2 つのリクエストを同じ TCP メッセージに収めた場合でもパフォーマンスが向上するでしょう。典型的な [MSS](https://ja.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%82%BA) (最大セグメントサイズ) は複数のシンプルをリクエストを収めるには十分な大きさですが、 HTTP リクエストのサイズの需要は増え続けています。 -

既定で、HTTP リクエストは順次発行されます。次のリクエストは、現在のリクエストのレスポンスが到着してから発行されます。これはネットワークの遅延や帯域の制約を受けるため、次のリクエストがサーバーで見えるようになるまでにかなりの遅延が発生する可能性があります。

+パイプライン化できない HTTP リクエストもあります。 {{glossary("idempotent","べき等")}} なメソッドである {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}}, {{HTTPMethod("DELETE")}} だけが安全に再実行できます。これらは失敗しても、パイプラインの内容を再実行できます。 -

パイプラインは連続したリクエストを同一の持続的なコネクションで、回答を待たずに処理します。これは、コネクションの遅延を回避します。理論上は、2 つのリクエストを同じ TCP メッセージに収めた場合でもパフォーマンスが向上するでしょう。典型的な MSS (最大セグメントサイズ) は複数のシンプルをリクエストを収めるには十分な大きさですが、 HTTP リクエストのサイズの需要は増え続けています。

+現在、すべての HTTP/1.1 に準拠するプロキシやサーバーはパイプラインをサポートしているはずですが、実際は多くの制限があります。さまざまな理由で、現行のブラウザーはパイプラインを既定で有効化していません。 -

パイプライン化できない HTTP リクエストもあります。 {{glossary("idempotent","べき等")}} なメソッドである {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}}, {{HTTPMethod("DELETE")}} だけが安全に再実行できます。これらは失敗しても、パイプラインの内容を再実行できます。

+## ドメインシャーディング -

現在、すべての HTTP/1.1 に準拠するプロキシやサーバーはパイプラインをサポートしているはずですが、実際は多くの制限があります。さまざまな理由で、現行のブラウザーはパイプラインを既定で有効化していません。

+> **Note:** 特別に必要である場合を除き、この非推奨の技術は使用しないでください。代わりに、 HTTP/2 に切り替えてください。 HTTP/2 では、ドメインシャーディングは有用ではありません。 HTTP/2 のコネクションは、並行した優先度がないリクエストをより上手に扱うことができます。また、ドメインシャーディングはパフォーマンスに悪影響を与えます。ほとんどの HTTP/2 実装では、最終的にドメインシャーディングに戻る [connection coalescing](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/) と呼ばれる技術を使用しています。 -

ドメインシャーディング

+HTTP/1.x のコネクションはリクエストが整理されることもなく連続するため、十分な帯域を使用できない状況では最適化できません。その解決策として、ブラウザーーはそれぞれのドメインに対して複数のコネクションを開いて、リクエストを並行して送信します。既定では一度に 2 から 3 つのコネクションですが、現在は主に 6 つの並列したコネクションへ増えています。この数をさらに増やそうとすると、サーバー側で [DoS](/ja/docs/Glossary/DOS_attack) 防御が発動する危険性があります。 -
-

特別に必要である場合を除き、この非推奨の技術は使用しないでください。代わりに、 HTTP/2 に切り替えてください。 HTTP/2 では、ドメインシャーディングは有用ではありません。 HTTP/2 のコネクションは、並行した優先度がないリクエストをより上手に扱うことができます。また、ドメインシャーディングはパフォーマンスに悪影響を与えます。ほとんどの HTTP/2 実装では、最終的にドメインシャーディングに戻る connection coalescing と呼ばれる技術を使用しています。

-
+サーバーがウェブサイトやウェブアプリケーションのレスポンスを早くしたい場合、より多くのコネクションを開かせることが考えられます。例えば、すべてのリソースを同じドメイン `www.example.com` で持つのではなく、`www1.example.com`、`www2.example.com`、`www3.example.com` といった複数のドメインに分散させることができます。それぞれのドメインは*同じ*サーバーに名前解決されて、ウェブブラウザーーはドメインごとに 6 つのコネクションを開きます (この例では、コネクション数が 18 に増加します)。この技術は*ドメインシャーディング*と呼ばれます。 -

HTTP/1.x のコネクションはリクエストが整理されることもなく連続するため、十分な帯域を使用できない状況では最適化できません。その解決策として、ブラウザーーはそれぞれのドメインに対して複数のコネクションを開いて、リクエストを並行して送信します。既定では一度に 2 から 3 つのコネクションですが、現在は主に 6 つの並列したコネクションへ増えています。この数をさらに増やそうとすると、サーバー側で DoS 防御が発動する危険性があります。

+![](httpsharding.png) -

サーバーがウェブサイトやウェブアプリケーションのレスポンスを早くしたい場合、より多くのコネクションを開かせることが考えられます。例えば、すべてのリソースを同じドメイン www.example.com で持つのではなく、www1.example.comwww2.example.comwww3.example.com といった複数のドメインに分散させることができます。それぞれのドメインは同じサーバーに名前解決されて、ウェブブラウザーーはドメインごとに 6 つのコネクションを開きます (この例では、コネクション数が 18 に増加します)。この技術はドメインシャーディングと呼ばれます。

+## まとめ -

- -

まとめ

- -

改良されたコネクション管理により、 HTTP のパフォーマンスを大きく向上できます。 HTTP/1.1 や HTTP/1.0 では、持続的なコネクションを使用します。少なくともコネクションがアイドル状態になるまで、最良のパフォーマンスになります。一方、パイプラインの失敗は優れたコネクション管理モデルの設計を促し、それは HTTP/2 に導入されました。

+改良されたコネクション管理により、 HTTP のパフォーマンスを大きく向上できます。 HTTP/1.1 や HTTP/1.0 では、持続的なコネクションを使用します。少なくともコネクションがアイドル状態になるまで、最良のパフォーマンスになります。一方、パイプラインの失敗は優れたコネクション管理モデルの設計を促し、それは HTTP/2 に導入されました。 diff --git a/files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md b/files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md index d8f2cfd87ff530..bd1be29e28b0e7 100644 --- a/files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md +++ b/files/ja/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md @@ -15,33 +15,37 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS header 'Access-Control-Allow-Origin' does not match 'xyz'
+``` +Reason: CORS header 'Access-Control-Allow-Origin' does not match 'xyz' +``` -

何が悪いのか

+## 何が悪いのか -

リクエストを作成しているオリジンが、 {{HTTPHeader("Access-Control-Allow-Origin")}} ヘッダーによって許可されたオリジンのいずれにも一致しないことを表します。

+リクエストを作成しているオリジンが、 {{HTTPHeader("Access-Control-Allow-Origin")}} ヘッダーによって許可されたオリジンのいずれにも一致しないことを表します。 -

このエラーは、レスポンスに複数の Access-Control-Allow-Origin ヘッダーが含まれていると発生することがあります。

+このエラーは、レスポンスに複数の `Access-Control-Allow-Origin` ヘッダーが含まれていると発生することがあります。 -

コードが CORS リクエストを使用してアクセスしているサービスが管理下にあるのであれば、 Access-Control-Allow-Origin ヘッダーがそのアクセス元が含むように構成されていること、及びそのヘッダーがレスポンス内に1つしか含まれていないことを確認してください。ヘッダー自体はコンマ区切りで複数のオリジンを受け付けるので、新しいオリジンを追加することは難しくはありません。

+コードが CORS リクエストを使用してアクセスしているサービスが管理下にあるのであれば、 `Access-Control-Allow-Origin` ヘッダーがそのアクセス元が含むように構成されていること、及びそのヘッダーがレスポンス内に 1 つしか含まれていないことを確認してください。ヘッダー自体はコンマ区切りで複数のオリジンを受け付けるので、新しいオリジンを追加することは難しくはありません。 -

例えば Apache では、サーバー構成 (の中の <Directory>, <Location>, <Files>, <VirtualHost> のうち適切な節) に次のような行を追加してください。構成はふつう、 .conf ファイル又は (一般的な名前は httpd.confapache.conf) 又は .htaccess ファイルにあります。

+例えば Apache では、サーバー構成 (の中の ``, ``, ``, `` のうち適切な節) に次のような行を追加してください。構成はふつう、 `.conf` ファイル又は (一般的な名前は `httpd.conf` や `apache.conf`) 又は `.htaccess` ファイルにあります。 -
Header set Access-Control-Allow-Origin 'origin-list'
+``` +Header set Access-Control-Allow-Origin 'origin-list' +``` -

Nginx では、このヘッダーを設定するコマンドは次の通りです。

+Nginx では、このヘッダーを設定するコマンドは次の通りです。 -
add_header 'Access-Control-Allow-Origin' 'origin-list'
+``` +add_header 'Access-Control-Allow-Origin' 'origin-list' +``` -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [Enable CORS: I want to add CORS support to my server](https://enable-cors.org/server.html) diff --git a/files/ja/web/http/cors/errors/corsdidnotsucceed/index.md b/files/ja/web/http/cors/errors/corsdidnotsucceed/index.md index a679f1e32b3125..f733d24c6bb221 100644 --- a/files/ja/web/http/cors/errors/corsdidnotsucceed/index.md +++ b/files/ja/web/http/cors/errors/corsdidnotsucceed/index.md @@ -16,31 +16,29 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSDidNotSucceed --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS request did not succeed
+``` +Reason: CORS request did not succeed +``` -

何に失敗したか

+## 何に失敗したか -

CORS を使用した {{Glossary("HTTP")}} 要求が、ネットワークまたはプロトコルレベルで HTTP 接続に失敗したために失敗しました。エラーは CORS に直接関連したものではなく、ある種の基本的なネットワークエラーです。

+CORS を使用した {{Glossary("HTTP")}} 要求が、ネットワークまたはプロトコルレベルで HTTP 接続に失敗したために失敗しました。エラーは CORS に直接関連したものではなく、ある種の基本的なネットワークエラーです。 -

多くの場合、ブラウザーのプラグイン (例えば広告ブロッカーやプライバシー保護) がリクエストをブロックしたときに発生します。

+多くの場合、ブラウザーのプラグイン (例えば広告ブロッカーやプライバシー保護) がリクエストをブロックしたときに発生します。 -

その他の可能性のある原因は以下の通りです。

+その他の可能性のある原因は以下の通りです。 -
    -
  • 無効な資格情報を用いて https のリソースにアクセスしようとすると、このエラーが発生します。
  • -
  • http のリソースに https のオリジンのページからアクセスしようとした場合も、このエラーが発生します。
  • -
  • Firefox 68 では、 https のページが http://localhost へアクセスすることが禁止されていますが、これは Bug 1488740 で変更される可能性があります。
  • -
  • サーバーが ({{Glossary("Preflight request", "プリフライトリクエスト")}}に応答したのに) 実際のリクエストには応答しなかった場合。開発中の HTTP サービスが何もデータを返さずに異常停止した場合などが考えられます。
  • -
+- 無効な資格情報を用いて `https` のリソースにアクセスしようとすると、このエラーが発生します。 +- `http` のリソースに `https` のオリジンのページからアクセスしようとした場合も、このエラーが発生します。 +- Firefox 68 では、 `https` のページが `http://localhost` へアクセスすることが禁止されていますが、これは [Bug 1488740](https://bugzilla.mozilla.org/show_bug.cgi?id=1488740) で変更される可能性があります。 +- サーバーが ({{Glossary("Preflight request", "プリフライトリクエスト")}}に応答したのに) 実際のリクエストには応答しなかった場合。開発中の HTTP サービスが何もデータを返さずに異常停止した場合などが考えられます。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsdisabled/index.md b/files/ja/web/http/cors/errors/corsdisabled/index.md index c86d2c64c2de50..0358ea64bd7376 100644 --- a/files/ja/web/http/cors/errors/corsdisabled/index.md +++ b/files/ja/web/http/cors/errors/corsdisabled/index.md @@ -16,22 +16,22 @@ tags: - 無効 translation_of: Web/HTTP/CORS/Errors/CORSDisabled --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS disabled
+``` +Reason: CORS disabled +``` -

何に失敗したか

+## 何に失敗したか -

{{Glossary("CORS")}} を使う必要がある要求が行われましたが、ユーザーのブラウザーで CORS が無効になっています。これが発生した場合、ブラウザーの CORS を有効に戻す必要があります。

+{{Glossary("CORS")}} を使う必要がある要求が行われましたが、ユーザーのブラウザーで CORS が無効になっています。これが発生した場合、ブラウザーの CORS を有効に戻す必要があります。 -

Firefox では、 CORS を無効にする設定は content.cors.disable です。これを true に設定すると CORS が無効になり、この場合は常に、 CORS 要求は常にこのエラーで失敗します。

+Firefox では、 CORS を無効にする設定は `content.cors.disable` です。これを `true` に設定すると CORS が無効になり、この場合は常に、 CORS 要求は常にこのエラーで失敗します。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.md b/files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.md index db4ce8efe7ea88..55e5f112ac7f85 100644 --- a/files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.md +++ b/files/ja/web/http/cors/errors/corsexternalredirectnotallowed/index.md @@ -15,24 +15,24 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS request external redirect not allowed
+``` +Reason: CORS request external redirect not allowed +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("CORS")}} リクエストに対して、サーバーが元のリクエストとは異なるオリジンの URL へのリダイレクトを返答しましたが、これは CORS リクエストでは許可されていません。

+{{Glossary("CORS")}} リクエストに対して、サーバーが元のリクエストとは異なるオリジンの URL へのリダイレクトを返答しましたが、これは CORS リクエストでは許可されていません。 -

例えば、 https://service.tld/fetchdata のページがリクエストされ、 HTTP レスポンスが "301 Moved Permanently" 又は "307 Temporary Redirect" 又は "308 Permanent Redirect" で、 Locationhttps://anotherservice.net/getdata であった場合、この理由で CORS リクエストが失敗します。

+例えば、 `https://service.tld/fetchdata` のページがリクエストされ、 HTTP レスポンスが "301 Moved Permanently" 又は "307 Temporary Redirect" 又は "308 Permanent Redirect" で、 `Location` が `https://anotherservice.net/getdata` であった場合、この理由で CORS リクエストが失敗します。 -

問題を修正するには、リダイレクトによって報告された新しい URL を使用するようにコードを更新し、リダイレクトを回避します。

+問題を修正するには、リダイレクトによって報告された新しい URL を使用するようにコードを更新し、リダイレクトを回避します。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsinvalidallowheader/index.md b/files/ja/web/http/cors/errors/corsinvalidallowheader/index.md index 2e8b34980dca0e..ae4d76ff7aa930 100644 --- a/files/ja/web/http/cors/errors/corsinvalidallowheader/index.md +++ b/files/ja/web/http/cors/errors/corsinvalidallowheader/index.md @@ -15,25 +15,25 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSInvalidAllowHeader --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’
+``` +Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’ +``` -

何に失敗したか

+## 何に失敗したか -

サーバーから送信された {{Glossary("CORS")}} 要求への応答に、一つ以上の無効なヘッダー名を含んだ {{HTTPHeader("Access-Control-Allow-Headers")}} ヘッダーが含まれています。

+サーバーから送信された {{Glossary("CORS")}} 要求への応答に、一つ以上の無効なヘッダー名を含んだ {{HTTPHeader("Access-Control-Allow-Headers")}} ヘッダーが含まれています。 -

Access-Control-Allow-Headers ヘッダーは、{{Glossary("preflight request", "プリフライト要求")}}への応答の中でサーバーから送信されます。これはどの HTTP ヘッダーが CORS 要求で許可されているかをクライアントに知らせます。クライアントの{{Glossary("user agent", "ユーザーエージェント")}}が、このヘッダーで示されたコンマで区切られた値の中から理解できないヘッダーがあれば、このエラーが発生します。

+`Access-Control-Allow-Headers` ヘッダーは、{{Glossary("preflight request", "プリフライト要求")}}への応答の中でサーバーから送信されます。これはどの [HTTP ヘッダー](/ja/docs/Web/HTTP/Headers)が CORS 要求で許可されているかをクライアントに知らせます。クライアントの{{Glossary("user agent", "ユーザーエージェント")}}が、このヘッダーで示されたコンマで区切られた値の中から理解できないヘッダーがあれば、このエラーが発生します。 -

これはほとんどはサーバー側でしか修正できない問題であり、サーバーの構成を変更して、 Access-Control-Allow-Headers ヘッダーから無効又は未知のヘッダー名を送らないようにします。クライアントで使用しているユーザーエージェントの HTTP ライブラリが最新版であるかどうかをチェックするのも良いかもしれません。

+これはほとんどはサーバー側でしか修正できない問題であり、サーバーの構成を変更して、 `Access-Control-Allow-Headers` ヘッダーから無効又は未知のヘッダー名を送らないようにします。クライアントで使用しているユーザーエージェントの HTTP ライブラリが最新版であるかどうかをチェックするのも良いかもしれません。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [HTTP ヘッダー](/ja/docs/Web/HTTP/Headers) diff --git a/files/ja/web/http/cors/errors/corsinvalidallowmethod/index.md b/files/ja/web/http/cors/errors/corsinvalidallowmethod/index.md index 6e40442974bf50..fd5e4c736e3389 100644 --- a/files/ja/web/http/cors/errors/corsinvalidallowmethod/index.md +++ b/files/ja/web/http/cors/errors/corsinvalidallowmethod/index.md @@ -12,25 +12,25 @@ tags: - メッセージ translation_of: Web/HTTP/CORS/Errors/CORSInvalidAllowMethod --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Methods’
+``` +Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Methods’ +``` -

何に失敗したか

+## 何に失敗したか -

サーバーから送信された {{Glossary("CORS")}} 要求への応答に、一つ以上の無効なメソッド名を含んだ {{HTTPHeader("Access-Control-Allow-Methods")}} ヘッダーが含まれています。

+サーバーから送信された {{Glossary("CORS")}} 要求への応答に、一つ以上の無効なメソッド名を含んだ {{HTTPHeader("Access-Control-Allow-Methods")}} ヘッダーが含まれています。 -

Access-Control-Allow-Methods ヘッダーは、どの HTTP 要求メソッドが CORS 要求に対応しているかをクライアントに知らせます。ヘッダーの値は、{{HTTPMethod("GET")}}, {{HTTPMethod("POST")}}, {{HTTPMethod("HEAD")}} のような HTTP メソッド名をコンマで区切った文字列です。クライアントの{{Glossary("user agent", "ユーザーエージェント")}}が指定された値を理解できない場合、このエラーが発生します。

+`Access-Control-Allow-Methods` ヘッダーは、どの [HTTP 要求メソッド](/ja/docs/Web/HTTP/Methods)が CORS 要求に対応しているかをクライアントに知らせます。ヘッダーの値は、{{HTTPMethod("GET")}}, {{HTTPMethod("POST")}}, {{HTTPMethod("HEAD")}} のような HTTP メソッド名をコンマで区切った文字列です。クライアントの{{Glossary("user agent", "ユーザーエージェント")}}が指定された値を理解できない場合、このエラーが発生します。 -

これはほとんどはサーバー側でしか修正できない問題であり、サーバーの構成を変更して、 Access-Control-Allow-Methods ヘッダーから無効又は未知のメソッド名を送らないようにします。クライアントで使用しているユーザーエージェントの HTTP ライブラリが最新版であるかどうかをチェックするのも良いかもしれません。

+これはほとんどはサーバー側でしか修正できない問題であり、サーバーの構成を変更して、 `Access-Control-Allow-Methods` ヘッダーから無効又は未知のメソッド名を送らないようにします。クライアントで使用しているユーザーエージェントの HTTP ライブラリが最新版であるかどうかをチェックするのも良いかもしれません。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [HTTP ヘッダー](/ja/docs/Web/HTTP/Headers) diff --git a/files/ja/web/http/cors/errors/corsmethodnotfound/index.md b/files/ja/web/http/cors/errors/corsmethodnotfound/index.md index bb624fd0679171..4be56a15e743b5 100644 --- a/files/ja/web/http/cors/errors/corsmethodnotfound/index.md +++ b/files/ja/web/http/cors/errors/corsmethodnotfound/index.md @@ -15,31 +15,33 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSMethodNotFound --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: Did not find method in CORS header ‘Access-Control-Allow-Methods’
+``` +Reason: Did not find method in CORS header ‘Access-Control-Allow-Methods’ +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("CORS")}} リクエストで使われている HTTP メソッドが、レスポンスの {{HTTPHeader("Access-Control-Allow-Methods")}} ヘッダーで指定されたメソッドの一覧に含まれていません。このヘッダーは、 CORS を使用してリクエストで指定された URL にアクセスする時に使われる HTTP メソッドのコンマ区切りのリストを指定します。リクエストが他のメソッドを使用していると、このエラーが発生します。

+{{Glossary("CORS")}} リクエストで使われている HTTP メソッドが、レスポンスの {{HTTPHeader("Access-Control-Allow-Methods")}} ヘッダーで指定されたメソッドの一覧に含まれていません。このヘッダーは、 CORS を使用してリクエストで指定された URL にアクセスする時に使われる HTTP メソッドのコンマ区切りのリストを指定します。リクエストが他のメソッドを使用していると、このエラーが発生します。 -

例えば、レスポンスに以下の行が含まれていると、

+例えば、レスポンスに以下の行が含まれていると、 -
Access-Control-Allow-Methods: GET,HEAD,POST
+``` +Access-Control-Allow-Methods: GET,HEAD,POST +``` -

{{HTTPMethod("PUT")}} リクエストを使おうとすると、リクエストが失敗し、このエラーが発生します。

+{{HTTPMethod("PUT")}} リクエストを使おうとすると、リクエストが失敗し、このエラーが発生します。 -

コードからサービスにアクセスするときは、許可された HTTP メソッドのみを使用するように確認してください。

+コードからサービスにアクセスするときは、許可された HTTP メソッドのみを使用するように確認してください。 -

メモ: サーバーが Access-Control-Allow-methods ヘッダーに理解できない又は未定義のメソッド名を含めた場合、別なエラー Reason: invalid token ‘xyz' in CORS header ‘Access-Control-Allow-Methods’ が発生します。

+**メモ:** サーバーが `Access-Control-Allow-methods` ヘッダーに理解できない又は未定義のメソッド名を含めた場合、別なエラー [`Reason: invalid token ‘xyz' in CORS header ‘Access-Control-Allow-Methods’`](/ja/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod) が発生します。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [HTTP リクエストメソッド](/ja/docs/Web/HTTP/Methods) diff --git a/files/ja/web/http/cors/errors/corsmissingallowcredentials/index.md b/files/ja/web/http/cors/errors/corsmissingallowcredentials/index.md index a799f9093a163d..b3e79e5d557af5 100644 --- a/files/ja/web/http/cors/errors/corsmissingallowcredentials/index.md +++ b/files/ja/web/http/cors/errors/corsmissingallowcredentials/index.md @@ -15,30 +15,28 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSMIssingAllowCredentials --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: expected ‘true’ in CORS header ‘Access-Control-Allow-Credentials’
+``` +Reason: expected ‘true’ in CORS header ‘Access-Control-Allow-Credentials’ +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("CORS")}} リクエストが認証情報を使用してサーバーの許可を要求されていますが、サーバーの {{HTTPHeader("Access-Control-Allow-Credentials")}} ヘッダーの値が true に設定されておらず、利用できるようになっていません。

+{{Glossary("CORS")}} リクエストが認証情報を使用してサーバーの許可を要求されていますが、サーバーの {{HTTPHeader("Access-Control-Allow-Credentials")}} ヘッダーの値が `true` に設定されておらず、利用できるようになっていません。 -

この問題をクライアント側で解決するには、コードを修正して認証情報を使用せずにリクエストするようにしてください。

+この問題をクライアント側で解決するには、コードを修正して認証情報を使用せずにリクエストするようにしてください。 -
    -
  • リクエストが {{domxref("XMLHttpRequest")}} を用いて発行されている場合は、 {{domxref("XMLHttpRequest.withCredentials", "withCredentials")}} に true を設定しないよう確認してください。
  • -
  • Server-sent event を使用している場合は、 {{domxref("EventSource.withCredentials")}} が false (既定値) であることを確認してください。
  • -
  • Fetch API を使用している場合は、 {{domxref("Request.credentials")}} が "omit" であることを確認してください。
  • -
+- リクエストが {{domxref("XMLHttpRequest")}} を用いて発行されている場合は、 {{domxref("XMLHttpRequest.withCredentials", "withCredentials")}} に `true` を設定しないよう確認してください。 +- [Server-sent event](/ja/docs/Web/API/Server-sent_events) を使用している場合は、 {{domxref("EventSource.withCredentials")}} が `false` (既定値) であることを確認してください。 +- [Fetch API](/ja/docs/Web/API/Fetch_API) を使用している場合は、 {{domxref("Request.credentials")}} が `"omit"` であることを確認してください。 -

サーバーの構成を変更してこのエラーを除去するには、サーバーの構成で Access-Control-Allow-Credentials ヘッダーの値に true を設定するよう調整してください。

+サーバーの構成を変更してこのエラーを除去するには、サーバーの構成で `Access-Control-Allow-Credentials` ヘッダーの値に `true` を設定するよう調整してください。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.md b/files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.md index 42e8f25f2f90ab..695997610aa0e4 100644 --- a/files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.md +++ b/files/ja/web/http/cors/errors/corsmissingallowheaderfrompreflight/index.md @@ -17,23 +17,23 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: missing token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel
+``` +Reason: missing token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel +``` -

何に失敗したのか

+## 何に失敗したのか -

Access-Control-Allow-Headers ヘッダーがサーバーから送信され、どのヘッダーが {{Glossary("CORS")}} 要求に対応しているかを知らせます。 Access-Control-Allow-Headers の値はコンマ区切りのヘッダー名のリストで、 "X-Custom-Information" やその他の標準的かつ基本的ではないヘッダー名 (常に許可されているもの) を記述します。

+`Access-Control-Allow-Headers` ヘッダーがサーバーから送信され、どのヘッダーが {{Glossary("CORS")}} 要求に対応しているかを知らせます。 `Access-Control-Allow-Headers` の値はコンマ区切りのヘッダー名のリストで、 "`X-Custom-Information`" やその他の標準的かつ基本的ではないヘッダー名 (常に許可されているもの) を記述します。 -

このエラーは明確に許可されていないヘッダー (すなわち、サーバーから送られる Access-Control-Allow-Headers ヘッダーで指定されたリストに含まれていないもの) のプリフライトリクエストを行おうとしたときに発生します。これを修正するには、サーバーが指定されたヘッダーを許可するように更新するか、このヘッダーを使用しないようにする必要があります。

+このエラーは明確に許可されていないヘッダー (すなわち、サーバーから送られる `Access-Control-Allow-Headers` ヘッダーで指定されたリストに含まれていないもの) のプリフライトリクエストを行おうとしたときに発生します。これを修正するには、サーバーが指定されたヘッダーを許可するように更新するか、このヘッダーを使用しないようにする必要があります。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [HTTP ヘッダー](/ja/docs/Web/HTTP/Headers) diff --git a/files/ja/web/http/cors/errors/corsmissingalloworigin/index.md b/files/ja/web/http/cors/errors/corsmissingalloworigin/index.md index 80e851c0dd4d16..4738e3dfe7af81 100644 --- a/files/ja/web/http/cors/errors/corsmissingalloworigin/index.md +++ b/files/ja/web/http/cors/errors/corsmissingalloworigin/index.md @@ -15,44 +15,50 @@ tags: - troubleshooting translation_of: Web/HTTP/CORS/Errors/CORSMissingAllowOrigin --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS header 'Access-Control-Allow-Origin' missing
+``` +Reason: CORS header 'Access-Control-Allow-Origin' missing +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("CORS")}} リクエストへのレスポンスが、リソースが現在のオリジン内で操作しているコンテンツによってアクセスできるかどうかを判断するために使われる、必須の {{HTTPHeader("Access-Control-Allow-Origin")}} ヘッダーを欠いています。

+{{Glossary("CORS")}} リクエストへのレスポンスが、リソースが現在のオリジン内で操作しているコンテンツによってアクセスできるかどうかを判断するために使われる、必須の {{HTTPHeader("Access-Control-Allow-Origin")}} ヘッダーを欠いています。 -

サーバーを自分で制御できる場合は、要求しているサイトのオリジンを Access-Control-Allow-Origin ヘッダーの値に追加して、アクセスが許可されているドメインの一覧に追加してください。

+サーバーを自分で制御できる場合は、要求しているサイトのオリジンを `Access-Control-Allow-Origin` ヘッダーの値に追加して、アクセスが許可されているドメインの一覧に追加してください。 -

例えば、 https://amazing.site のサイトが CORS を使用したリソースにアクセスできるよう許可するためには、ヘッダーを以下のようにしてください。

+例えば、 https\://amazing.site のサイトが CORS を使用したリソースにアクセスできるよう許可するためには、ヘッダーを以下のようにしてください。 -
Access-Control-Allow-Origin: https://amazing.site
+``` +Access-Control-Allow-Origin: https://amazing.site +``` -

* を使用することで、あらゆるサイトにアクセスを許可するようサイトを構成することもできます。これは公開 API にのみ使用してください。非公開の API には * を使用するべきではなく、代わりに具体的なドメインやドメインの一覧を設定してください。加えて、ワイルドカードは {{htmlattrxref("crossorigin")}} 属性が anonymous に設定された要求にのみ動作し、リクエストでは Cookie のような資格情報の送信を抑制します。

+`*` を使用することで、あらゆるサイトにアクセスを許可するようサイトを構成することもできます。これは公開 API にのみ使用してください。非公開の API には `*` を使用するべきではなく、代わりに具体的なドメインやドメインの一覧を設定してください。加えて、ワイルドカードは {{htmlattrxref("crossorigin")}} 属性が `anonymous` に設定された要求にのみ動作し、リクエストでは Cookie のような資格情報の送信を抑制します。 -
Access-Control-Allow-Origin: *
+``` +Access-Control-Allow-Origin: * +``` -
-

警告: ワイルドカードを使用して、非公開の API へのアクセスをすべてのサイトに許可することは、悪い考えです。

-
+> **Warning:** **警告:** ワイルドカードを使用して、非公開の API へのアクセスをすべてのサイトに許可することは、悪い考えです。 -

何らかのサイトが CORS リクエストを * ワイルドカードを使用することなく (たとえば資格情報を有効にする場合) 利用できるようにするには、サーバーにリクエストの Origin ヘッダーの値を読み取り、その値を Access-Control-Allow-Origin に設定することに加えて、一部のヘッダーがオリジンに応じて動的に設定されることを示すために Vary: Origin ヘッダーを設定する必要があります。

+何らかのサイトが CORS リクエストを `*` ワイルドカードを使用すること*なく* (たとえば資格情報を有効にする場合) 利用できるようにするには、サーバーにリクエストの `Origin` ヘッダーの値を読み取り、その値を `Access-Control-Allow-Origin` に設定することに加えて、一部のヘッダーがオリジンに応じて動的に設定されることを示すために `Vary: Origin` ヘッダーを設定する必要があります。 -

例えば Apache では、サーバー構成 (の中の <Directory>, <Location>, <Files>, <VirtualHost> のうち適切な節) に次のような行を追加してください。構成はふつう、 .conf ファイル又は (一般的な名前は httpd.confapache.conf) 又は .htaccess ファイルにあります。

+例えば Apache では、サーバー構成 (の中の ``, ``, ``, `` のうち適切な節) に次のような行を追加してください。構成はふつう、 `.conf` ファイル又は (一般的な名前は `httpd.conf` や `apache.conf`) 又は `.htaccess` ファイルにあります。 -
Header set Access-Control-Allow-Origin 'origin-list'
+``` +Header set Access-Control-Allow-Origin 'origin-list' +``` -

Nginx では、このヘッダーを設定するコマンドは次の通りです。

+Nginx では、このヘッダーを設定するコマンドは次の通りです。 -
add_header 'Access-Control-Allow-Origin' 'origin-list'
+``` +add_header 'Access-Control-Allow-Origin' 'origin-list' +``` -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.md b/files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.md index 70d3c0e7fb6b68..c72619e1866ff9 100644 --- a/files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.md +++ b/files/ja/web/http/cors/errors/corsmultiplealloworiginnotallowed/index.md @@ -15,23 +15,23 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: Multiple CORS header ‘Access-Control-Allow-Origin’ not allowed
+``` +Reason: Multiple CORS header ‘Access-Control-Allow-Origin’ not allowed +``` -

何が悪いのか

+## 何が悪いのか -

複数の {{HTTPHeader("Access-Control-Allow-Origin")}} ヘッダーがサーバから送信されました。これは許可されていません。

+複数の {{HTTPHeader("Access-Control-Allow-Origin")}} ヘッダーがサーバから送信されました。これは許可されていません。 -

サーバーへのアクセス権があるのであれば、実装を変更して Access-Control-Allow-Origin ヘッダーで{{Glossary("origin", "オリジン")}}を返すようにしてください。ブラウザーは単一のオリジンか null のどちらかの値しか受け付けないので、オリジンのリストを送り返すことはできません。

+サーバーへのアクセス権があるのであれば、実装を変更して `Access-Control-Allow-Origin` ヘッダーで{{Glossary("origin", "オリジン")}}を返すようにしてください。ブラウザーは単一のオリジンか null のどちらかの値しか受け付けないので、オリジンのリストを送り返すことはできません。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [Enable CORS: I want to add CORS support to my server](https://enable-cors.org/server.html) diff --git a/files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.md b/files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.md index efa77d5a109587..ede823cc83dbbf 100644 --- a/files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.md +++ b/files/ja/web/http/cors/errors/corsnotsupportingcredentials/index.md @@ -17,30 +17,28 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSNotSupportingCredentials --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’
+``` +Reason: Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’ +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("CORS")}} リクエストが認証フラグ付きで試みられましたが、サーバーが {{HTTPHeader("Access-Control-Allow-Origin")}} の値としてワイルドカード ("*") を使用して構成されており、認証情報を利用することが許可されていません。

+{{Glossary("CORS")}} リクエストが認証フラグ付きで試みられましたが、サーバーが {{HTTPHeader("Access-Control-Allow-Origin")}} の値としてワイルドカード (`"*"`) を使用して構成されており、認証情報を利用することが許可されていません。 -

この問題をクライアント側で修正するには、 CORS リクエストを発行する際に認証フラグの値を確実に false にするだけです。

+この問題をクライアント側で修正するには、 CORS リクエストを発行する際に認証フラグの値を確実に `false` にするだけです。 -
    -
  • リクエストが {{domxref("XMLHttpRequest")}} を用いて発行されている場合は、 {{domxref("XMLHttpRequest.withCredentials", "withCredentials")}} に true を設定しないよう確認してください。
  • -
  • Server-sent event を使用している場合は、 {{domxref("EventSource.withCredentials")}} が false (既定値) であることを確認してください。
  • -
  • Fetch API を使用している場合は、 {{domxref("Request.credentials")}} が "omit" であることを確認してください。
  • -
+- リクエストが {{domxref("XMLHttpRequest")}} を用いて発行されている場合は、 {{domxref("XMLHttpRequest.withCredentials", "withCredentials")}} に `true` を設定しないよう確認してください。 +- [Server-sent event](/ja/docs/Web/API/Server-sent_events) を使用している場合は、 {{domxref("EventSource.withCredentials")}} が `false` (既定値) であることを確認してください。 +- [Fetch API](/ja/docs/Web/API/Fetch_API) を使用している場合は、 {{domxref("Request.credentials")}} が `"omit"` であることを確認してください。 -

サーバーの動作を調整する必要がある場合は、 Access-Control-Allow-Origin の画像を変更して、クライアントが読み込まれたオリジンへのアクセスを許可する必要があるでしょう。

+サーバーの動作を調整する必要がある場合は、 `Access-Control-Allow-Origin` の画像を変更して、クライアントが読み込まれたオリジンへのアクセスを許可する必要があるでしょう。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsoriginheadernotadded/index.md b/files/ja/web/http/cors/errors/corsoriginheadernotadded/index.md index adf59fff6b3a89..7c38993e1294ad 100644 --- a/files/ja/web/http/cors/errors/corsoriginheadernotadded/index.md +++ b/files/ja/web/http/cors/errors/corsoriginheadernotadded/index.md @@ -15,22 +15,22 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS header ‘Origin’ cannot be added
+``` +Reason: CORS header ‘Origin’ cannot be added +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("user agent", "ユーザーエージェント")}}が必要な {{HTTPHeader("Origin")}} を {{Glossary("HTTP")}} リクエストに追加することができませんでした。すべての CORS リクエストは Origin ヘッダーを含んでいなければなりません。

+{{Glossary("user agent", "ユーザーエージェント")}}が必要な {{HTTPHeader("Origin")}} を {{Glossary("HTTP")}} リクエストに追加することができませんでした。すべての CORS リクエストは `Origin` ヘッダーを含んでいなければなりません。 -

これは例えば、 JavaScript のコードが複数のドメインのコンテンツにアクセスできるよう高い権限で実行されている場合などに起こることがあります。

+これは例えば、 JavaScript のコードが複数のドメインのコンテンツにアクセスできるよう高い権限で実行されている場合などに起こることがあります。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.md b/files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.md index 830e1e9ae3cd0b..e45ec6fbb7cb53 100644 --- a/files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.md +++ b/files/ja/web/http/cors/errors/corspreflightdidnotsucceed/index.md @@ -15,25 +15,23 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS preflight channel did not succeed
+``` +Reason: CORS preflight channel did not succeed +``` -

何に失敗したか

+## 何に失敗したか -

{{Glossary("CORS")}} の要求がプリフライトを必要としていますが、プリフライトが実行できませんでした。プロフライトが失敗したと理由として考えられることは複数あります。

+{{Glossary("CORS")}} の要求がプリフライトを必要としていますが、プリフライトが実行できませんでした。プロフライトが失敗したと理由として考えられることは複数あります。 -
    -
  • すでにサイト間の要求でプリフライトが行われており、プリフライトを再び行うことが許可されていない。コードを確認して、一つのコネクションで一度だけプリフライトを行うようにしてください。
  • -
  • プリフライト要求は単に通常のネットワークエラーの類で失敗した。
  • -
+- すでにサイト間の要求でプリフライトが行われており、プリフライトを再び行うことが許可されていない。コードを確認して、一つのコネクションで一度だけプリフライトを行うようにしてください。 +- プリフライト要求は単に通常のネットワークエラーの類で失敗した。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) diff --git a/files/ja/web/http/cors/errors/corsrequestnothttp/index.md b/files/ja/web/http/cors/errors/corsrequestnothttp/index.md index 33105d9d22c71e..8c3fb256ab4b6b 100644 --- a/files/ja/web/http/cors/errors/corsrequestnothttp/index.md +++ b/files/ja/web/http/cors/errors/corsrequestnothttp/index.md @@ -14,29 +14,29 @@ tags: - 理由 translation_of: Web/HTTP/CORS/Errors/CORSRequestNotHttp --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

理由

+## 理由 -
Reason: CORS request not HTTP
+``` +Reason: CORS request not HTTP +``` -

何が悪いのか

+## 何が悪いのか -

{{Glossary("CORS")}} リクエストは URL スキームが HTTPS の場合のみ利用できますが、リクエストで指定された URL が異なる種類のものです。これは、ローカルファイルを指定する URL が、 file:/// の URL を使用している場合によく起こります。

+{{Glossary("CORS")}} リクエストは URL スキームが HTTPS の場合のみ利用できますが、リクエストで指定された URL が異なる種類のものです。これは、ローカルファイルを指定する URL が、 `file:///` の URL を使用している場合によく起こります。 -

この問題を修正するには、単純に CORS に関するリクエストを発行する際に HTTPS の URL を使用するようにしてください。

+この問題を修正するには、単純に CORS に関するリクエストを発行する際に HTTPS の URL を使用するようにしてください。 -

Firefox 68におけるローカルファイルセキュリティ

+### Firefox 68 におけるローカルファイルセキュリティ -

Firefox 67以前ではユーザが file:/// URIを用いてページを開いたとき、ページのオリジンはその開かれたページのあるディレクトリとして定義されていました。同じディレクトリやそのサブディレクトリにあるリソースは、CORS同一オリジンルールを適用する際には同一オリジンとみなされていました。

+Firefox 67 以前ではユーザが `file:///` URI を用いてページを開いたとき、ページのオリジンはその開かれたページのあるディレクトリとして定義されていました。同じディレクトリやそのサブディレクトリにあるリソースは、CORS 同一オリジンルールを適用する際には同一オリジンとみなされていました。 -

Firefox 68以降では CVE-2019-11730 の対策として、 file:/// URIを用いて開かれたページのオリジンは、それだけのものとして定義されます。つまり、同じディレクトリやそのサブディレクトリにあるリソースは、CORS同一オリジンルールを満たさなくなりました。この新たな振る舞いは、privacy.file_unique_origin 設定を用いてデフォルトで有効になっています。

+Firefox 68 以降では [CVE-2019-11730 ](https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730)の対策として、 `file:///` URI を用いて開かれたページのオリジンは、それだけのものとして定義されます。つまり、同じディレクトリやそのサブディレクトリにあるリソースは、CORS 同一オリジンルールを満たさなくなりました。この新たな振る舞いは、`privacy.file_unique_origin` 設定を用いてデフォルトで有効になっています。 -

関連情報

+## 関連情報 - +- [CORS のエラー](/ja/docs/Web/HTTP/CORS/Errors) +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [URL とは](/ja/docs/Learn/Common_questions/What_is_a_URL) diff --git a/files/ja/web/http/cors/errors/index.md b/files/ja/web/http/cors/errors/index.md index c7b4ce9fc32b26..79b131a5df4d9d 100644 --- a/files/ja/web/http/cors/errors/index.md +++ b/files/ja/web/http/cors/errors/index.md @@ -13,62 +13,56 @@ tags: - 同一オリジン translation_of: Web/HTTP/CORS/Errors --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

オリジン間リソース共有 (Cross-Origin Resource Sharing) ({{Glossary("CORS")}}) は、サーバーが同一オリジンポリシーを緩和することができる標準です。例えば、サイトが埋め込み可能なサービスを提供する場合、このような制約を緩和する必要があるかもしれません。このような CORS の構成の設定は必ずしも簡単ではなく、いくらか冒険的です。これらのページでは、よくある CORS のエラーメッセージと解決方法を調査します。

+[オリジン間リソース共有](/ja/docs/Web/HTTP/CORS) (Cross-Origin Resource Sharing) ({{Glossary("CORS")}}) は、サーバーが[同一オリジンポリシー](/ja/docs/Web/Security/Same-origin_policy)を緩和することができる標準です。例えば、サイトが埋め込み可能なサービスを提供する場合、このような制約を緩和する必要があるかもしれません。このような CORS の構成の設定は必ずしも簡単ではなく、いくらか冒険的です。これらのページでは、よくある CORS のエラーメッセージと解決方法を調査します。 -

CORS 構成が正しく設定されていないと、ブラウザーコンソールには "Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at $somesite" のようなエラーを表示して、リクエストが CORS のセキュリティ規則を侵害しているためにブロックされたことを示します。これは必ずしも設定ミスとは限りません。実際には、ユーザーのウェブアプリケーションおよびリモートの外部サービスからのリクエストが、意図的に許可されていない場合もあります。しかし、ただし、エンドポイントが使用可能である場合、成功するためにはデバッグが必要です。

+CORS 構成が正しく設定されていないと、ブラウザーコンソールには `"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at $somesite"` のようなエラーを表示して、リクエストが CORS のセキュリティ規則を侵害しているためにブロックされたことを示します。これは必ずしも設定ミスとは限りません。実際には、ユーザーのウェブアプリケーションおよびリモートの外部サービスからのリクエストが、意図的に許可されていない場合もあります。しかし、ただし、エンドポイントが使用可能である場合、成功するためにはデバッグが必要です。 -

問題の識別

+## 問題の識別 -

CORS の構成に関する問題を理解するために、どのリクエストが、なぜ失敗したのかを調べる必要があります。そのためには以下の手順が役立つかもしれません。

+CORS の構成に関する問題を理解するために、どのリクエストが、なぜ失敗したのかを調べる必要があります。そのためには以下の手順が役立つかもしれません。 -
    -
  1. 問題のウェブサイトやウェブアプリを実行し、開発者ツールを開く。
  2. -
  3. 失敗するトランザクションを再現してみて、コンソールで CORS 違反エラーメッセージが表示されるかを調べる。おそらく次のように見える。
  4. -
+1. 問題のウェブサイトやウェブアプリを実行し、[開発者ツール](/ja/docs/Tools)を開く。 +2. 失敗するトランザクションを再現してみて、[コンソール](/ja/docs/Tools/Web_Console)で CORS 違反エラーメッセージが表示されるかを調べる。おそらく次のように見える。 -

CORS エラーを表示している Firefox コンソール

+![CORS エラーを表示している Firefox コンソール](https://mdn.mozillademos.org/files/16050/cors-error2.png) -

エラーメッセージのテキストは以下のようなものになるでしょう。

+エラーメッセージのテキストは以下のようなものになるでしょう。 -
Cross-Origin Request Blocked: The Same Origin Policy disallows
-reading the remote resource at https://some-url-here. (Reason:
-additional information here).
+``` +Cross-Origin Request Blocked: The Same Origin Policy disallows +reading the remote resource at https://some-url-here. (Reason: +additional information here). +``` -
-

メモ: セキュリティ上の理由から、 CORS リクエストで何を失敗したかについては JavaScript コードからは特定できません。コードから分かることは、エラーが発生したことだけです。何を失敗したかを特定するための唯一の方法は、詳細をブラウザーのコンソールで見ることです。

-
+> **Note:** **メモ:** セキュリティ上の理由から、 CORS リクエストで何を失敗したかについては _JavaScript コードからは特定できません_。コードから分かることは、エラーが発生したことだけです。何を失敗したかを特定するための唯一の方法は、詳細をブラウザーのコンソールで見ることです。 -

CORS のエラーメッセージ

+## CORS のエラーメッセージ -

Firefox のコンソールは、 CORS のためにリクエストが失敗した場合はコンソールにメッセージを表示します。エラーテキストには、何が失敗したのかの分析が追加された「reason」の部分があります。 reason のメッセージは以下の通りです。メッセージをクリックすると、エラーをより詳細に説明し、可能な解決方法を提供する記事を開くことができます。

+Firefox のコンソールは、 CORS のためにリクエストが失敗した場合はコンソールにメッセージを表示します。エラーテキストには、何が失敗したのかの分析が追加された「reason」の部分があります。 reason のメッセージは以下の通りです。メッセージをクリックすると、エラーをより詳細に説明し、可能な解決方法を提供する記事を開くことができます。 - +- [Reason: CORS disabled](/ja/docs/Web/HTTP/CORS/Errors/CORSDisabled) +- [Reason: CORS request did not succeed](/ja/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed) +- [Reason: CORS header ‘Origin’ cannot be added](/ja/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded) +- [Reason: CORS request external redirect not allowed](/ja/docs/Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed) +- [Reason: CORS request not http](/ja/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp) +- [Reason: CORS header ‘Access-Control-Allow-Origin’ missing](/ja/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin) +- [Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘xyz’](/ja/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin) +- [Reason: Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘\*’](/ja/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials) +- [Reason: Did not find method in CORS header ‘Access-Control-Allow-Methods’](/ja/docs/Web/HTTP/CORS/Errors/CORSMethodNotFound) +- [Reason: expected ‘true’ in CORS header ‘Access-Control-Allow-Credentials’](/ja/docs/Web/HTTP/CORS/Errors/CORSMissingAllowCredentials) +- [Reason: CORS preflight channel did not succeed](/ja/docs/Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed) +- [Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Methods’](/ja/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod) +- [Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’](/ja/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowHeader) +- [Reason: missing token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel](/ja/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight) +- [Reason: Multiple CORS header ‘Access-Control-Allow-Origin’ not allowed](/ja/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed) -

関連情報

+## 関連情報 - +- 用語集: {{Glossary("CORS")}} +- [CORS 入門](/ja/docs/Web/HTTP/CORS) +- [サーバー側 CORS 設定](/ja/docs/Web/HTTP/Server-Side_Access_Control) +- [CORS 有効化の画像](/ja/docs/Web/HTML/CORS_enabled_image) +- [CORS の設定属性](/ja/docs/Web/HTML/CORS_settings_attributes) +- – CORS リクエストの試験ページ diff --git a/files/ja/web/http/cross-origin_resource_policy_(corp)/index.md b/files/ja/web/http/cross-origin_resource_policy_(corp)/index.md index 655fb805f3c8d7..f4d4f61067d958 100644 --- a/files/ja/web/http/cross-origin_resource_policy_(corp)/index.md +++ b/files/ja/web/http/cross-origin_resource_policy_(corp)/index.md @@ -7,79 +7,60 @@ tags: - Security translation_of: Web/HTTP/Cross-Origin_Resource_Policy_(CORP) --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

クロスオリジンリソースポリシーは {{HTTPHeader("Cross-Origin-Resource-Policy")}} ヘッダーによって設定されるポリシーで、ウェブサイトやアプリケーションが他のオリジンから (<script><img> などの要素を使用して発行された) 特定のリクエストに対する保護をオプトインすることで、 Spectre のような投機的なサイドチャネル攻撃や、クロスサイトスクリプトインクルージョン攻撃を緩和することができます。

+**クロスオリジンリソースポリシー**は {{HTTPHeader("Cross-Origin-Resource-Policy")}} ヘッダーによって設定されるポリシーで、ウェブサイトやアプリケーションが他のオリジンから (`