天下武功尽出LAMP之httpd篇(1)

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

超文本标记语言(英文:HyperText Markup Language,HTML)是为"网页创建和其它可在网页浏览器中看到的信息"设计的一种标记语言。HTML被用来结构化信息例如标题、段落和列表等等,也可用来在一定程度上描述文档的外观和语义。1982年由蒂姆伯纳斯-李创建,由IETF用简化的SGML(标准通用标记语言)语法进行进一步发展的HTML,后来成为国际标准,由万维网联盟(W3C)维护。

http协议版本:

HTTP/0.9:原型版本,功能简陋

HTTP/1.0:第一个广泛使用的版本,支持MIME

HTTP/1.1: 增强了缓存功能,目前使用最广泛成熟的版本

HTTP/2.0:HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议。它由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。[1]该组织于2014年12月将HTTP/2标准提议递交至IESG进行讨论[2],于2015年2月17日被批准。[3] HTTP/2标准于2015年5月以 RFC 7540 正式发表

http一次请求过程:

(1) 建立或处理连接:接收请求或拒绝请求

(2) 接收请求:

接收来自于网络的请求报文中对某资源的一次请求的过程;

并发访问响应模型(Web I/O):

单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;

多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

复用I/O结构:一个进程响应n个请求;

多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

事件驱动:event-driven

复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;

(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息

元数据:请求报文首部

<method> <URL> <VERSION>

Host: www.magedu.com   请求的主机名称

Connection:

(4) 访问资源:获取请求报文中请求的资源

web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot

/var/www/html/

images/1.jpg

http://www.magedu.com/images/1.jpg

web服务器资源路径映射方式:

(a) docroot

(b) alias

(c) 虚拟主机docroot

(d) 用户家目录docroot

(5) 构建响应报文

资源的MIME类型:

显式分类

魔法分类

协商分类

URL重定向:

web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径;

(6) 发送响应报文

(7) 记录日志

httpd的特性:

高度模块化:core + modules

DSO: Dynamic Shared Object动态共享对象

MPM:Multipath Processing Modules多路处理模块

prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

worker:多线程模型,每个线程响应一个请求;

一个主进程:生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求;

event:事件驱动模型,每个线程响应n个请求;

一个主进程:生成m个子进程,每个进程直接n个请求;

Web服务器响应请求的IO结构非常复杂,如果有时间我会在以后的一篇博客中详细介绍一下,不过就应用来说也没有必要过于深究,新型的IO结构出现起初是为了解决C10K问题,再高的访问量虽然现在也可以解决但是已经有如此惊人的客户那么资金就比较充裕了,增加服务器数量,构建CDN、系统集群负载均衡等方法会好的多。

http事务:

请求:request

响应:response

http报文语法格式:

request报文

<method> <request-URL> <version>

<headers>

<entity-body>

response报文

<version> <status> <reason-phrase>

<headers>

<entity-body>

method: 请求方法,标明客户端希望服务器对资源执行的动作

GET、HEAD、POST

version:

HTTP/<major>.<minor>

status:

三位数字,如200,301, 302, 404, 502; 标记请求处理过程中发生的情况;

reason-phrase:

状态码所标记的状态的简要描述;

headers:

每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值;

entity-body:请求时附加的数据或响应时附加的数据;

method(方法):

GET:从服务器获取一个资源;

HEAD:只从服务器获取文档的响应首部;

POST:向服务器发送要处理的数据;

PUT:将请求的主体部分存储在服务器上;

DELETE:请求删除服务器上指定的文档;

TRACE:追踪请求到达服务器中间经过的代理服务器;

OPTIONS:请求服务器返回对指定资源支持使用的请求方法;

协议查看或分析的工具:

tcpdump, tshark, wireshark

status(状态码):

1xx:100-101, 信息提示;

2xx:200-206, 成功

3xx:300-305, 重定向

4xx:400-415, 错误类信息,客户端错误

5xx:500-505, 错误类信息,服务器端错误

常用的状态码:

200: 成功,请求的所有数据通过响应报文的entity-body部分发送;OK

301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently

302: 与301相似,但在响应报文中通过Location指明资源现在所处临时新位置; Found

304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified

401: 需要输入账号和密码认证方能访问资源;Unauthorized

403: 请求被禁止;Forbidden

404: 服务器无法找到客户端请求的资源;Not Found

500: 服务器内部错误;Internal Server Error

502: 代理服务器从后端服务器收到了一条伪响应;Bad Gateway

headers:

格式:

General
Remote Address:XX.XX.XXX.XX:443
Request URL:https://www.google.com/xjs/_/js/k=xjs.s.zh_CN.uUC9OdQHJXY.O/m=sy25,abd,sy74,sy73,sy75,async,sy76,foot,fpe,idck,ipv6,sy37,lc,sy120,sy132,lu,sy411,m,sf,sy197,sy170,sy198,sy42,sy36,sy105,sy208,sy209,sy225,sy181,sy228,sy180,sy102,sy106,sy207,sy226,sy229,sy231,sy223,spch,vm/am=pCARf4NAGDFMUE9IlAM/rt=j/d=0/t=zcms/rs=ACT90oHPpc6TGa8G8JhDL0Hp0Hb6f-6BJg
Request Method:GET
Status Code:200 OK (from cache)
Response Headers
age:13243
alternate-protocol:443:quic,p=1
cache-control:public, max-age=31536000
content-encoding:gzip
content-length:39383
content-type:text/javascript; charset=UTF-8
date:Fri, 17 Jul 2015 23:32:22 GMT
expires:Sat, 16 Jul 2016 23:32:22 GMT
last-modified:Fri, 17 Jul 2015 22:37:23 GMT
server:sffe
status:200 OK
vary:Accept-Encoding
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block
Request Headers
Provisional headers are shown
Accept:*/*
Referer:https://www.google.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36

首部的分类:

通用首部

请求首部

响应首部

实体首部

扩展首部

通用首部:

Date:报文的创建时间

Connection:连接状态,如keep-alive,close

Via:显示报文经过的中间节点

Cache-Control:控制缓存

Pragma:

请求首部:

Accept:通过服务器自己可接受的媒体类型;

Accept-Charset:

Accept-Encoding:接受编码格式,如gzip

Accept-Language:接受的语言

Client-IP:

Host:请求的服务器名称和端口号

Referer:包含当前正在请求的资源的上一级资源;

User-Agent:客户端代理

条件式请求首部:

Expect:

If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改;

If-Unmodified-Since:

If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;

If-Match:

安全请求首部:

Authorization:向服务器发送认证信息,如账号和密码;

Cookie:客户端向服务器发送cookie

Cookie2:

代理请求首部:

Proxy-Authorization:向代理服务器认证

响应首部:

信息性:

Age:响应持续时长

Server:服务器程序软件名称和版本

协商首部:某资源有多种表示方法时使用

Accept-Ranges:服务器可接受的请求范围类型

Vary:服务器查看的其它首部列表;

安全响应首部:

Set-Cookie:向客户端设置cookie;

Set-Cookie2:

WWW-Authenticate:来自服务器的对客户端的质询认证表单

实体首部:

Allow:列出对此实体可使用的请求方法

Location:告诉客户端真正的实体位于何处

Content-Encoding:

Content-Language:

Content-Length:主体的长度

Content-Location:实体真正所处位置;

Content-Type:主体的对象类型

缓存相关:

ETag:实体的扩展标签;

Expires:实体的过期时间;

Last-Modified:最后一次修改的时间

OK,我们对于http协议的介绍就到这里了,接下来会介绍一下httpd的安装配置等知识,如有错误敬请指正。

时间: 2024-10-14 05:24:51

天下武功尽出LAMP之httpd篇(1)的相关文章

天下武功尽出LAMP之http篇(3)

有了前两篇的介绍我相信大家对http已经有了基本的认识,今天我们来说一下httpd-2.4,这是Apache对于httpd-2.2的比较大的改进,增加许多实用性的新功能,我们来大致看一下. httpd-2.4新特性: (1) MPM支持运行DOS机制: (2) 支持event MPM: (3) 支持异步读写: (4) 支持每模块及每个目录分别使用各自的日志级别: (5) 每请求配置:<If> (6) 增强版的表达式分析器: (7) 支持毫秒级的keepalive timeout: (8) 基于

天下武功尽出LAMP

LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:Linux,操作系统:Apache,网页服务器:MariaDB或MySQL,数据库管理系统(或者数据库服务器):PHP.Perl或Python,脚本语言. 我们现今的web页面大部分都是动态页面,也就是说可以根据用户的需求动态的产生相应的结果,但是我们的httpd等传统web服务器是不能够完成这一的任务的,它们只能理解http协议处理html语言,诸如程序或者脚本运行的功能它们是无能为力的,那么就需要其它进程辅助它们来

天下武功尽出LAMP之PHP

今天我们来简单介绍一下PHP,因为我也不是PHP程序员,也不会PHP编程,所以只是介绍一下它的由来和在LAMP中的功能仅此而已. PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用.PHP的语法借鉴吸收C语言.Java和Perl等流行计算机语言的特点,易于一般程序员学习.PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也被用于其他很多领域. 一.PHP简介

手游推广:天下武功唯快不破

手机游戏的推广一直都是个难题,移动互联网每天都在更新,玩家的思维也在不断的被影响着.手游传统的推广模式变得有些鸡肋,食之无味弃之可惜.在快节奏的工作.学习及生活中,人们可能现在更能接受的就是快速,便捷.正所谓天下武功唯快不破,其实是一个道理,化繁琐为简单,不断追求少而精的思想理念,放弃华而不实的推广方式,让玩家快速的接受游戏或是勾起玩家对游戏的兴趣. 1.减掉对非核心.泛大众用户的考虑 所有的游戏推广,都想影响更多,更大量的用户.但其实最大的问题就是,很难真正影响到这些用户.比如做用户分析的时候

CentOS6.5 web-http协议之httpd篇之一

web服务在网络通信中很重要,而我们这里要展示的就是web服务中的重中之重-http协议 在CentOS6.5下,http协议的实现工具叫httpd,我们可以使用命令来查看当前httpd的版本,以及是否在本机上装了httpd服务了. 例如: [[email protected] conf]# rpm -q httpd httpd-2.2.15-29.el6.centos.x86_64 这是httpd的2.2.15版本.这个版本的httpd有很多特性,下面用示例陈述:假设我们的环境:一台vmwar

天下武功进出LAMP之http篇(2)

上文我们已经讲解了http协议,本文介绍一下httpd,httpd是Apache旗下的一个开源实现http协议的软件包,目前大部分网站特别是大型网站都会使用到httpd,有写朋友可能会说现在大部分使用的是nginx,其实使用nginx最主要的是其重量级较轻.并发响应能力较强,但是就稳重扎实来讲还当属httpd. 在CentOS6系的系统中httpd是默认被安装的,如果你的系统上没有安装配置到base源直接使用yum安装,我们来看一下httpd的配置文件和相关工具:这里使用的是httpd2.2 配

RPM包安装LAMP及httpd虚拟机SSL实现

简单罗列基础命令,只分享我的想法! 目的:通过RPM包安装LAMP,提供两个虚拟主机,一个用于WordPress,一个用于phpMyAdmin,为后一个提供ssl访问方式. 环境是vmware的虚拟机CentOS6.6,实机win7,后面的测试会用到win7上面的浏览器,已经把虚拟机中CentOS中的两个httpd的虚拟机的名字加入到win7的hosts文件中. 1.  修改yum源,指向CentOS的系统光盘,需要使用RPM包,配置如下: 图1 2.  安装apache的httpd,直接yum

LAMP环境搭建篇

所谓LAMP 即 Linux操作系统 , Apache网站服务器 , Mysql 数据库服务器 ,和 php/perl/python 网页编程语言 首先搭建之前我们之前发布过的Apache 和 Mysql 服务器(本章小编对于这两个服务的搭建方法只做简单介绍,不明白的可以参考前两章的博文) 一:搭建 Apache服务 1.rpm -e 卸载系统rpm包装的httpd和mysql服务 2.安装httpd服务 二:安装mysql服务 1.安装cmake(不做详细介绍,如有问题请参考上一篇博文) 2.

httpd篇

学习用途 httpd为Apache HTTP服务器程序.直接执行程序可启动服务器的服务. 语法 httpd [-hlLStvVX][-c<httpd指令>][-C<httpd指令>][-d<服务器根目录>][-D<设定文件参数>][-f<设定文件>] 参数说明: -c<httpd指令> 在读取配置文件前,先执行选项中的指令. -C<httpd指令> 在读取配置文件后,再执行选项中的指令. -d<服务器根目录>