### HTTP與HTTPS
HTTP協議傳輸的數據都是未加密的,HTTPS協議是由HTTP+SSL協議構建的可進行加密傳輸、身份認證的網絡協議,要比HTTP協議安全。
**HTTPS和HTTP的區別**
- HTTPS協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
- HTTP是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的SSL加密傳輸協議。
- HTTP和HTTPS使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
- HTTP的連接很簡單,是無狀態的;HTTPS協議是由HTTP+SSL協議構建的可進行加密傳輸、身份認證的網絡協議,比HTTP協議安全。
### Cookie和Session
- **Cookie/Cookies: **是指某些網站為了*辨別用戶身份*、*進行session跟蹤*而*儲存在用戶本地*終端上的數據(通常經過加密)。
- **Session:**服務端為客戶端訪問所建立和維持的會話,通常會生成一個唯一的id,會話有一定的有效期。
由於HTTP是無狀態的,即服務器不知道用戶上一次做了什么,默認也無法識別用戶身份。
比較流行的做法是:
- 用戶訪問時服務端建立會話(Session)
- 將會話id(Session ID)隨響應返回,並保存在客戶端的Cookies里
- 后續的訪問中,服務器通過辨識,客戶端請求時攜帶的Cookies內容來識別用戶


**Cookie和Session的區別**
- cookie是存在客戶端(瀏覽器)的進程內存中和客戶端所在的機器硬盤上
- cookie只能能夠存儲少量文本,大概4K大小
- cookie是不能在不同瀏覽器之間共享
- Session存在服務器端,存在網站進程的內存中
- Session在初次設置session的時候,會在session池中實例化一個session對象,以sessionid 的值作為key,同時會將key以cookie的形式保存到客戶端的內存中
- Session的作用域只存在當前瀏覽器的會話中,當瀏覽器關閉以后就會將sessionid丟失,但是服務器的Session對象要20分鍾以后才會回收
### 授權與加密
常見的接口安全策略:
1. Session/Cookie機制: 即需要登錄,登錄后可訪問各個接口,最常用的一種策略,適用於內部接口。
2. 固定appid模式: 用戶注冊時會生成一個唯一的appid,用戶調用接口時需要攜帶appid,適用於公開接口,安全性較差。
3. 動態token模式: token即身份令牌,用戶訪問接口需要使用個人appid臨時申請一個token,token有一定有效期,適用於公開接口,安全性較appid模式好。
4. 開放協議: Basic Auth/ Oauth1.0 / Oauth2.0: 適用於開放接口。
5. 數字簽名: 將所有請求參數及參數值進行排列拼接,加上用戶私鑰,再進行Md5或其他加密生成一個請求的簽名(sign),請求是需要攜帶簽名,服務器收到請求后,
會對請求重新計算簽名並核實與請求所攜帶簽名是否一致。安全性較高,可以有效防止請求被篡改。適用於內部接口及微服務接口。
**常見的加密算法**
在接口數據傳輸過程中常對一些敏感數據(如密碼)進行Base64編碼或MD5加密,以增加安全性。
加密算法分為對稱式加密算法和非對稱式加密算法,對稱式加解密使用同一個秘鑰,非對稱式使用不同的秘鑰。
- 對稱式加密
- DES: 數據加密標准,速度較快,適用於加密大量數據的場合
- AES: 高級加密標准,速度快,安全級別高
- 非對稱式加密
- RSA: 是一個支持變長密鑰的公共密鑰算法, 分公鑰和私鑰,