text: (window.webpackJsonp=window.webpackJsonp||[]).push([[22],{485:function(e,r,o){"use strict";o.r(r);var t=o(21),_=Object(t.a)({},(function(){var e=this,r=e.$createElement,o=e._self._c||r;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"http"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#http"}},[e._v("#")]),e._v(" Http")]),e._v(" "),o("h2",{attrs:{id:"概述"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#概述"}},[e._v("#")]),e._v(" 概述")]),e._v(" "),o("p",[e._v("HTTP是一种能够获取如 HTML 这样的网络资源的 "),o("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Glossary/protocol",target:"_blank",rel:"noopener noreferrer"}},[e._v("protocol"),o("OutboundLink")],1),e._v("(通讯协议)。它是在 Web 上进行数据交换的基础，是一种 client-server 协议，也就是说，请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通常是由不同的子文档拼接而成的，像是文本、布局描述、图片、视频、脚本等等。")]),e._v(" "),o("h2",{attrs:{id:"基本性质"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#基本性质"}},[e._v("#")]),e._v(" 基本性质")]),e._v(" "),o("ul",[o("li",[e._v("简单的")]),e._v(" "),o("li",[e._v("可扩展的")]),e._v(" "),o("li",[e._v("无状态的（可通过Cookies建立会话）")]),e._v(" "),o("li",[e._v("可靠传输（基于TCP/IP）")]),e._v(" "),o("li",[e._v("请求应答")])]),e._v(" "),o("h2",{attrs:{id:"缓存"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#缓存"}},[e._v("#")]),e._v(" 缓存")]),e._v(" "),o("p",[e._v("缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当 web 缓存发现请求的资源已经被存储，它会拦截请求，返回该资源的拷贝，而不会去源服务器重新下载。这样带来的好处有：缓解服务器端压力，提升性能(获取资源的耗时更短了)。对于网站来说，缓存是达到高性能的重要组成部分。缓存需要合理配置，因为并不是所有资源都是永久不变的：重要的是对一个资源的缓存应截止到其下一次发生改变（即不能缓存过期的资源）")]),e._v(" "),o("p",[e._v("缓存类型：私有（浏览器）缓存、共享（代理）缓存")]),e._v(" "),o("p",[e._v("操作目标（常见http只能缓存get请求）：")]),e._v(" "),o("ul",[o("li",[e._v("一个检索请求的成功响应: 对于 "),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET",target:"_blank",rel:"noopener noreferrer"}},[o("code",[e._v("GET")]),o("OutboundLink")],1),e._v("请求，响应状态码为："),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/200",target:"_blank",rel:"noopener noreferrer"}},[o("code",[e._v("200")]),o("OutboundLink")],1),e._v("，则表示为成功。一个包含例如HTML文档，图片，或者文件的响应。")]),e._v(" "),o("li",[e._v("永久重定向: 响应状态码："),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/301",target:"_blank",rel:"noopener noreferrer"}},[o("code",[e._v("301")]),o("OutboundLink")],1),e._v("。")]),e._v(" "),o("li",[e._v("错误响应: 响应状态码："),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/404",target:"_blank",rel:"noopener noreferrer"}},[o("code",[e._v("404")]),o("OutboundLink")],1),e._v(" 的一个页面。")]),e._v(" "),o("li",[e._v("不完全的响应: 响应状态码 "),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/206",target:"_blank",rel:"noopener noreferrer"}},[o("code",[e._v("206")]),o("OutboundLink")],1),e._v("，只返回局部的信息。")]),e._v(" "),o("li",[e._v("除了 "),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET",target:"_blank",rel:"noopener noreferrer"}},[o("code",[e._v("GET")]),o("OutboundLink")],1),e._v(" 请求外，如果匹配到作为一个已被定义的cache键名的响应。")])]),e._v(" "),o("p",[e._v("缓存控制（设置"),o("code",[e._v("cache-control")]),e._v("头）：")]),e._v(" "),o("ul",[o("li",[o("code",[e._v("no-store")]),e._v("：禁止进行缓存")]),e._v(" "),o("li",[o("code",[e._v("no-cache")]),e._v("：强制确认缓存（缓存将请求发到服务器，服务器验证，返回304，才能使用缓存）")]),e._v(" "),o("li",[o("code",[e._v("public")]),e._v("：公共缓存")]),e._v(" "),o("li",[o("code",[e._v("private")]),e._v("：私有缓存")]),e._v(" "),o("li",[o("code",[e._v("max-age=<seconds>")]),e._v("：资源能够被缓存的最大时间")]),e._v(" "),o("li",[o("code",[e._v("must-revalidate")]),e._v('：缓存确认验证，当使用了 "'),o("code",[e._v("must-revalidate")]),e._v('" 指令，那就意味着缓存在考虑使用一个陈旧的资源时，必须先验证它的状态，已过期的缓存将不被使用。')])]),e._v(" "),o("h2",{attrs:{id:"cookie"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#cookie"}},[e._v("#")]),e._v(" "),o("code",[e._v("Cookie")])]),e._v(" "),o("p",[e._v("​\tHTTP Cookie（也叫Web Cookie或浏览器Cookie）是服务器发送到用户浏览器并保存在本地的一小块数据，它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常，它用于告知服务端两个请求是否来自同一浏览器，如保持用户的登录状态。Cookie使基于"),o("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview#HTTP_is_stateless_but_not_sessionless",target:"_blank",rel:"noopener noreferrer"}},[e._v("无状态"),o("OutboundLink")],1),e._v("的HTTP协议记录稳定的状态信息成为了可能。")]),e._v(" "),o("p",[e._v("Cookie主要用于以下三个方面：")]),e._v(" "),o("ul",[o("li",[e._v("会话状态管理（如用户登录状态、购物车、游戏分数或其它需要记录的信息）")]),e._v(" "),o("li",[e._v("个性化设置（如用户自定义设置、主题等）")]),e._v(" "),o("li",[e._v("浏览器行为跟踪（如跟踪分析用户行为等）")])]),e._v(" "),o("p",[e._v("Cookie曾一度用于客户端数据的存储，因当时并没有其它合适的存储办法而作为唯一的存储手段，但现在随着现代浏览器开始支持各种各样的存储方式，Cookie渐渐被淘汰。由于服务器指定Cookie后，浏览器的每次请求都会携带Cookie数据，会带来额外的性能开销（尤其是在移动环境下）。新的浏览器API已经允许开发者直接将数据存储到本地，如使用 "),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Storage_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("Web storage API"),o("OutboundLink")],1),e._v(" （本地存储和会话存储）或 "),o("a",{attrs:{href:"https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),o("OutboundLink")],1),e._v(" 。")]),e._v(" "),o("p",[e._v("​")])])}),[],!1,null,null,null);r.default=_.exports}}]);