前端
2022-03-07 10:56:37 21 举报
AI智能生成
前端知识
作者其他创作
大纲/内容
js
数组
数组的方法
Array.concat()
拼接数组或者将多个元素一次性添加进去
参数
[1,2,3].concat(4,5)
[1,2,3].concat([4,5])
Array.slice()
指定数组的一个片段或者子数组
必须是正数
Array.join()
将数组连接起来构建一个字符串
Array.length()
数组长度
Array.push()
向数组最后添加一个元素,并返回数组新的长度
Array.pop()
删除并且返回最后一个元素
Array.shift()
删除并且返回数组的第一个元素
Array.unshift()
向数组的开头添加一个元素,并返回数组新的长度
Array.revese()
颠倒数组中元素的顺序
Array.splice()
在数组中插入或者删除数组
splice会修改数组
会返回一个由删除数组组成的数组
Array.sort()
对数组进行排序
toSource()
返回该对象的源代码
toString()
把数组转换成字符串,并返回结果
toLocaleString()
把数组转换本地字符串,并返回结果
valueOf
返回数组对象的原始值
for...in..
forEach()
从头到尾遍历数组,为每个元素调用指定函数
不能中途停止,可以使用try/catch
参数
函数
数组元素
item
元素的索引
index
数组本身
array
特性()
map(映射)
每个元素传递给函数,返回一个数组
返回的是新数组,不改变原数组
参数
函数
数组元素
元素的索引
数组本身
filter(过滤)
每个元素传递给函数,返回一个原数组的数组集
不会改变原数组
可以用来将稀疏数组转为稠密数组
参数
函数
数组元素
元素的索引
数组本身
every
数组的逻辑判断,对数组元素用函数来进行判断,返回true/false
每个都满足函数的判断为true,否则为false
当有一个为false后就停止
some
数组逻辑判断,对数组元素用函数来进行判断,
当一个元素满足函数的判断的时候为true,否则为false
当一个为false的时候停
reduce
从左到右
reduceRight
从右到左
扩展运算
三个点(...)
将一个数组转换为逗号分隔的参数序列
Subtopic
与函数结合使用
Subtopic
扩展运算符可以放置表达式
Subtopic
替代apply
由于扩展运算符可以展开数组,所以不再需要apply方法,将数组转为函数的参数了。
Subtopic
应用
数组的复制
数组是对象,所以直接复制,只是复制了底层数据的指针
Subtopic
es5复制数组
Subtopic
es6复制数组
Subtopic
合并数组
Subtopic
与结构赋值结合
Subtopic
只能放在最后一位不然会报错
将字符串转为真正的数组
[...'hello']
[h,e,l,l,o]
任何 Iterator(迭代) 接口的对象,都可以用扩展运算符转为真正的数组
Subtopic
Array.from()
用于将两类对象转为数组
类数组
类数组的例子
Subtopic
常见类数组
DOM操作返回的NodeList集合
函数内部的arguments对象
可遍历对象
set
map
如果参数是一个数组,会返回一个一样的数组
Array.of()
用于将一组值转为数组
Subtopic
Subtopic
总是返回一个数组
copyWithin()
在当前数组内部,将指定位置的成员复制到
其他位置(会覆盖原有成员),返回当前数组
参数
target
从该位置开始替换数据。如果为负值,表示倒数
start
从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
end
到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
find()与findIndex()
用于找出第一个符合条件的数组成员
参数
回调函数,所有数组元素依次执行回调函数,找到第一个为true的成员
回调函数的参数
当前值
当前位置
原数组
都不符返回undefined
fill
给一个值,填充数组
参数
给定的值
替换的起始位置
替换的结束位置
例子
['a','b','c'].fill(7,1,2)
[a.7,c]
如果填充的类型为对象,赋值的是一个指针,而不是深拷贝的对象
flat(),flatMap()
flat()
将多维数组转为一维数组
,对原数据没有影响
参数:整数,表示变成几维数组.默认为1
无论嵌套多少层,都要转为一层用infinty(无穷大)
原数组有空位会跳过空位
flatMap
将原数组元素执行函数,然后在执行flat()
Subtopic
只能展开一层数组
Subtopic
数组的空位
数组的空位指数组的位置上没有值
[, , ,]
空位不是undefined
ES5
forEach(), filter(), reduce(), every() 和some()都会跳过空位。
map()会跳过空位,但会保留这个值
join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。
ES6
ES6 则是明确将空位转为undefined。
字符串
字符串对象
对象属性
constructor
length
字符串长度
prototype
允许您向对象添加属性和方法
对象方法
blink
方法用于显示闪动的字符串。
I.E.不能使用
charAt
返回指定位置的字符
Subtopic
charCodeAt()
返回指定位置的字符的unicode编码
concat()
方法用于连接两个或多个字符串
Subtopic
语法
'dl'.concat("dl","eng")
返回
返回连接后的字符串,本身没有修改
indexOf()
返回某个指定的字符串值在字符串中首次出现的位置。
参数
searchvalue
必须.需要检索的字符串(多个字符)
fromindex
可选的整数参数,规定检索的开始位置
注意
indexOf()对于大小写敏感
如果检索的字符串没有会返回-1
lastIndexOf()
从后向前搜索字符串。
valueOf()
方法可返回 String 对象的原始值。
search()搜索
不可以全局
replace()替换
Subtopic
Subtopic
第二个参数是函数
传入四个值
匹配的字符串
正则表达式分组类容,无则省略
有多少个分组就写几个
匹配项在字符串中的Index值
原字符串
match()匹配
全局
返回
返回匹配的字符串
返回一个Index,匹配字符串第一个字符的位置
input:声明对string对象的引用
不全局
返回
返回匹配字符串的一个数组
split()
把字符串分割成片段来创建一个字符串数组
limit限制分割片段的数量
toLowerCase
大写转小写
toUpperCase()
小写转大写
函数
构造函数
原型
每个函数都有原型
可以使用 函数.prototype 来访问
实例
由构造函数创建的函数,继承了构造函数的属性
有构造函数的属性
也有构造函数原型的属性
实例也可以有自己的独有属性
如果属性名等于构造函数属性名
会屏蔽自己的公共原型上面的属性
不修改公共原型上的属性
各实例互补影响
需要向所有实例中添加属性或则方法时
在构造函数中添加
在公共的原型中添加
VUE
VUE文件结构图
build
build.js
生成环境构建代码
check-verson.js
检查node npm等版本
dev-client.js
热重载相关
dev-server.js
构建本地服务器
utils.js
构建工具相关
webpack.base.conf.js
webpack基础配置
webpack.dev.conf.js
webpack开发环境配置
weppack.prod.conf.js
webpack生成环境配置
config
dev.env.js
开发环境变量
index.js
项目一些配置变量
prod.env.js
生成环境变量
test.env.js
测试环境变量
src
components
vue公共组件
store
vuex的状态管理
App.vue
页面文件入口
main.js
程序入口文件,加载各种公共组件
.babelrc
ES6语法编译
static
data
群聊分析得到的数据用于数据可视化
.editorconfig
定义代码格式
.gitignore
git上传需要忽略的文件格式
README.md
项目说明
favicon.ico
index.html
入口页面
package.json
项目基本信息
router 路由
路由传参
name传参
定义name
在页面上用$router.name 接受参数
router-link 传参
传递参数
:to = {name:'hi',params:{userName:dl}}
接受参数
在页面总用$router.params.username
路由导航
生命周期(函数)
beforeCreate
在实例初始化之后,数据观测(data observer)和 event/watcher 事件配置之前被调用
读取不到methods里面定义的方法
读取不到data里面的数据
created
实例创建完成后立即被调用
实例完成了如下配置
数据观测(data observer) 拿到data里面的数据
属性与方法的计算
watch/event事件回调
应用场景
异步数据的请求获取
数据的处理好
获取本地的缓存
beforeMount
挂载开始之前被调用
相关的render函数首次被调用
开始挂载编译生成的HTML到
对应位置时触发的钩子函数
此时还没有将编译的html渲染到页面上
mounted
el被创建的vm.$el替换,并且挂载 到实例上之后调用这个钩子
将编译好的html挂载到页面完成后的钩子函数
此时可以进行ajax请求获取数据的操作
注意
在生命周期里面只执行一次
不保证所有的子组件也都被挂载,
可以使用vm.$nextTick替换掉mounted.
保证整个视图渲染完毕
Subtopic
beforeUpdate
数据更新时候调用
发生在虚拟DOM重新渲染和打补丁之前
作用:可以在这个钩子进一步更改状态
这不会触发附加的重渲染过程
update
数据更改导致虚拟DOM重新渲染和打补丁后调用
此钩子调用的时,组件已经更新
可以执行依赖于DOM的操作
注意
不会承诺所有子组件都会被重绘.可以使用vm.$nextTick
activated
keep-alive组件激活时调用
deactivated
keep-alive组件停用时调用
beforeDestroy
实例销毁之前调用.在这一步,实例仍然完全可用
destroyed
实例销毁后调用.调用后.
vue实例指示所有东西都会解绑
所有事件监听器会被移除
所有的子实例也会被销毁
指令
DOM的属性
v-model
将数据绑定在视图上
视图修改会影响数据
v-once
绑定一次,数据在变化不会导致视图刷新,写在刷新的页面上
v-html
将html字符串转化成html
DOM
el
类型
string
HTMLElement
只能在new创建的实例中创建
详细
页面上已经存在的DOM元素作为VUE实例的挂载目标
css选择器
ID选择器
HTMLElement
不推荐挂载在body和html标签上
挂载完成后,可以用vm.$el访问
template
类型
String
详细
一个字符串模版作为bue实例的标识对哟呵你
模版会替换挂载的元素
全局配置
vue.config
属性
silent
类型
boolean
默认值
fasle
用法
vue.config.silent
取消vue所有日志与警告
keyCodes
类型
{[key:string]:number|array<number>}
默认值
{}
用法
给v-on自定义键位别名
Subtopic
全局API
Vue.nextTick([callback,context])
参数
{function} [callback]
{object} [context]
方法
在下次DOM更新循环结束之后执行延迟回调
在修改数据后立即使用这个方法,获取更新后的DOM
vue.set(target,key,value)
参数
{object |array} target
{string | number} key
{any} value
返回值
设置的值
用法
Subtopic
计算属性/监听器
计算属性
就是当页面重新渲染(不是刷新)的时候,计算属性不会变化,直接读取缓存使用,
刷新
所有的方法与DOM都会全部执行
重新渲染
这是渲染了页面上的DOM节点
适用地方
适合计算量大和改变频率较低的属性
两个方法组成
get()
set()
通过js赋值其他值或者表单元素设置值得时候
修饰符
事件修饰符
用法
v-on:click.stop="doThis"
分类
.once
只能点击一次
.stop
阻止事件流,(冒泡与捕获度不发生)
.self
只要点击自己的时候才有用
.capture
添加事件监听器时使用事件捕获模式
先使用捕获事件,再进行默认的冒泡事件
.prevent
即取消事件的默认动作
比如:a标签的跳转
<form v-on:submit.prevent="onSubmit"></form>
表达提交不刷新页面
.native
意思就是当你给一个vue组件绑定事件时候,要加上native!如果是普通的html元素!就不需要
串联使用
<a v-on:click.stop.prevent="doThat"></a>
阻止事件流,阻止a的默认事件跳转
按键修饰符
.meta
mac
对应⌘
windows
win键
.shift
.alt
.ctrl
.enter
.tab
.delete(捕获"删除"和"退格"键)
.esc
.space
.up
.down
.left
.right
config.keyCodes
全局属性来自定义按键的修饰符
Vue.config.keyCodes.f1 = 112
MVVM模式
定义
Model
用纯js对象表示
小程序的data
View
view是页面的显示
view-model
负责吧model的数据同步显示出来,
把view的修改同步回model
单向邦定
将model层的数据绑定到view上,使用js改变model后会自动更新
双向绑定
表单里面输入的值也会存到model层
jQuery
jQuery选择器
属性筛选选择器
$("[attribute|=value]")
指定属性中的值等于给定值,或为给定字符串的前缀
Subtopic
$("[attribute=value]")
指定属性的值等于给定的值
$("div[title=test]
$("[attribut*=value]")
属性值中包含value的元素
$("div[title*=te]")
$("[attribut~=value]")
Subtopic
$("[attribut]")
选择具有选定属性的元素,值可以是任何值(包括空)
$("[attribut^=value]")
值为以value为开头的元素。
$("[attribut$=value]")
值为以value为结尾的元素。
$("[attribut!=value]")
选择不存在的属性或则值不等于value的元素
("[attribute][attribute=value],...,[attribute^=value])
$("div[id][title*=es]")
表单选择器
$(":input")
选择所有的input元素
$(":text")
匹配所有的文本框
$(":button")
匹配所有的按钮
$(":submit")
匹配所有的提交按钮
$(":reset")
所有的重置按钮
$(":radio")
匹配所有单选按钮
$(":image")
匹配所有图像域
$(":file")
匹配所有文件域
子元素筛选选择器
$('[:first-child]')
所有父元素中的第一个子元素
$('.class a:first-chile')
类名为class中的第一个a标签子元素
$('[:last-child]')
所有父元素中的最后子元素
$('.class a:last-chile')
类名为class元素中的最后一个a标签子元素
$('[:only-child]')
选择某个父元素是其父元素下的唯一一个子元素(有则选中)
$('[:nth-child]')
选中所有父元素中的第n个子元素
n是索引值从1开始
$('[:nth-last-child]')
选中所有父元素中的第n个子元素(从最后一个算)
基本选择器
$(":first”)
匹配第一个元素
$(a:first)
匹配第一个a元素
$(:"last")
匹配最后一个元素
$(":eq(index)")
匹配所有索引值为index的元素
$(":gt(index)")
匹配所有索引值大于index的元素
$(":lt(index)")
匹配所有索引值小于index的元素
$(":even")
匹配所有索引值为偶数的元素
$(":odd")
匹配所有索引值为奇数的元素
$(":root")
匹配根目录
$(":header")
选择所有的标题元素
h1 h2
$(":lang(language)")
选择指定语言的所有元素
$(":animted")
正在执行的动画元素
层级选择器
后代选择器
$("ancestor descandent ")
选择子元素,孙元素....
子带选择器
$("parent>child ")
选择子元素(只能是子节点)
相邻选择器
$("pre+next")
$(".one + div")
兄弟选择器
$("pre~sibling")
$(".one ~ div")
选择类one的所有div兄弟元素
同辈元素查找
$("prev").siblings("siblings")
$("#two").siblings("div")
可见性过滤
可见性
$("selector:visible")
不可见性
$("selector:hidden")
常见的可见性方法
display:none
height:0
width:0
type="hidden"
visibility:hidden
opacity:0
透明度为100%
父元素为不可见其子元素也为不可见
内容过滤器
:contains(text)
选取含有文本内容的text的元素
:empty
选取不包含子元素或文本的空元素
:has(selector)
获取含有给定选择器匹配元素的元素
:parent
选取含有子元素或文本的元素
基础
jQuery( )是全局函数
快捷别名:$( )
特性
丰富强大的语法
高效的查询方法
有用的方法,来操作选中元素
批量操作元素
链式调用
Subtopic
事件
事件的绑定
bind(type,[,data],fn)
type
事件类型
作为event.data属性传递给事件对象的额外数据
绑定的处理函数
例子
$(function(){
$("#panel h5.head").bind("click",function(){
$(this.next().show())
})
})
事件的移除
参数1: 事件类型
参数2:将有移除的函数
设置和获取是相同方法
HTML属性
attr()方法
无则添加
有则修改
removeAttr()
在所有选中元素中移除某个属性
HTML表单值
value()方法
获取
有则获取
value值
复选框
单选按钮
设置
无则设置
value值
复选框
单选按钮
CSS属性
CSS( ) 方法
获取
不能获取复合值:font
可以获取单个样式的值:font-size
有属性就获取
设置
多个样式
复合样式
无属性则设置
返回值
浏览器实际显示的值
值(来)
style
或CSS样式
CSS类
addClass() 添加类
removeClass()删除类
toggleClass( )
hasClass()判断有无
元素内容
text()
传参
将所有相同元素的html文本内容改为传入的参数的
不传参
返回所有匹配元素子节点内容
htm( )
传参
将所有相同元素的html文本内容改为传入的参数的
不传参
返回第一个匹配元素的html内容
宽/高
width( )
W=内容宽度
传入数字
尺寸
传入字符串
width的属性
height( )
H=内容高度
传入数字
尺寸
传入字符串
height的属性
innerWidth( )
wl=w+内左/右边距
innerHeight( )
hl=h+内上/下边距
outWidth()
wl+边框
outHeight()
hl+边框
位置
offset( )
获取
获取元素相对于文档的位置
设置
传入带有属性的对象,会设置元素位置
返回
带有属性的对象
属性:left
表示X轴
属性:top
表示Y轴
position( )
获取
获取元素相对于偏移的父元素
获取元素滚动条位置
scrollTop
scollLeft
元素数据
date()
获取数据
文档元素
document
window
修改文档结构
插入
替换
复制
git
常用的命令
新建代码库
在当前目录新建Git代码库
$ git init
新建一个目录,将其初始化Git库
$ git init [project-name]
克隆一个远程代码库
$ git init [url]
配置
显示当前的Git配置
$ git config --list
编辑Git配置
$ git config -e [--global]
提交代码的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.name "[email address]"
增/删文件
添加指定文件到暂存区
$ git add [file1] [file2]
添加指定目录到暂存区,包括子目录
$ git add [dir]
添加当前目录到暂存区,包括子目录
$ git add .
删除工作区的文件,并将这次删除放入暂存区
$ git rm [file1] [file2]
停止追踪指定文件,单该文件会保留工作区域
$git rm --cached [file]
修改文件名,并将改名文件放入暂存区
$ git mv [file-original] [file-rename]
代码提交
提交暂存区到仓库
$ git commit -m "[message]"
提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
提交时候显示所有的diff 信息
$ git commit -v
分支
列出所有远程分支
$git branch -r
列出所有本地分支和远程分支
$git branch -a
新建一个分支,但依然停留当前分支
$git branch [branch-name]
新建一个分支,并且切换到新分支
$git branch -b [branch-name]
新建一个分支,并指向指定的commit
$git branch [branch-name] [commit]
新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
切换到指定分支,并更新工作区
$git checkout [branch-name]
切换到上一个分支
$git checkout --
合并指定分支到当前分支
$git merge [branch]
删除分支
$ git branch -d [branch-name]
删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
标签
列出所有的标签
$git tag
新建一个tag在当前commit
$git tag [tag]
新建一个tag在指定的commit
$git tag [tag] [commit]
删除本地tag
$git tag -d [tag]
删除远程tag
$ git push origin :refs/tags/[tagName]
查看tag消息
$ git show [tag]
提交指定tag
$ git push [remote] [tag]
提交所有tag
git push [remote] --tags
查看信息
显示有变更的文件
$ git status
显示当前分支的版本历史
$ git log
显示commit历史,每次commit变更文件
$ git log --stat
显示指定文件是什么人在什么时间修改过
$ git blame [file]
显示所有提交过的用户,按提交次数查询
$ git shortlog -sn
显示暂存区和工作区的差异
$ git diff
显示暂存区和上一个commit的差异
$ git diff --cached [flie]
显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
显示两次提交之间的差异
$ git diff [first-branch] ... [second-branch]
今天你写了多少代码
$ git diff --shortstat "@{ 0 day ago }"
显示某次提交的元数据和内容变化
$ git show [commit]
显示当前分支的最近几次提交
$git reflog
远程同步
下载远程仓库的所有变动
$ git fetch [remote]
显示所有远程仓库
$ gti remote -v
显示某个远程仓库的信息
$ git remote show [remote]
上传本地分支到远程仓库
$ git push [remote] [branch]
强行推送本地分支到远程仓库,及时有冲突
$ git push [remote] --force
推送所有分支到远程仓库
$ git push [remote] --all
撤销
恢复暂存区的指定文件到工作区
$ git checkout [file]
恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
恢复暂存区的所有文件到工作区
$ git checkout .
重置暂存区的指定文件,与上次commit保持一致,工作区不变
$ git reset [file]
重置暂存区与工作区与上次commit提交的一致
$ git reset --hard
其他
生成一个可供发布的压缩包
$ git archive
浏览器
浏览器内核
IE
Trident内核
谷歌
webkit内核
火狐
Gecko内核
Safari
webkit内核
Opera
Blink内核
HTTP
TCP/IP协议族
应用层
FTP文件传输协议
HTTP超文本传输协议
DNS域名系统
IP地址<-->域名
传输层
TCP传输控制协议
三次握手详情
UDP用户报文协议
网络层
IP网际协议
链路层
HTTP报文内的HTTP信息
HTTP报文
起始行
所有HTTP报文都已起始行开始
请求报文
要做什么(请求行)
Request URL
请求的URL
Request Method
请求方法
Subtopic
Status Code
状态码
Subtopic
响应报文
发生了什么(响应行)
报文首部
请求报文首部
Accept (接受)
用户代理可以处理的媒体类型
Accept-Charset
优先字符集
Accept-Encoding
优先的内容编码
Accept-language
优先的语言
Authorization
web认证信息
Expect
期待服务器的特定行为
From
用户的电子邮箱
Host
请求资源的所在服务器
If-Match
比较实体标记(Etag)
if-Modified-Since
比较资源的更新时间
if-None-Match
比较实体标记(与if-Match相反)
if-Range
资源未更新时发送实体Byte的范围请求
if-Unmodified-Since
比较资源的更新时间(与if-Modified-Since相反)
Max-Forwards
最大传输逐跳数
Proxy-Authorization
代理服务器要求客户端的认证信息
Range
实体的字节范围请求
Referer
对请求中 URI 的原始获取方
Te
传输编码的优先级
User-Agent
HTTP客户端程序信息
响应报文首部
Accept-Ranges
是否接受字节范围请求
Age
推算资源创建经过时间
ETag
资源的匹配信息
Location
令客户端重定向至指定URL
Proxy-Authenticate
代理服务器对客户端的认证信息
Reter-After
对再次发起请求的时机要求
Server
HTTP服务器的安装信息
Vary
代理服务器缓存的管理信息
www-Authenticate
服务器对客服端的认证信息
通用首部
Cache
控制缓存的行为
Connection
逐跳首部/连接的管理
Date
创建报文的日期时间
Pragma
报文指令
Trailer
报文末端的首部一览
Upgrade
升级为其他协议
Via
代理服务器的相关信息
Warning
错误信息
实体首部
Allow
资源可以支持的HTTP方法
Content-Encoding
实体主体的适用的编码方式
Content-language
实体主体的自然语言
Content-length
实体主体的大小(单位:字节)
Content-Location
替代对应资源的URI
Content-Md5
实体主体的报文摘要
Content-Range
实体主体的位置范围
Content-Type
实体主体的媒体类型
Expires
实体主体过期的日期时间
Last-Modified
资源最后修改日期时间
报文实体
图片
视频
HTML文档
软件应用程序
信用卡事物
电子邮件
HTTP常见状态码
1XX
接受的请求正在处理
websorck 表示连接中
2XX 成功
200 ok
204 no content
206 partial content
3XX 重定向
301 Moved Permanently
永久移动到新位置
302 found
临时重定向
303 See Other
临时性重定向,且总是使用GET请求新的URL
304 Not Modified
上次请求后网页没有修改
4XX 客服端错误
400 Bad Request
服务器无法理解请求格式
客户端不应该再次请求
401 Unauthorized
请求未授权
403 Forbidden
禁止访问
404 Not Found
找不到如何与URL相匹配的资源
5XX 服务端错误
500 Internal Server Error
服务器端错误
503 Service Unavailable
服务器端暂时无法处理请求
(可能是过载或维护)
Web服务器
通信数据转发程序
代理
转发功能的应用程序(可以有多个)
作用
利用缓存技术减少流量
组织内部针对特定网站的访问控制
分类
缓存代理
首次访问会将数据缓存在代理服务器上
再次接受相同的请求会直接使用代理服务器上的资源
透明代理
不对报文最任何加工的代理
非透明代理
网关
转发其他服务器数据的服务器
作用
与代理相似,可以转为其他协议通信
提高通信安全性
隧道
相隔甚远的客户端和服务器之间进行中转,
并保持通信连接的程序
缓存
客户端和代理服务器
本地磁盘保存的资源副本
避免多次从源服务器获取
有效期
源服务器资源未更新
HTTPS
HTTP的不足
通信使用明文(不加密),内容可能会被窃听
HTTP报文使用明文方式发送
加密处理防止被窃听
通信加密
与SSL和TLS的组合使用,加密HTTP的通信内容
Subtopic
内容加密
将报问内容加密
不验证通信方的身份,因此有可能遭遇伪装
任何人都可以发起请求
无法判断响应的服务器是你请求的服务器
无法判断请求的客户端是你的客户端
无法判断通信的 是否有访问权限
无意义的请求也会照单全收,无法阻止DOS攻击,拒绝服务攻击
SSL解决办法
查明对手的证书
证书是第三方机构颁发,证明服务器和客户端存在
无法验证报文的完整性,所以可能已遭篡改
没有办法保证发出的请求和响应是相同的
HTTPS
HTTP+加密+认证+完整性保护
添加了加密以及认证的HTTP称为HTTPS
HTTPS通信步骤
https通讯流程.pdf
支付
微信支付
用户在商户APP中选择商品,提交订单,选择微信支付。
商户后台收到用户支付单,调用微信支付统一下单接口
统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。
参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。
商户APP调起微信支付。
商户后台接收支付通知。
商户后台查询支付结果。
支付宝支付
var b='1234567'.split("",3); //b=["0","1","2"]
列出所有本地分支
$git branch
收藏
收藏
0 条评论
下一页