Web服务(Web Service)是基于XML和HTTPS的一种服务,其通信协议主要基于SOAP,服务的描述通过WSDL,通过UDDI来发现和获得服务的元数据。
http协议:Hyper Text Transfer Protocol 超文本传输协议,监听在80端口上;
早期的http是纯文本,超链接,最常用的版本是0.9并且引入了mime协议使得浏览图像成为可能;
mime:全称为Multipurpose Internet Mail Extensions协议,中文名称为“多用途互联网邮件扩展,它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049(注意RFC1521和RFC1522是它的过时版本)。MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。
http 1.0版本后引入了mime
html:Hyper Text Markable Language 超文本标记语言;
css:样式/模版;
web的多个对象组合起来显示在web页面上;
http 1.1版本
URI:Uniform Resource Identifier统一资源标识符,给互联网上的客户端或服务器定义一个唯一的标识,包括硬件资源、软件资源或文件;
URL:Uniform Resource Locality 统一资源定位符,是URI的子集;ftp://172.16.0.1/pub/gls/server.repo protocol://server[:PORT]/PATH(相对与服务工作的位置) http是无状态(stateless)的协议,http的一次请求跟其它请求没关系; http 1.1版本引入了(keepalive)长连接和短连接机制,也称为保持连接; 定义空闲超时时长,定义最大请求次数; 缓存 用户多次访问同一个页面,将被访问页面放到缓存中并且要定义缓存时长; http协议资源获取的方法: GET 最常用的获取资源的方法; HEAD 主要用来获取http协议的响应首部;curl -I http://172.16.0.1/bbs POST 提交表单、在线注册等就是POST; PUT 上传,基于WebDAV(分布式版本协作); DELETE 删除,基于WebDAV(分布式版本协作);很危险,企业中很少用,除非在企业内部; http协议响应状态码: 1xx:纯粹的说明信息; 2xx:正常响应信息; 3xx:URL重定向信息; http://172.16.0.1/index.html--> http://172.16.0.1/home.html(告诉页面转移) 4xx:暂时性错误,客户端错误; 5xx:永久性错误,没有权限时会提示; 动态网站:服务器端根据用户请求的不同可以在本地执行一段程序并返回不同的执行结果; CGI:Common Gateway Interface通用网关接口,是一种协议,是web服务器与外部程序进行交互的一种管道; 动态网站页面开发语言: 开发语言分两类: 编译型:C、C++ 也称为静态型语言; 解释型:bash、perl、python 执行速度慢,效率低; perl和python有时会用到suid,会带来安全隐患; php以嵌入的方式写在html文档中,靠php解释器运行; asp.net用C#写的,靠.net framework运行; jsp靠jvm(java虚拟机)运行,java的子集; 数据库: 层次型数据库; 网格型数据库; 关系型数据库;是现在的主流; 非关系型数据库; web服务器种类: news.netcrfat.com 最常用的调查网站; Apache Nginx linux常用; Google Microsoft httpd.apache.org:apache的官方网站; apache Web server 早期是NCSA www webserver apache现在是个软件基金会 apache目前最新的版本为2.0、2.2和2.4 Redhat系列系统上httpd受Selinux控制的,所以建议关闭Selinux,不然会报错: 关闭及查看Selinux的命令是: setenfore 0 关闭Selinux; getenfore 查看Selinux的状态; setenforce 0(只是临时生效的) 设定Selinux开机自动关闭,修改/etc/sysconfig/selinux配置文件SELINUX=enforcing改为SELINUX=permissive或SELINUX=disabled即可; apache特性: 支持最新的HTTP/1.1通信协议 拥有简单而强有力的基于文件的配置过程 支持通用网关接口 支持基于IP和基于域名的虚拟主机 支持多种方式的HTTP认证 集成Perl处理模块 集成代理服务器模块 支持实时监视服务器状态 定制服务器日志 支持服务器端包含指令(SSI) 支持安全Socket层(SSL) 提供用户会话过程的跟踪 支持FastCGI 支持ssl,https; 支持url rewrite; 支持alias; 这些功能都是通过模块实现的; apache支持MPM(多道处理模块),其出现的目的是让apache server有着更强的实用性和能够更好的与它所依赖的平台的特性进行交互并能够实现快速响应用户的一种机制;apache中的MPM有多种,其中最著名的有以下两种:
worker 每一个请求用一个线程响应;在一个进程中创建多个线程,用每一个线程去响应用户的请求; 进程有多个执行流;每个流就称为一个线程;线程也是CPU资源分配的单位;线程可以共享同一个进程;线程是进程的子单位,响应速度优于进程,但是当线程去改变一个文件时,其它线程就不能访问该文件了,就是说当文件正在被线程写入时是不能被读的(有写锁和读锁控制,缺点是会出现锁竞争; linix线程和进程是不明显区分开的,所以线程响应速度并不比进程快; 进程靠自己生成的子进程中的各个线程来响应用户请求; 但是线程稳定性较差,如果一个用户请求导致一个线程崩溃,容易产生连动效应导致其它线程同时崩溃; 定义进程能打开最多的线程数; prefork 每一个请求用一个进程响应,默认apche用此种机制; 先定义生成一定数量的空闲进程;用户请求来后直接将空闲进程拿来用;多余的空闲进程由父进程收回; MAXSpare 定义最多空闲进程多少个; MINSpare 定义最少空闲进程多少个; MaxClient 定义最大的客户端请求个数; prefork 稳定性极佳; module 模块的装载是基于DOS(Dynamic Shared Object动态共享对象)实现; nginx 一个进程同时响应多个用户的请求,基于事件驱动实现,不靠线程实现,占用内存较小,效率极高; 1、Apache安装后生成的配置文件介绍: mod_开头的都是httpd服务的软件包; apache的软件包的名称:httpd 服务名称:httpd 脚本:/etc/rc.d/init.d/httpd 脚本配置文件:/etc/sysconfig/httpd 配置文件:/etc/httpd/conf/httpd.conf(主配置文件)和/etc/httpd/conf.d/*.conf /usr/bin/ab 压力测试工具; /var/log/httpd 日志文件; /etc/httpd/conf.d/welcome.conf 测试页面; /var/www/html 默认存放web页面的位置; httpd -l 查询httpd服务装载的模块; httpd.worker -l 查询http服务使用worker时默认装载的模块; prefork的定义字段: 第一个字段:服务器刚启动时启动的空闲进程数; 第二个字段:最少允许的空闲进程数; 第三个字段:最大允许的空闲进程数; 第四个字段:每一个进程最多能响应多少个用户请求; 第五个字段:同时在线的客户端的个数; 第六个字段:每一个子进程最多能响应多少个用户请求; 2、定义服务监听的地址和端口:监听端口可以是多个 listen IP地址:端口号; ...... 3、如何装载apache模块; loadModule module_name /path/to/moudle 4、定义服务器的工作目录; serverroot 5、apache支持每目录的属性配置; <Directory “PATH/to/somewhere”> </Directory> 6、指定网页文件所在位置; DocementRoot “/var/www/html” 配置文件测试命令; httpd -t service httpd configtest 定义服务器识别的目录的默认主页: DirectoryIndex index.html index.html.var 有先后顺序; 简单访问控制的实现; Order allow,deny 写在后面的是默认的; Allow from all AllowOverride 允许覆盖,后面写为authConfig时表示基于密码访问; AccessFilename .htaccess 基于正则表达式的; EnableMMAP 是否允许 LogLevel 记录到错误日志中的日志级别; 7、自定义日志格式: LogFormt referer 记录访问路径; agent 用户客户端访问来源; CustomLog logs/access_log combined 定义日志使用的格式; 8、路径别名: http://172.16.0.1/forum------>http://172.16.0.1/web/forum alias /forum “/web/forum” 定义/forum的路径名称为/web/forum aliasMatch ^/p_w_picpaths/(.*$) /web/p_w_picpaths/$1 ($1引用前面的括号中的内容); 9、CGI 路径别名: ScriptAlias /cgi-bin/ “/web/cgi-bin/” 注意:脚本中第一行必须写如:echo “Content-type: text/html”不然脚本执行错误; 10、认证访问: basic 认证:wendy:redhat,不是很安全; 摘要认证:md5 sha1 很少有浏览器支持,很少用,不容易实现; 表单认证:不容易实现; basic认证机制是通过每目录来实现的,该目录和子目录都要输入密码访问;
Require valid-user 允许所有的用户都能登录;
Require User USERNAME 仅允许单个用户登录;Require Group 组名 仅允许组登录;
htpasswd -c /etc/httpd/conf/ .htpasswd USERNAME 第一次输入可以,第二次不要用-c选项,不然会清空原有里面的内容; htpasswd -m /etc/httpd/conf/ .htpasswd USERNAME 表示以md5格式加密; htpasswd -d USERNAME 删除用户; htdbm Enablesendfile on/off 能提高服务器性能,在系统调优中很常用; basic认证和摘要认证的区别: 数据在服务其中存储格式的不同; 如何实现动态服务请求,如何实现某脚本程序在其脚本执行环境中运行并返回结果: PHP与Apache结合起来实现的方式: 第一:CGI:web服务器父进程生成脚本执行子进程通过CGI去执行环境执行脚本,然后返回结果并由父进程收回并销毁执行子进程; 第二:Module:将脚本执行环境直接做进web服务器中的一个模块;这是最常见的模式,也是Apache的默认方式; 第三:FastCGI:专门由一台应用程序服务器父进程生成子进程来响应web服务器子进程的请求,并返回结果给web服务器,web服务器可以有多台,这样来实现负载均衡,执行脚本在web服务器上,另外也可以在后台有一台数据库服务器,这样就是三层结构,但是这样就要通过网卡发送电信号然后转换,速度就会变的很慢; 虚拟主机:一个web服务器被划分成了多个站点,其实这就叫虚拟化; 如何访问不同的站点: 1、 使用不同的端口,相同的ip地址,端口不容易识别; 2、 使用不同的ip地址,相同的端口,但是IP资源紧缺; 3、 使用不同的主机名称,通过http报文封装起来并加上头部来识别每个站点主机; 设定默认虚拟主机:切记要关闭Selinux; 第一种方式:监听多个端口;
第二种方式:
第三种方式:2.2版本中必须开启NameVirtualHost *:80,并且后面的*:80格式必须与后面的配置文件一致,2.4版本中不需要开启该项;
上述三中方式都可以使不同的主机有不能的日志文件(错误日志和访问日志):
定义主机别名:
定义路径别名:
定义脚本别名:
定义访问控制:
定义认证访问:
自动在配置文件中生成一批虚拟主机:
定义默认虚拟主机: 第一种方法:
第二种方法:
补充:将虚拟主机的配置信息放在数据库中(第三方模块),需要用到SQL数据库,现在不建议做:
httpd服务要实现ssl即https需要mod_ssl模块;
https监听在443端口上; https会话建立的过程: 客户端首先发起ssl会话协商请求然后进行ssl协商(双方支持什么加密算法、密钥交换等); 服务器端发送自己的证书给客户端; 客户端接收到证书要验证服务器端证书; 客户端生成一对对称密钥并用服务器端的公钥加密发送之; 服务器端把客户端请求的资源用对称密钥加密后发送给客户端; web服务器基于名称的虚拟主机是基于httpd协议的请求首部实现的; SSL的协商过程是基于IP地址是实现的; https协议不支持基于端口或名称的虚拟主机; (注:ssl的协商过程只能在一台虚拟主机上,因为SSL的协商过程是基于IP地址是实现的) https配置方法: 1、 启用mod_ssl模块; 2、 配置一个使用ssl的虚拟主机,需要用到服务器证书和私钥; 3、 客户端需要用到CA证书; php的模块解释-下面以php53为例: php53 php核心框架; cli 命令行接口; common php的通用组件; gd 绘图工具; mbstring 多字节字符串; snmp 基于snmp协议; xml 扩展标记语言解析的组件; mysql php脚本与sql数据库交互的接口; PHP及其它脚本语言介绍: php 早期称为Personal Home Page(个人主页); asp:Active Server Page 动态服务页面; jsp:java Server Page java 服务页面; JavaScrit 与java没有关系:是什么,在什么地方用,谁来用,简单怎么用;(自己找,提问);CSS} JavaScrit解释及与java的区别: 编辑本段区别: Java语言是为了辅助Java的网页程式方面的设计,LiveScript语言是JavaScript语言的前身,JavaScript刚开始只是应用在Netscape浏览器。 编辑本段差别: 1.JavaScript是一种动态、弱类型、基于原型的语言,通过浏览器可以直接执行;而Java是面向对象的编程语言,必须先进行编绎和连接等动作才可执行。 2.JavaScript编写在HTML文件中,直接查看网页的原始码,就可以看到JavaScript程式,所以没有保护,任何人都可以透过HTML文件复制程式;而Java应用在网页的程式称为Java Applet(Applet是[小程序]的意思),是和HTML文件分开的。 3.JavaScript的结构较为自由松散,而Java和正统的编程语言一样,结构较为严谨。 4.JavaScript不具有读写档案及网络控制等功能,Java则提供了这些功能,但是JavaScript在网页内容的控制和互动性方面,比较方便快捷的。 5.javascript多运行于客户端,而java多运行于服务器端。 1、运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符、算术运算符、比较运算符、逻辑运算符、条件运算、位操作运算符和字符串运算符。 2、表达式 运算符和操作数的组合称为表达式,通常分为四类:赋值表达式、算术表达式、布尔表达式和字符串表达式。 3、语句 Javascript程序是由若干语句组成的,语句是编写程序的指令。Javascript提供了完整的基本编程语句,它们是: 赋值语句、switch选择语句、while循环语句、for循环语句、do while循环语句、break循环终止语句和continue循环中断语句。 4、函数 函数是命名的语句段,这个语句段可以被当作一个整体来引用和执行。使用函数要注意以下几点: 1)函数由关键字function定义; 2)函数必须先定义后使用,否则将出错; 3)函数名是调用函数时引用的名称,它对大小写是敏感的,调用函数时不可写错函数名; 4)参数是传递给函数使用或操作的值或对象,它可以是常量,也可以是变量,也可以是类的对象; 5)return语句用于返回函数或表达式的值,当函数返回值类型不为空时,必须有,如果返回值类型为空,没有return项。 5、对象 Javascript的一个重要功能就是基于对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。 一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象。比如要设定网页的背景颜色,所针对的对象就是document,所用的属性名是bgcolor,如document.bgcolor="blue",就是表示使背景的颜色为蓝色。 6、事件 用户与网页交互时产生的操作,称为事件。绝大部分事件都是用户的动作所引发,如:用户按鼠标的按键,就产生 7、变量 如 var myVariable = "some value"; CSS介绍: 级联样式表(Cascading Style Sheet)简称“CSS”,通常又称为“风格样式表(Style Sheet)”,它是用来进行网页风格设计的。比如,如果想让链接字未点击时是蓝色的,当鼠标移上去后字变成红色的且有下划线,这就是一种风格。通过设立样式表,可以统一地控制HTML中各标志的显示属性。级联样式表可以使人更能有效地控制网页外观。使用级联样式表,可以扩充精确指定网页元素位置,外观以及创建特殊效果的能力。 php执行的简单原理: php是一种脚本语言,比bash更强大,自身是一种独立的编程语言,是解释执行的,效率不高,为提高效率就有了php加速器,php先由Zend进行编译转换成可执行的opcode码,然后在php引擎上执行;第一次访问页面时php加速器缓存opcode,第二次访问直接访问缓存;缓存到内存中,并且opcode对象超出有效期后可以释放缓存; php加速器分为以下几种: ZendOptimizer、(xcache、APC、eAccelarator开源解决方案,性能不相上下); PHP到php5后称为PHP is Hypertext Preprocessor(PHP是超文本预处理器); 用PHP开发的网站: Wordppress 个人博客建站工具; PHPBB 浏览器; discuz 被腾讯收购; phpwind 被阿里巴巴收购; pudal Linux和apache、php、mysql组合成LAMP服务器运行平台; AMP三者的关系:P指的PHP、Perl、Python; A:httpd仅能提供静态内容; DB:MySQL,PostgreSQL php完全可以嵌入到html文档中;php格式 <h1> …………… </h1> <?php ………… ?> phpinfo(); php内置的一个函数;