Btyedance
HTTP 和 HTTPS§
HTTP§
- Hyper Text Transfer Protocol(超文本传输协议)
- 客户端浏览器和 web 服务器之间的应用层通信协议
- 所有的 www 文件都必须遵循这个标准
TCP 和 IP§
- tcp 和 udp 协议是在传输层,,web 以 http 协议作为应用层,以封装 HTTP 文本信息,然后使用 TCP/IP 作为传输层协议将他们发到网络上
- 7 层关系

- TCP 和 UDP 就像卡车,IP 就像高速公路,HTTP 就像卡车携带的货物
- 从下至上来看,物理层-> 数据链路层-> 网络层-> 传输层-> 会话层-> 表示层-> 应用层
SSL 和 TSL§
- SSL:(Secure Sockets Layer 安全嵌套层),SSL 协议分为两层: SSL 记录协议(SSL record protocol),它建立在可靠的传输协议上,例如 TCP,为高层协议提供数据封装,压缩,加密等基本功能的支持; SSL 握手协议(SSL handleshake protocol),它建立在 SSL 记录协议上,用于实际的传输前,通讯双方进行身份认证,协商加密,交换密钥等
- TSL:SSL 的继任者传输层安全(Transport Layer Security):为网络通信提供安全及数据完整性的安全协议,以及检验客户端和服务器是否安全。
- TSL 和 SSL 在传输层对 网络进行加密,SSL 在应用层和 TCP 层之间,应用层不再直接传输给传输层,而是传递给 SSL 层,SSL 层从应用层收到的数据进行加密,并增加自己的 SSL 头
HTTPS§
- Hyper Text Transfor Protocol over Sercure Socket Layer(以目的为安全的 HTTP 通道),即 HTTP 的安全版,即 HTTP 加入了 SSL 层,HTTPS 的安全基础是 SSL,因此加密的信息就需要 SSL
HTTPS 和 HTTP 区别§
- HTTP 协议是以明文方式发送内容,不提供任何方式的数据加密。HTTPS 在 HTTP 协议的基础上,加入了 SSL 协议,SSL 依靠证书来验证服务的身份,并为浏览器和服务器之间的通信加密。
- HTTPS 的主要作用:
- 对数据进行加密,并建立一条信息安全通道,来保证传输过程中的数据安全
- 对网站服务器进行真实身份识别
- HTTPS 和 HTTP 主要区别
- HTTPS 需要到 ca 申请证书,一般免费证书很少
- HTTP 是超文本传输协议,是明文传输。HTTPS 则是具有安全性的 SSL 加密传输协议
- HTTP 和 HTTPS 使用的链接方式不同,HTTP 常用的是 80 端口,HTTPS 为 443
如何解决跨域§
什么是跨域: 一个域下的脚本或文档想去访问另一个域的资源,这里的跨域是广义的。§
什么是广义的跨域§
- 资源跳转(a 链接,重定向,表单提交)
- 资源嵌入(< link>,< iframe>< script>,background: url 之类的文件外链)
- 脚本请求:js 发起的 ajax 请求,dom 和 js 的跨域操作等
- 其实我们所说的跨域都是狭义下的跨域,是由浏览器同源策略下限制的一类请求
同源策略(SOP same origin policy)§
- 是一种约定:指协议+域名+端口三者相同,即使两个不同的域名指向同一个 ip 地址,也不是同源。它是浏览器最核心也是最基本的安全功能,如果缺少同源策略,浏览器很容易受到 XSS,CSFR 的攻击。
- 同源策略限制后的几种行为
- localStorage,cooike,indexDB 无法获取
- DOM 和 js 对象无法获取
- AJAX 请求无法发送
常见的跨域场景§
URL 说明 是否允许通信
http://www.domain.com/a.js
http://www.domain.com/b.js 同一域名,不同文件或路径 允许
http://www.domain.com/lab/c.js
http://www.domain.com:8000/a.js
http://www.domain.com/b.js 同一域名,不同端口 不允许
http://www.domain.com/a.js
https://www.domain.com/b.js 同一域名,不同协议 不允许
http://www.domain.com/a.js
http://192.168.4.12/b.js 域名和域名对应相同ip 不允许
http://www.domain.com/a.js
http://x.domain.com/b.js 主域相同,子域不同 不允许
http://domain.com/c.js
http://www.domain1.com/a.js
http://www.domain2.com/b.js 不同域名 不允许
常见的跨域解决方案§
-
1.JSONP 跨域:
-
原理:通常为了减轻 web 服务器的负载压力,我们将 js,img,css 等静态资源分离到另一台独立域名的服务器上,在 html 页面中再通过相应的标签从不同的域名加载静态资源,而被浏览器允许,基于此原理,我们可以动态创建 script,再请求一个带参网址实现跨域。
-
原生实现:
- 前端
<script> var script = document.createElement('script'); script.type = 'text/javascript'; // 传参一个回调函数名给后端,方便后端返回时执行这个在前端定义的回调函数 script.src = 'http://www.domain2.com:8080/login?user=admin&callback=handleCallback'; document.head.appendChild(script); // 回调执行函数 function handleCallback(res) { alert(JSON.stringify(res)); } </script>- 服务端返回如下(返回时即执行全局函数):
handleCallback({"status": true, "user": "admin"})
-