# 慕课HTTP协议原理课程
- 输入
URL打开网页 AJAX获取数据img标签加载图片
# 网络模型
- 物理层主要作用是定义物理设备如何传输数据
 - 数据链路层在通信的实体间建立数据链路连接
 - 网络层为数据在结点之间传输创建逻辑链路(
IP) - 传输层(
TCP/UDP)。向用户提供可靠的端到端服务 - 应用层
HTTP。为应用软件提供很多服务。构建TCP协议之上,屏蔽网络传输相关细节。 
# HTTP协议历史
http/0.9- 只有一个
GET命令 - 没有
Header等描述数据的信息 - 服务器发送完毕就关闭
TCP连接 
- 只有一个
 http/1.0- 增加了很多命令
 - 增加了状态码和头部
 - 多字符集支持,多部分发送,权限/缓存等
 
http/1.1- 持久连接
 - 管道化(同一个连接发送多个
http请求,依然会阻塞`) - 增加
host和其他一些命令 
http2- 所有数据二进制传输
 - 同一个连接里面发送多个请求不再需要按照顺序来,并行请求
 - 头部信息压缩以及推送等提高效率的功能
 
TIP
头部字符串占用了带宽的量,压缩头部能减少带宽使用
# HTTP三次握手
http只进行数据包的请求和响应,连接是TCP的概念。三次网络传输才能创建TCP连接
# URL URI URN
URI 统一资源标志符 Uniform Resource Identifier URL 统一资源定位器
URN 永久统一资源定位符
# 认识HTTP客户端
curl www.baidu.com # 在gitbash输入这个也相当于发送请求
 1

TIP
curl用来请求web服务器。curl用法指南 (opens new window)
# 跨域预请求
如果是因为不在简单请求里面的头部导致的复杂请求option。可以在服务设置'Access-Control-Allow-Headers': '复杂请求头部名称'。方法呢则通过设置Access-Control-Allow-Methods。设置Access-Control-Max-Age可以设置多少秒内不再发送预检请求
# Cookie
Cookie可以设置多个。没有设置过期时间浏览器关闭就没了

TIP
max-age多长时间过期;expires是到什么时间过期(计算麻烦)
设置domain就可以让所有二级域名都访问到cookie
# HTTP长连接
不同域时请求会重新开启一个TCP连接
# 数据协商
请求里通过Accept来告诉服务端自己想要什么类型。Accept-Encoding等
返回则通过Content-Type