HTTP协议基础

259 阅读6分钟

最近在慕课上买了Jokcy老师的HTTP课程 学习过程中做了一些总结

1.浏览器输入URL后HTTP请求返回的完整过程

Redirect 跳转 ----> App  cache 应用缓存 ----> DNS   DNS查找 ----> TCP 创建TCP链接 ---->Request 发送请求 ----> Response 接收响应


2-1 网络模型介绍


低三层

物理层主要作用是定义物理设备如何传输数据

数据链路层在通信的实体间建立数据链路连接

网络层为数据在结点之间传输创建逻辑链路


传输层 TCP UDP

向用户提供可靠的端到端(End-to-End)服务,传输层向高层屏蔽了下层数据通信的细节

应用层 HTTP

构建于TCP协议之上 ,屏蔽了网络传输相关细节

2-2 HTTP协议的发展历史

HTTP/0.9  只有一个命令GET 没有HEADER等描述数据的信息  服务器发送完毕 就关闭TCP连接

HTTP/1.0  增加了命令  staus code  和 header

HTTP/1.1  持久连接   增加了host(同一个物理服务器 选择node还是java等软件服务器)和其他一些命令

HTTP/2 完全多路复用的,而非有序并阻塞的 , 所有数据以二进制传输 , 同一个连接里面发送多个请求不再需要按照顺序来 ,头信息压缩以及推送(服务器可以主动向客户端发送资源 如 在服务器端解析HTML文本 不等客户端来解析HTML文件  同步发送CSS JS等资源)等提高效率的功能

2-3 三次握手


通过三次握手规避 网络传输中延迟导致数据丢失的连接空置未关闭的问题

2-4 URI、URL 、URN

Uniform Resource Identifier/统一资源标志符

Uniform Resource Locator/统一资源定位器

http://user:pass@host.com:80/path?query = string#hash

协议  用户信息验证  IP地址 端口号  路由? 参数 #hash

URN 永久统一资源定位符

2-5 HTTP报文格式

首行 URL  METHOD  STATUS CODE等

HEADER   Connection Content-Type等

HTTP方法  用来定义对于资源的操作  GET POST PUT DELETE OPTIONS 

HTTP CODE 定义服务器对请求的处理结果

3 HTTP各种特效

3-2 CORS跨域请求的限制与解决

Content-Tpye  设置 浏览器解析的 文件格式   text/html   、 text/plain等

服务器 设置  Access-Control-Allow-Origin:‘*’,  跨域时, 服务器得到请求后是返回了数据 只是浏览器收到的Access-Control-Allow-Origin告诉浏览器跨域了  不需要解析  就将响应结果 拦截掉 并在控制行 报错

浏览器允许  link  img  script等标签 加载资源  不需要服务器设置允许跨域的头

JSONP  实现原理 在script等标签里加载了一个链接  

3-3 CORS跨域限制以及预请求验证

CORS限制  

默认允许方法 GET HEAD POST  

允许Content-Type  text/plain  、multipart/form-data 、 application/x-www-form-urlencoded

其他限制 

请求头限制  自定义请求头等

XMLHttpRequestUpload对象均没有注册任何事件监听器

设置允许

Access-Control-Allow-Origin:'*' 允许的URL

Access-Control-Allow-Methods:‘GET, PUT, POST, DELETE, HEAD’允许的方法

Access-Control-Allow-Headers:‘允许的headers’

Access-Control-Max-Age:'1000' 允许的跨域时间

预请求验证   客户端会有一个OPTIONS去验证正式的请求是否允许发送 

3-4 缓存头Cache-Control的含义和使用

可缓存性  public 、private 只有发起的客户端才能缓存、 no-cache 只有通过服务器端验证才能使用客户端缓存

到期时间  max-age =<seconds> 、s-maxage=<seconds>代理服务器才会应用 、max-stale=<seconds>

重新验证  must-revalidate 、proxy-revalidate

其他 no-store 不使用缓存 直接重新请求数据     、no-transform

3-5 缓存验证Last-Modified和Etag的使用




Last-Modified   上次修改时间

Etag  资源签名 判断客户端缓存的资源文件与  在服务器端的资源文件 是否相同  如果相同则直接使用客户端缓存资源   如果不同则需要重新请求 

3-6 cookie和session

max-age 和 expires设置过期时间

Secure只有HTTPS的时候发送

HttpOnly无法通过document.cookie访问

3-7 HTTP长连接

Connection: keep-alive 长连接 /close 短连接 可以在服务器设置 长连接关闭时间

HTTP请求是基于 TCP连接上 进行发送的  ,一个TCP连接上可以发送多个HTTP请求,HTTP1.1中  HTTP请求在TCP连接上发送有先后顺序   HTTP2.0中 一个TCP连接可以并发多个同域的HTTP请求

3-8 数据协商

Accept:text/html,  application/xhtml+xml, application/xml,  image/webp  , image/apng

客户端希望服务器返回的资源类型,并非强限制

Accept-Encodeing: gzip , defalate ,br   压缩文件的算法  

Accept-Language: zh-CN,zh,q=0.9 ,en;q=0.8   接收的语言 和对应的优先级权重

Content-Type   text/plain 文件源码  、multipart/form-data  将表单(enctype)提交的数据分为多个部分,文件不能作为字符串传输,要转为二进制进行传输  、 application/x-www-form-urlencoded   URL上的CODE

3-8 Redirect

302 临时跳转

301 永久跳转     告知浏览器缓存   当前URL永久跳转到新的URL  不需要服务器告知

3-9 CSP  

Content-Security-Policy   内容安全策略

Content-Security-Policy:‘default-src  http:https’只能加载http https请求的数据  script外联加载的资源就不允许

Content-Security-Policy:‘default-src  \‘self’\’只能加载本站服务器的资源

Content-Security-Policy:‘script-src \‘self’\’只限制Script需要是本站服务器资源

4-1 Nginx安装和基础代理配置

http://nginx.org/en/download.html    下载nginx 压缩包然后解压 

git bash 里面  通过 在目录下  ./nginx.exe 运行


在代理过程中 http明文传输的所有东西是不可靠的  可以被代理修改   https可以保证 内容在传输过程中不被修改

4-2 Nginx代理配置和代理缓存的用处

Cache-Control:'max-age=5,s-maxage=20,private' max-age表示本地缓存时间 ,s-maxage表示代理缓存时间    private表示只有本地缓存时间生效  no-store表示都不缓存

Vary:'X-Test-Cache = 0'    验证头信息一致再使用缓存

4-3 HTTPS解析

私钥    只存在服务器上,用于解密字符串

公钥    存在互联网上,所有人都能拿到的加密字符串

私钥、公钥 主要用在握手时进行一个传输


4-4 使用Nginx部署HTTPS服务

开启SSL配置


ssl on 


4-5 HTTP2的优势和Nginx配置HTTP2的简单使用

HTTP2 优势

信道复用

数据分帧传输      同一个连接中可以并发发送不同的http请求,并没有先后顺序

Server Push 

Nginx开启HTTP2配置 



HTTP原理

HTTP技术点

Nginx实践、面向未来的HTTP