## 概念
Hypertext Transfer Protocol, 超文本傳輸(轉移)協議,是客戶端和服務端傳輸文本制定的協議。構建WWW的具體的三項技術如下:
WWW: world wide web, 萬維網
- HTML: Hypertext Markup Language, 超文本標記語言
- HTTP: Hypertext Transfer Protocol, 超文本傳輸(轉移)協議 (HTTP是TCP/IP的應用層協議)
- URL: Uniform Resource Locator, 統一資源定位符號
> URI: Uniform Resource Identitier, 統一資源標示符號,URL是URI的子集
## TCP/IP
```
應用層(http/https/websocket/ftp...) => 定義:文本傳輸協議
|
傳輸層(tcp/udp) => 定義:端口
|
網絡層(ip) => 定義:IP
|
鏈路層(mac&數據包) => 定義:數據包,MAC地址
|
實體層(光纜/電纜/交換機/路由/終端...) => 定義:物理
```
TCP/IP:
- 解釋一:分別代表tcp協議和ip協議
- 解釋二:如果按照網絡五層架構,TCP/IP代表除了應用層其他層所有協議簇的統稱
TCP/IP connect: TCP/IP的三次握手:
```
標有syn的數據包
------------->
標有syn/ack的數據包
client <------------- server
標有ack的數據包
-------------->
```
TCP/IP finish: TCP/IP的四次握手:
```
fin
<-------------
ack
client(或server) -------------> server(或client)
fin
------------->
ack
<-------------
```
## HTTP 報文
HTTP 報文由三部分組成:
- Start Line
- Headers
- Entity Body
HTTP 報文分為兩類:
- 請求報文
- 響應報文
### 請求報文Start Line
語法 : <方法> <請求URL> <版本>
#### HTTP Method
+ get: 獲取資源,不攜帶http body,支持查詢參數,大小2KB
+ post: 傳輸資源,http body, 大小默認8M,1000個input variable
+ put: 傳輸資源,http body,資源更新
+ delete: 刪除資源,不攜帶http body
+ patch: 傳輸資源,http body,存在的資源局部更新
+ head: 獲取http header,不攜帶http body
+ options: 獲取支持的method,不攜帶http body
+ trace: 追蹤,返回請求回環信息,不攜帶http body
+ connect: 建立隧道通信
### 響應報文Start Line
語法 : <方法> <狀態碼> <原因短語>
#### HTTP Status Code
+ 200: ok
+ 301: 永久重定向
+ 302: 臨時重定向
+ 303: 臨時重定向,要求用get請求資源
+ 304: not modified, 返回緩存,和重定向無關
+ 307: 臨時重定向,嚴格不從post到get
+ 400: 參數錯誤
+ 401: 未通過http認證
+ 403: forbidden,未授權
+ 404: not found,不存在資源
+ 500: internet server error,代碼錯誤
+ 502: bad gateway,fastcgi返回的內容web server不明白
+ 503: service unavailable,服務不可用
+ 504: gateway timeout,fastcgi響應超時
### HTTP Header Fields
常見通用頭部
+ Cache-Control:
- no-cache: 不緩存過期的緩存
- no-store: 不緩存
+ Pragma: no-cache, 不使用緩存,http1.1前的歷史字段
+ Connection:
- 控制不在轉發給代理首部不字段
- Keep-Alive/Close: 持久連接
+ Date: 創建http報文的日期
常見請求頭
+ Accept: 可以處理的媒體類型和優先級
+ Host: 目標主機域名
+ Referer: 請求從哪發起的原始資源URI
+ User-Agent: 創建請求的用戶代理名稱
+ Cookie: cookie信息
常見響應頭
+ Location: 重定向地址
+ Server: 被請求的服務web server的信息
+ Set-Cookie: 要設置的cookie信息
- NAME: 要設置的鍵值對
- expires: cookie過期時間
- path: 指定發送cookie的目錄
- domain: 指定發送cookie的域名
- Secure: 指定之后只有https下才發送cookie
- HostOnly: 指定之后javascript無法讀取cookie
+ Keep-Alive:
HTTP協議初期每次連接結束后都會斷開TCP連接,之后HEADER的connection字段定義Keep-Alive(HTTP 1.1 默認 持久連接),代表如果連接雙方如果沒有一方主動斷開都不會斷開TCP連接,減少了每次建立HTTP連接時進行TCP連接的消耗。
## Cookie/Session
+ Cookie: 工作機制是用戶識別和狀態管理,服務端為了管理用戶的狀態會通過客戶端,把一些臨時的數據寫入到設備中Set-Cookie,當用戶訪問服務的時候,服務可以通過通信的方式取回之前存放的cookie。
+ Session: 由于http是無狀態的,請求之間無法維系上下文,所以就出現了session作為會話控制,服務端存放用戶的會話信息。
## HTTPs
概念:在http協議上增加了ssl(secure socket layer)層。
```
SSL層
|
應用層
|
傳輸層
|
網絡層
|
鏈路層
|
實體層
```
HTTPS 認證流程
```
發起請求
---------------------------> server
下發證書
<--------------------------- server
證書數字簽名(用證書機構公鑰加密)
---------------------------> 證書機構
證書數字簽名驗證通過
client(內置證書機構證書) <--------------------------- 證書機構
公鑰加密隨機密碼串(未來的共享秘鑰)
---------------------------> server私鑰解密(非對稱加密)
SSL協議結束 HTTP協議開始
<--------------------------- server(對稱加密)
共享秘鑰加密 HTTP
---------------------------> server(對稱加密)
```
+ 核對證書證書: 證書機構的公開秘鑰驗證證書的數字簽名
+ 公開密鑰加密建立連接:非對稱加密
+ 共享密鑰加密
## Websocket
+ 基于http協議建立連接,header的upgrade字段轉化協議為websocket
+ 全雙工通信,客戶端建立連接
## HTTP2
+ 多路復用:多個請求共享一個tcp連接
+ 全雙工通信
+ 必須https://
+ 頭部壓縮
+ 二進制傳輸
- PHP7新特性
- 優雅的寫代碼
- 常見的代碼優化
- 常用的工具類
- PHP原生生成EXCEL
- PHP地理位置計算
- PHP獲取服務器狀態
- 駝峰轉下劃線
- 百度地圖兩點坐標距離計算
- 判斷是否是url
- PHP常見header頭
- 郵件發送類
- 阿拉伯數字轉化為大寫
- 獲取漢字首個拼音
- 根據身份證號獲取星座
- 生成驗證碼類
- 生成唯一ID
- 身份證驗證類
- PHP中文轉拼音
- Nginx配置文件
- curl獲取網頁內容
- 快遞查詢api
- 上傳圖片類
- 股票類
- 找回密碼類
- 字符串助手函數
- 校驗數據規則
- PHP獲取收集相關信息
- 字符串截取助手函數
- 網頁中提取關鍵字
- 檢測瀏覽器語言
- 微信相關類
- 微信獲取access_token
- 獲取用戶基本信息
- 代碼規范
- 編程規范(psr-1,2)
- 編程規范(原作者的建議)
- 經驗
- 常用函數地址
- 函數集合
- 一些常識
- MYSQL相關知識
- 常用sql
- mysql事務隔離級別
- Read uncommitted
- Read committed
- Repeatable read
- Serializable
- 高性能MYSQL讀書筆記
- 第一章MYSQL的架構
- mysql邏輯架構
- redis相關知識
- 1.安裝redis
- 3.php操作redis
- 隊列
- 悲觀鎖
- 樂觀鎖
- 發布
- 訂閱
- redis實戰-文章投票
- 設計模式
- 創建模型實例
- 單例模式
- 工廠模式
- AnimalInterface.php
- Chicken.php
- Factory.php
- Farm.php
- Pig
- SampleFactory.php
- Zoo
- 抽象工廠模式
- AnimalFactory
- Factory
- FarmInterface
- Income
- PandaZoo
- PeonyZoo
- PigFarm
- PlantFactory
- RiceFarm
- ZooInterface
- 原型模式
- 建造者模式
- 結構型模式實例
- 橋接模式
- 享元模式
- 外觀模式
- 適配器模式
- 裝飾器模式
- 組合模式
- 代理模式哦
- 過濾器模式
- 行為型模式實例
- 模板模式
- 策略模式
- 狀態模式
- 觀察者模式
- 責任鏈模式
- 訪問者模式
- 解釋器模式
- 空對象模式
- 中介者模式
- 迭代器模式
- 命令模式
- 備忘錄模式
- 網絡知識
- 互聯網協議概述
- nginx簡易交互過程
- HTTP知識
- LINUX相關知識
- swoole學習
- 1.初識swoole
- 2.WebSocket PHP 即時通訊開發
- 3.異步多進程的 CURL
- 4.異步非阻塞多進程的 Http 服務器
- 5.TCP 服務器
- 5.1同步 TCP 客戶端
- 5.2異步 TCP 客戶端
- 6.UDP 服務器
- 7.異步多任務處理
- 8.毫秒定時器
- 9.高并發投票
- ThinkPHP5學習
- 命令行操作
- 所有命令行中用到的基類
- 1.base
- 2.WorkerBase
- 3.TimeWorkerBase
- 4.CycleWorkerBase
- 5.WorkerCommandBase
- 6.WorkerHookBase
- 1.基礎命令實現
- 2.建立Linux上的守護源碼
- 3.發送模板消息
- 4.基于命令行實現自己的隊列模式
- 5.發送定時短信
- thinkphp5使用sentry
- sentry通知,記錄日志
- 高級查詢
- Kafka相關
- 1.安裝
- 2.為php打擴展
- 3.kafka實現
- 一些工具搭建
- sentry日志收集系統搭建
- walle搭建
- php實現定時任務
- 檢測文件變化