详解Linux中的HTTP协议
HTTP( HyperText Transfer Protocol)超文本传输协议,是Internet上面最常用的协议,通过该协议,可以在浏览器浏览网上各种丰富多彩的文字与图片信息,
HTTP获取资源的方式,在http/0.9版的时候只有GET一种,直接从服务器获取资源到本地,
例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。 现在升级到http/1.0时,有GET、HEAD、PUT、TRACE、POST、DELETE、OPTIONS、CONNECTION等八种方法,并引入了MIME机制,
1、OPTIONS返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的 请求来测试服务器的功能性。
2、HEAD向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必 传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
3、GET向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app. 中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
3、POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。 POST请求可能会导致新的资源的建立和/或已有资源的修改。
4、PUT向指定资源位置上传其最新内容。
5、DELETE请求服务器删除Request-URI所标识的资源。
6、TRACE回显服务器收到的请求,主要用于测试或诊断。
7、CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
HTTP协议是基于客户机/服务器的(C/S)模式的,当一个客户端与服务器建立连接后,客户端向服务器发送一个请求,其格式一般为:统一资源标示符(URL)、协议版本号以及MIME信息,
1、URI: Uniform Resource Indentifier,(统一资源标示符) 定义全局范围内
统一:格式都是一样的,路径格式上的统一
2、 URL:Uniform Resource Location(统一资源定位符)是URI的一个子集
例: protocol://HOST:port/path/to/file
http://www.magedu.com/download/linux.tar.gz
3、MIME: Multipurpose Internet Mail Extension, 多用途互联网邮件扩展
SMTP: Simple Mail Transmission Protocol,(简单邮件传输协议) 早期只能纯文本
MIME: 将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将 其重新还原为原来的格式,还能够调用相应的程序来打开此文件
HTTP报文只有两种:请求报文和响应报文
HTTP报文的格式也有两种:
1、请求报文语法格式:
<method>:资源获取方法 <request-URL>:你请求的资源是什么<version>:对应请求资源 的版本号 <headers>(HTTP报文首部)
这里必须有一个空白行
<entity-body> (报文主体)
例:请求报文:request
GET / HTTP/1.1
Host(首部): www.magedu.com
Connection: keep-alive
2、响应报文语法:response
<version>版本号 <status>状态码 <reason-phrase>状态原因
<headers>相应首部域
空白行
<entity-body>主体
响应报文:response 当
例:响应报文:response
HTTP/1.1 200 OK
X-Powered-By(首部): PHP/5.2.17
Vary: Accept-Encoding,Cookie,User-Agent
Cache-Control(控制是否缓存): max-age=3, must-revalidate
Content-Encoding: gzip
Content-Length(长度): 6931
在HTTP中我们请求了一个文件不知道存不存在的文档,如果文档不存在,就发生错误了,就不能正常返回,为了让客户端迅速得知访问的文档是否存在,因此我们就引入了一个状态码<status>
状态吗分为五类
1、1xx: 纯信息
2、 2xx: “成功”类的信息 (200:, 201, 202)
3、 3xx:重定向类的信息 (301:永久重定向, 302:临时重定向, 304:没有发生任何改变)
4、 4xx: 客户端错误类的信息 (404:)
5、 5xx:服务器端错误类的信息
HTTP协议是基于tcp的,每一个tcp的建立都需要三次握手,四次断开,
HTTP协议的几种特性:
1、事先创建进程;
2、按需维持适当的进程
3、模块块设计,核心比较小,各种功能都模块添加(包括php)
4、支持运行配置,支持单独编译模块
5、支持多种方式的虚拟主机配置
Socket IP:Port
要想实现多种不同方式的虚拟主机就必须遵从下列几个条件:
1、只有一台物理服务器
2、Web程序也只有一个,却可以服务多个不同的站点
3、基于IP的虚拟主机;
4、基于端口的虚拟主机;
5、基于域名的虚拟主机;
例:GET /download/linux.tar.bz2 HTTP/1.0
Host: www.magedu.com
报文传到服务器端后HTTP协议的几种功能:
1、支持https协议 (mod_ssl)
2、支持用户认证
3、支持基于IP或主机名的ACL
4、支持每目录的访问控制,访问主站点不需要密码,如果访问某个路径就需要密码
5、支持URL重写,/image/a.jpeg, /bbs/images/abc.jpeg
HTTP协议的使用,它本身是受SELinux控制的,所以事先让其处于permssive, disabled),先看一下当前的permissive,并编辑一下/etc/selinux/config这个脚本
安装包完成以后,/usr/sbin/httpd(MPM: prefork(多到处理模块))
httpd: root, root (master process)
httpd: apche, apache (worker process)工作进程
/etc/rc.d/init.d/httpd
Port: (80/tcp), (ssl: 443/tcp)
/etc/httpd: 工作的根目录,相当于程序安装目录
/etc/httpd/conf: 配置文件目录
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/modules: 模块目录
/etc/httpd/logs --> /var/log/httpd: 日志目录
日志文件有两类:访问日志:access_log,错误日志:error_log
把它设成开机自动重启,查看80之后并查看一下httpd有多少个进程pa aux | grep httpd
HTTP协议:
directive(指令) value
指令不区分字符大小写
value则根据需要有可能要区分大小写
在HTTP协议中所用到的:MPM: Multi Path Modules(多处理模块)常见的有三种模型
1、prefork模型 (一个请求用一个进程响应)
2、worker模型 (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))
3、event模型 (一个进程处理多个请求)