05 2020 档案
摘要:HTTP的缺点 HTTP 协议设计的初衷就是简单方便,但是随着 Web 的发展和交互的复杂,也引入了一些安全性问题: 通信使用明文,内容可能会被窃听:HTTP 协议本身不具备加密功能,所以无法对通信整体(请求和响应的内容)进行加密,即 HTTP 报文使用明文方式发送。按照 TCP/IP 协议族的工作
阅读全文
摘要:CDN 概述 前面我们介绍了 HTTP 缓存的原理,以及基于浏览器缓存和网关缓存来实现 HTTP 缓存,浏览器缓存由于其局限性并不是主流的缓存实现方案,而网关缓存虽然解决了浏览器缓存的问题,但是所有请求仍然要发送到服务器部署的数据中心,而我们的用户是分散在天南海北的,距离数据中心越远网络延迟越大,能
阅读全文
摘要:首先需要声明的是,我们这里讨论的缓存是基于 HTTP 协议实现的缓存,这些缓存通常存储在 HTTP 客户端,通过请求头或响应头来协商和标识,而不是那些存储在 Memcached 或者 Redis 服务器中的缓存,后者更多用来缓存从数据库中获取的数据。 为什么需要缓存 在通过客户端访问服务器时,对于某
阅读全文
摘要:HTTP 协议的请求和响应报文中必定包含 HTTP 首部,首部内容为客户端和服务器分别处理请求和响应提供所需要的信息,对于客户端普通用户来说,这些信息中的大部分内容都无须亲自查看。 而 HTTP 报文首部又分为起始行和首部字段两部分,请求报文的起始行包含 HTTP 请求方法、URL资源、客户端 HT
阅读全文
摘要:HTTP 报文简介 用于 HTTP 协议交互的信息被称为 HTTP 报文,请求端(客户端)发起的 HTTP 报文叫做请求报文,响应端(服务器端)发出的 HTTP 报文叫做响应报文。请求报文会向 Web 服务器请求一个动作,响应报文会将请求的处理结果返回给客户端。 HTTP 报文本身是由多行(用CR+
阅读全文
摘要:前面介绍了 Web 的由来与兴起,以及承载 Web 通信的 HTTP 协议的总体概述,接下来我们将围绕 HTTP 协议的细节具体展开讨论,包括 HTTP 报文、请求、响应、Web 服务器、HTTPS、认证、构建 Web 内容的技术以及 Web 安全等,首先我们从 Web 资源的入口 —— URL 开
阅读全文
摘要:HTTP MDN web docs https://developer.mozilla.org/zh-CN/docs/Web/HTTP MDN Web Docs(旧称Mozilla Developer Network、Mozilla Developer Center,简称MDN)是一个汇集众多Moz
阅读全文
摘要:电子邮件起源 在互联网中,提供电子邮件服务的协议叫 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),SMTP 为了实现高效发送邮件,在传输层上使用了 TCP 协议。 早期的电子邮件就是通过通信双方建立 TCP 连接实现的,发送端写好邮件后,会保存到硬盘,然后
阅读全文
摘要:FTP 的英文全称是 File Transfer Protocol,意为文件传输协议,也就是在两个相连的计算机(通常是本地主机与服务器)之间进行文件传输的协议 FTP 底层原理 FTP 使用两个 TCP 连接实现文件传输:一个 TCP 连接用于控制,另一个 TCP 连接用于数据传输。 控制主要包含用
阅读全文
摘要:远程登录协议 通过 TELNET 模拟实现 HTTP 和 SMTP 客户端 所谓远程登录指的是从本地计算机登录到网络另一端的计算机(通常是服务器或者云主机实例),远程登录成功后,就可以直接使用这些主机上的应用,还可以对这些计算机进行参数配置。 适用于远程登录的协议主要有两种:TELNET 和 SSH
阅读全文
摘要:应用层协议概述 前面介绍的 IP 协议、TCP 协议和 UDP 协议分别属于网络层和传输层协议,都是属于网络通信中的基础部分,接下来,要开始介绍网络通信中应用层协议,应用层协议非常丰富,也是我们日常打交道最多的部分: 不论是我们前面介绍过的 DNS 域名解析协议,还是我们日常 Web 网站依赖的 H
阅读全文
摘要:套接字底层原理 套接字简介 位于应用层的应用程序在基于 TCP 协议或 UDP 协议进行通信时,需要用到操作系统提供的类库,这种类库一般称为 API(Application Programming Interface,应用编程接口)。 使用 TCP 或 UDP 时,又会广泛使用到 Socket(套接
阅读全文
摘要:TCP 简介与报文格式 TCP 简介 前面学院君已经介绍过传输层有两个具有代表性的协议,分别是 UDP 协议和 TCP 协议,上一篇我们已经介绍过 UDP 协议,它是面向无连接的不可靠传输协议,但是没有复杂的设计也就意味着比较简单高效。今天我们开始介绍 TCP 协议,与 UDP 协议不同,TCP 协
阅读全文
摘要:UDP 协议简介 UDP 的全称是 User Datagram Protocol,中文名是用户数据报协议。 UDP 提供面向无连接的通信服务,是不具有可靠性的数据报协议。 UDP 虽然可以确保发送消息的大小,但不能保证消息一定会到达,传输途中如果出现丢包,UDP 不负责进行重发。因此,应用有时候会根
阅读全文
摘要:传输层的定义及通信处理 我们前面介绍 IP 报文首部格式的时候提到其中有一个协议字段(Protocol),用来标识网络层的上一层所采用的是哪一种传输层协议,根据这个字段的协议号就可以识别 IP 传输的数据部分究竟是 TCP 的内容还是 UDP 的内容。 同样,传输层的 TCP 和 UDP,为了识别自
阅读全文
摘要:什么是微服务架构 在网络协议的 RPC 协议部分,我们已经简单介绍了微服务诞生的原因,以及底层 RPC 框架的运行原理,今天开始,我们正式开始微服务架构分享之旅,在此之前,我们需要明确微服务架构的概念。 微服务 vs 服务化 其实在微服务之前,还有服务化的概念,主要应用在 Java 项目中,把传统单
阅读全文
摘要:高潮性耗竭 尽管大部分顺势的长趋势K线都是强势信号,但如果一根K线过长,往往代表高潮性耗竭(买入或卖出高潮)。 比如说,在上升趋势中,它通常意味着最后一批买家入场。这是一种恐慌买盘,买家愿意以任何价格回补亏损的空头头寸( 高潮的发生通常是由于姗姗来迟的弱势交易者最终入场,以及做错方向的最后一批交易者
阅读全文
摘要:静态路由与动态路由 IP 地址与路由控制 简单来说,互联网就是通过路由器连接的网络组合而成,为了让数据包正确到达目标主机,路由器必须在途中进行正确的转发。这种向正确的方向转发数据所进行的处理就叫做路由控制或者简称路由。 路由器根据路由控制表(可以简称为路由表)转发数据包,它根据所收到的数据包中目标主
阅读全文
摘要:宽带上网是如何实现的 网络层是 TCP/IP 的心脏,主要负责终端节点之间的通信,把网络包从源主机发送到目标主机,所以这种通信也叫点对点的通信。这一层主要包含两个协议:IP 协议和 ICMP 协议,我们先来介绍 IP 协议。 网络层的作用 我们上一篇介绍的数据链路层只能在同一种数据链路上的节点之间进
阅读全文
摘要:从物理层到链路层 在计算机网络中,物理层负责将光电信号转化为 0、1 比特流用来表示信息,数据链路层把这些信息集合为一个叫做「帧」的块,再进行传输。 TCP/IP 未对数据链路层及以下部分(物理层)做定义,因为 TCP/IP 以这两层的功能是透明的为前提,但是,数据链路层的知识对于深入理解 TCP/
阅读全文
摘要:计算机网络协议基础 这里的网络协议主要围绕 Web 应用展开,主要讲述的是 TCP/IP 协议簇,如 IP、TCP、UDP、HTTP、DNS 协议等,在讲述 TCP/IP 协议之前,我们先简单概述下计算机网络的发展历史及 OSI 参考模型。 计算机网络的发展经历了单机到联机、局域网到广域网、私有网路
阅读全文
摘要:PHP 代码早期使用 FTP 部署到生产环境,不过这种方式显然不适合集群部署,也不安全,本教程主要讨论如何使用现代化工具自动部署,这种方式简单、可预知结果,而且可逆。 版本控制 把代码纳入版本控制是现代开发人员的基本素养,我们可以使用 Git,也可以使用 SVN,对于应用开发者来说,版本控制有助于记
阅读全文
摘要:上一篇我们讨论了如何配置运行 PHP 应用的服务器,接下来我们要讨论的是如何调优服务器,让 PHP 应用的性能维持在更高水平。 默认安装的 PHP 就像是在百货商店里购买的普通套装,虽然合身,却不完美。调优的 PHP 就像是定做的套装,完全匹配你的尺寸。不过,需要注意的是,调优 PHP 只是提升 P
阅读全文
摘要:PHP-FPM **PHP-FPM(PHP FastCGI Process Manager),是用于管理 PHP 进程池的软件,用于接收和处理来自 Web 服务器(如Nginx)的请求。**PHP-FPM会创建一个主进程(通常以操作系统中根用户的身份运行),控制何时以及如何把 HTTP 请求转发给一
阅读全文
摘要:主机 PHP 应用开发好了之后,还需要部署到远程主机上,才能让用户访问我们提供的服务。一般来说,目前市场上提供的主机有四种:共享服务器、虚拟私有服务器(VPS)、专用服务器和 PaaS。每种主机适用场景不同,相应的价格差距也很大。 共享服务器 这种最便宜,一般来说这种适用于非开发者部署网站,比如非程
阅读全文
摘要:错误和异常是很强大的工具,能帮助我们预期意料之外的事,使用优雅的方式捕获问题。不过,错误和异常很相似,容易让人混淆,二者都表示出问题了,都会提供错误信息,而且都有错误类型。然而,错误出现的时间比异常早,错误会导致程序脚本停止执行,如果可能,错误会委托给全局错误处理程序处理,有些错误是无法恢复的。对于
阅读全文
摘要:Clean Code PHP 目录 介绍 变量 使用见字知意的变量名 同一个实体要用相同的变量名 使用便于搜索的名称 (part 1) 使用便于搜索的名称 (part 2) 使用自解释型变量 避免深层嵌套,尽早返回 (part 1) 避免深层嵌套,尽早返回 (part 2) 少用无意义的变量名 不要
阅读全文
摘要:简介 LaraDock 致力于简化创建开发环境过程,能够帮助我们在 Docker 上快速搭建 PHP 开发环境。 它预装了 Docker 镜像,为我们提供了一站式的开发环境,而不需要再去在本地机器安装 PHP、Nginx、MySQL 以及其他很多开发过程中需要的软件。 特点: 在 PHP 版本:7.
阅读全文
摘要:在现代 PHP 特性中,流或许是最出色但使用率最低的。虽然 PHP 4.3 就引入了流,但是很多开发者并不知道流的存在,因为人们很少提及流,而且流的文档也很匮乏。PHP 官方文档对流的解释如下: 流的作用是提供统一的公共函数来处理文件、网络和数据压缩等操作。简单而言,流是具有流式行为的资源对象,也就
阅读全文
摘要:mbstring 扩展 我们所说的多字节字符指的是不在传统的 128 个 ASCII 字符集中的字符,比如中文字符。而 PHP 中处理字符串的函数默认假设所有字符都是 8 位字符,占用一个字节,如果使用这些 PHP 原生的字符串处理函数处理包含多字节字符的 Unicode 字符串,会得到意料之外的错
阅读全文
摘要:PHP 支持多种数据库,如 MySQL、PostgreSQL、SQLite 和 Oracle 等,并且这些数据库都提供了用于 PHP 和相应数据库之间通信的扩展,如 等。这样造成的一个问题是如果项目中使用了多种数据库,需要安装并使用多种 PHP 数据库扩展和接口,增加了学习和维护的成本。为此,从 P
阅读全文
摘要:处理日期和时间需要考虑很多事情,例如日期的格式、时区、闰年和天数各异的月份,自己处理太容易出错了,我们应该使用PHP 5.2.0引入的DateTime、DateIntervel和DateTimeZone这些类帮助我们创建及处理日期、时间和时区。 设置默认时区 首先我们要为PHP中处理日期和时间的函数
阅读全文
摘要:随着在线攻击的增多,密码安全越来越重要。作为开发者我们要担负起安全管理、计算哈希和存储用户密码的责任,不管应用是简单的游戏还是绝密商业文件的仓库,都要做到这一点。PHP内置了一些工具,让保护密码变得更加容易,本节我们就来讨论如何根据现代的安全措施来使用这些工具。 密码保护三原则 绝对不能知道用户的密
阅读全文
摘要:PHP 转义实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码。 我们可以使用前面提到的 函数转移输出,该函数的第二个参数一定要使用 ,让这个函数转义单引号和双引号,而且,还要在第三个参数中指定合适的字符
阅读全文
摘要:PHP原生实现 验证输入数据也很重要,与过滤不同,验证不会从输入数据中删除信息,而只是确认用户输入是否符合预期。如果输入的是电子邮件地址,则确保用户输入的是电子邮件地址;如果需要的是电话号码,则确保用户输入的是电话号码,这就是验证要做的事儿。 验证是为了保证在应用的存储层保存符合特定格式的正确数据,
阅读全文
摘要:我们在开发应用时,一般有个约定:不要信任任何来自不受自己控制的数据源中的数据。例如以下这些外部源: $_GET $_POST $_REQUEST $_COOKIE $argv php://stdin php://input file_get_contents() 远程数据库 远程API 来自客户端的
阅读全文
摘要:什么是组件 组件是一组打包的代码,是一系列相关的类、接口和Trait,用于帮助我们解决PHP应用中某个具体问题。例如,你的PHP应用需要收发HTTP请求,可以使用现成的组件如guzzle/guzzle实现。我们使用组件不是为了重新实现已经实现的功能,而是把更多时间花在实现项目的长远目标上。 优秀的P
阅读全文
摘要:从 PHP 5.4.0 起,PHP内置了Web服务器,这对于认为需要Apache或Nginx才能预览PHP应用的开发者来说又是一个隐藏功能。这个内置的Web服务器不应该用于生产环境,但对于本地开发来说是个极好的工具。Laravel Valet 起初就是使用这个内置的服务器,但是在1.1.0版本后将其
阅读全文
摘要:概述 字节码缓存不是PHP的新特性,有很多独立的扩展可以实现,比如APC、eAccelerator和Xache等,但是截至目前这些扩展都没有集成到PHP内核,从PHP 5.5.0开始,PHP内置了字节码缓存功能,名为Zend Opcache。 开始之前,我们先来看看什么是字节码缓存,以及字节码缓存的
阅读全文
摘要:概述 闭包和匿名函数在PHP 5.3.0中引入,这两个特性非常有用,每个PHP开发者都应该掌握。 闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。 匿名函数其实就是没有名称的函数,匿名函数可以赋值给变量,还能像其他任何PHP函数对象那样传递。不过匿名函数仍
阅读全文
摘要:概述 生成器是 PHP 5.5 引入的新特性,但是目测很少人用到它,其实这是个非常有用的功能。 生成器和迭代器有点类似,但是与标准的PHP迭代器不同,PHP生成器不要求类实现Iterator接口,从而减轻了类的开销和负担。生成器会根据需求每次计算并产出需要迭代的值,这对应用的性能有很大的影响:试想假
阅读全文

浙公网安备 33010602011771号