## 概念
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实现定时任务
- 检测文件变化