一、为什么学习HTTP(搞清楚几个问题)
- 问题一:在浏览器上输入一串地址然后打开一个网页经历了什么?
- 问题二:AJAX是如何获取数据的?
- 问题三:img 标签加载图片

二、理论知识

- 物理层:主要作用是定义物理设备如何传输数据
- 数据链路层:在通信的实体间建立数据链路连接
- 网络层:为数据在结点之间传输创建逻辑链路
- 传输层:
- 像用户提供端到端的服务(从自己的电脑和百度的服务器 连接之后,两端是如何传输数据的? 传输数据的方式是怎样的?传输的资源的大小,分片,组装?都是在传输层定义的。 )
- 传输层向高层屏蔽了下层通信数据的细节
- 应用层:
- HTTP协议
- 为应用软件提供了很多服务
- 构建于TCP协议之上
- 屏蔽了网络传输相关细节
三、HTTP的三次握手


四、URI、URL、URN
- URI:Uniform Resource Identifier 统一资源标志符
- 用来标识互联网上的信息资源
- 包含URL和URN
- URL:Uniform Resource Locator 统一资源定位器
- 用来找到资源所在的位置、并且访问他
五、跨域请求
- Access-control-Allow-origin
- CORS 跨域限制以及预请求验证
- 在跨域请求的时候默认允许的方法只有GET、POST、HEAD
- 在跨域请求的时候默认允许的content-type 类型有:text/plain multipart/form-data application/x-www-form-urlencoded

六、缓存头cache-control
- public http经过的 任何地方都可以缓存
- private 发起请求的浏览器才能进行缓存
- no-cache 任何一个节点都不可以缓存
缓存到期时间
- max-age = 时间
- s-age = 时间(专门为代理服务器设置)
- max-sale(在浏览器中使用不到)
重新验证
- must-revalidate 如果时间过期了必须去原服务端发送请求
- proxy-revalidate 如果时间过期了必须去原服务端发送请求(指定缓存服务器)
- no-store 本地代理服务器是不允许使用缓存
- no-cache 可以本地缓存,都要去服务器验证。然后验证成功才能使用缓存
- no-transform 不要随便改变我返回的内容
- 只是申明作用,没有强制性原则
资源验证

验证头 Last-Modified
- 上次修改的时间
- 配合If-Modified-Since 或者 If-Unmodified-Since 使用
验证头 Etag