详解Linux中的HTTP协议

HTTP( HyperText Transfer Protocol)超文本传输协议,是Internet上面最常用的协议,通过该协议,可以在浏览器浏览网上各种丰富多彩的文字与图片信息,

HTTP获取资源的方式,在http/0.9版的时候只有GET一种,直接从服务器获取资源到本地,

例如GET /p_w_picpaths/logo.gif HTTP/1.1,表示从/p_w_picpaths目录下请求logo.gif这个文件。               现在升级到http/1.0时,有GETHEADPUTTRACEPOSTDELETEOPTIONSCONNECTION等八种方法,并引入了MIME机制,

1、OPTIONS返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*' 请求来测试服务器的功能性。     

2HEAD向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必 传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。    

3GET向特定的资源发出请求。注意:GET方法不应当被用于产生副作用的操作中,例如在web app. 中。其中一个原因是GET可能会被网络蜘蛛等随意访问。    

3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。 POST请求可能会导致新的资源的建立和/或已有资源的修改。    

4PUT向指定资源位置上传其最新内容。    

5DELETE请求服务器删除Request-URI所标识的资源。     

6TRACE回显服务器收到的请求,主要用于测试或诊断。    

7CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器   

    HTTP协议是基于客户机/服务器的(C/S)模式的,当一个客户端与服务器建立连接后,客户端向服务器发送一个请求,其格式一般为:统一资源标示符(URL)、协议版本号以及MIME信息,

1URI: Uniform Resource Indentifier,(统一资源标示符) 定义全局范围内

     统一:格式都是一样的,路径格式上的统一

2URLUniform Resource Location(统一资源定位符)是URI的一个子集

例: protocol://HOST:port/path/to/file

http://www.magedu.com/download/linux.tar.gz

3MIME: 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>

状态吗分为五类

11xx: 纯信息

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、只有一台物理服务器

   2Web程序也只有一个,却可以服务多个不同的站点

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重写,/p_w_picpath/a.jpeg, /bbs/p_w_picpaths/abc.jpeg

HTTP协议的使用,它本身是受SELinux控制的,所以事先让其处于permssive, disabled),先看一下当前的permissive,并编辑一下/etc/selinux/config这个脚本

 

详解Linux中的HTTP协议_Linux 

详解Linux中的HTTP协议_HTTP协议_02

安装包完成以后,/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

 

详解Linux中的HTTP协议_HTTP协议_03

HTTP协议:

directive(指令) value

指令不区分字符大小写

value则根据需要有可能要区分大小写

HTTP协议中所用到的:MPM: Multi Path Modules(多处理模块)常见的有三种模型

1prefork模型 (一个请求用一个进程响应)

2worker模型  (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))

3event模型    (一个进程处理多个请求)