http 协议http 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)http 协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对 http 服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web 程序引入了 Cookie 机制来维护状态.统一资源标识符 (URI)HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接http://<host>:<port>/<path>?<query>#<frag>https://<host>:<port>/<path>?<query>#<frag>默认 HTTP 的端口号为 80,HTTPS 的端口号为 443。HTTP 报文结构(请求报文和响应报文)request line 请求行request header 请求头空行body 内容: 请求数据请求行GET /index.js HTTP/1.1请求方法:GET 获取POST 对资源的建立或修改、HEAD :类似 get,只不过响应只有报头,用于节省字节PUT : 替换对应的资源DELETE 删除OPTIONS 嗅探请求预检,复杂请求中跨域的时候用到请求头host 域名User-Agent : 它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。Referer 告诉服务器我是从哪个页面链接过来的,服务器基于此可以获得一些信息用于处理Accept-Encoding 浏览器发给服务器,声明浏览器支持的编码类型 eg: gzip(一般对纯文本内容可压缩到原大小的 40%)cookie 保存一些信息If-Modified-Since 从何时开始是否有修改If-None-Match 检查 MD5 之类的 hash 值Cache-Control: no-cache响应头Content-Type 响应的 HTTP 内容类型Cache-Control max-age=3600Expires 过期时间Access-Control-Allow-Origin 设置允许的来源,验证请求的时候会带的 OriginAccess-Control-Allow-Headers 设置允许跨域携带的 headersAccess-Control-Allow-Methods 设置允许跨域方法ETag 被请求变量的实体值,与 Web 资源关联的记号last-modified 标记此文件在服务器端最后被修改的时间status 状态码Set-Cookie 设置客户端的 cookie状态码1xx 消息2xx 请求成功200 成功206 (Partial Content)断点续传和多线程下载3xx 重定向301 请求的资源永久从不同的 URI 响应请求302 请求的资源临时从不同的 URI 响应请求304 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码4xx 客户端错误400 Bad Request (语义有误或者请求参数出错)401 Unauthorized 需要权限验证403 Forbidden 服务器收到请求,但是拒绝提供服务404 not found 请求失败,请求所希望得到的资源未被在服务器上发现5xx 服务器错误500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理503 Service Unavailable 由于临时的服务器维护或者过载,服务器当前无法处理请求504 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器(例如 DNS)收到响应。httpsHTTPS = HTTP + SSL加密方式对称加密,比较有代表性的就是 AES 加密算法;双方密钥相同,加解密速度快非对称加密,经常使用到的 RSA 加密算法就是非对称加密的;公钥和私钥http 风险被窃听被篡改被冒充基本运行原理客户端和服务端建立 SSL 握手 客户端通过 CA 证书来确认服务端的身份;互相传递三个随机数,之后通过这随机数来生成一个密钥;互相确认密钥,然后握手结束;数据通讯开始,都使用同一个对话密钥来加解密;基本运行原理(详细)首先,客户端 A 访问服务器 B ,客户端 A 会生成一个随机数 1,把随机数 1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。服务器 B 知道这些信息后,确认一下双方的加密算法,生成一个随机数 2 以及一个公钥返回给客户端 A客户端 A 生成一个随机数 3 ,然后用公钥加密随机数 3 并传输给服务端 B 。服务端 B 接收到后利用私钥进行解密,得到随机数 3。最后,客户端 A 和服务端 B 都有随机数 1、随机数 2、随机数 3,然后双方都利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密。SSL 的握手部分结束,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。为啥需要 CA 证书因为在第一步的时候,我们并不清楚服务器 B 是不是真的是服务器 B。所以需要一个我们信得过的机构来告诉我们。基本运行原理(带 CA 证书)首先,客户端 A 访问服务器 B ,客户端 A 会生成一个随机数 1,把随机数 1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。服务器 B 知道这些信息后,确认一下双方的加密算法,然后也生成一个随机数 B ,并将随机数 B 和 CA 颁发给自己的证书一同返回给客户端 A 。客户端 A 得到 CA 证书后,会去校验该 CA 证书的有效性。校验通过后,客户端生成一个随机数 3 ,然后用证书中的公钥加密随机数 3 并传输给服务端 B 。服务端 B 加密后的随机数 3,利用私钥进行解密,得到随机数 3。最后,客户端 A 和服务端 B 都有随机数 1、随机数 2、随机数 3,然后双方都利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。SSL 的握手部分结束,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。浏览器验证证书的合法性证书链证书链由多个证书一层一层组成的,除了最底层的网站证书的公钥是给用户加密报文外,其他层证书中的公钥均用于解密底层的证书指纹签名。最高层的根证书是自签名的,也就是自己颁发给自己,所以它的公钥不仅用来解密下层的签名,也用来给自己的签名解密。