本文共 4229 字,大约阅读时间需要 14 分钟。
http: HyperText Transfer Protocol: 超文本传输协议
html: HyperText Mark Language:超文本标记语言。
http:监听在80/tcp
request报文请求
response报文响应
报文传输过程:应用层协议发送get命令,ftp协议对get命令进行封装,报文传输到tcp层之后,在这一层为其添加目标端口和源端口,就标记了进程的地址,然后报文被送到ip层,再为其封装一个ip首部,就标记了源ip地址和目标ip地址,就能够找到目标主机。再通过链路层传送,最终通过物理层到达目的地。
报文接收:内核监控得知网卡接收报文,内核将报文进行处理,首先判断物理地址是否对应,对应了再看看目标ip地址是否对应,看完后再检查端口,这样就找到了对应的服务。
动态端点:
客户端动态:极不安全
applet
服务器端动态:
CGI: Common Gateway Interface :通用网关接口
web资源:
web object
http版本:
http/0.9: stateless 仅能响应文本
http/1.0: MIME, keep-alive (保持连接), 缓存
Multipurpose Internet Mail Extesions, 多功能,多用途互联网邮件扩展
将非文本信息编码成二进制格式,由smtp进行传送,传送过去由浏览器解码查看。浏览器只能识别html格式的内容,所以还要调用外部的工具进行查看。或者浏览器自己有插件,这样也能查看内容了。
MIME:
major/minor(主格式/次格式)
image/jpg jpg格式的图片
image/gif gif格式的图片
text/html 纯文本格式
video/quicktime视频流
appliation/x-httpd-php
http/1.1: 更多的请求方法,更精细的缓存控制,持久连接(persistent connection)
URI: Uniform Resource Identifier:统一资源标识符
URL:Uniform Resource Locator:统一资源定位符
格式:scheme://[username:password@]HOST:port/path/to/source
例如:http://www.magedu.com/downloads/nginx-1.5.tar.gz
URN:统一资源命名符
HTTP事务:一个请求以及与其对应的响应报文
HTTP方法:
GET: 完整请求一个资源
HEAD: 仅请求响应首部
POST:提交表单
PUT: (webdav)
DELETE:(webdav)
OPTIONS:返回请求的资源所支持的方法的方法
TRACE: 追踪一个资源请求中间所经过的代理
HTTP缓存机制:
私有缓存
公共缓存
HTTP的响应码:
1xx: 信息性状态码
100, 101
2xx: 成功状态码
200:OK
3xx: 重定向状态码
301: 永久重定向, Location响应首部的值仍为当前URL,因此为隐藏重定向;
302: 临时重定向,显式重定向, Location响应首部的值为新的URL
304:Not Modified:没有修改(在条件请求中用到)
4xx: 客户端错误状态码
404: Not Found
5xx: 服务器端错误状态码
500: Internal Server Error(服务器在执行、配置上有问题)
502: Bad Gateway(任何一个代理找不到上一级的代理的时候)
503:服务不可用
504:Gateway Timeout:网关超时
HTTP报文格式:
起始行
首部:标签加上一个值。例如:Host: www.magedu.com
主体
请求格式:request:
<method> <request-URL> <version>
请求方法 请求的URL 协议版本
<headers>
首部
<entity-body>
主体
例如:在浏览器搜素172.16.0.1/centos6.repo可以访问到文件内容
Google浏览器F12键可以评估网页的性能,IE 浏览器需要安装htpwatch
#telnet 172.16.0.1 80 向172.16.0.1站点的80号端口发送请求
GET / http/1.1
Host: 172.16.0.1
#telnet 172.16.0.1 80 向172.16.0.1站点的80号端口发送请求
GET /centos6.repo http/1.1
Host: 172.16.0.1
得到结果:
响应格式:response:
<version> <status> <reason-phrase>
版本 状态码 原因短语
<headers>
首部
<entity-body>
主体部分
version: HTTP/major.minor, 如HTTP/1.0
HTTP报文首部:
通用首部:请求和响应均可使用:例如:
Connection: 指定连接选项
Date: 报文创建日期和时间
Via: 所经过的代理服务器
请求首部:
Host: 所请求的主机
Referer: 提供了包含当前请求URI文档的URL
Accept: 接受的MIME类型
Accept-Charset:所接受的字符集
Accept-Encoding: 接受的编码方式
Accept-Lanague: 告诉服务器能够发送哪些语言
条件请求首部:
If-Modified-Since
If-None-Match
安全请求首部:
Authorization: 客户端提供给服务器的认证信息;
Cookie: 追踪用户状态
Cookie2:
响应首部:
Age: 从最初创建开始,响应持续时间
Server: 服务器软件名称及版本
Vary: 会影响缓存机制(是否压缩等)
Set-Cookie:设定Cookie
Set-Cookie2
实体首部:
Allow: 允许的请求方法
Location: 资源的实际位置
Content-Language: 内容是那种语言
Content-Location: 内容位置
Content-Type: 内容类型。例如:MIME
ETag: 实体标记
Expires: 过期的缓存
Last-Mofified:上次修改的时间
一次HTTP事务的完成过程:
1、建立连接
2、接收请求
3、处理请求
4、获取资源
5、构建响应
6、回送响应
7、记录日志
高度模块化: DSO(动态共享对象)
MPM:Multipath Processing Module:多路处理模块
prefork: 一个进程响应一个请求
worker:一个进程生成多个线程,一个线程响应一个请求
event:事件驱动模式
httpd-1.3非常稳定,但没有许多新的性能。官方不再维护
httpd-2.0和httpd-1.3很相近
httpd-2.2 centos6默认所带的
httpd-2.4最新的系列
httpd:
alias 路径别名
Auth用户认证
virtual host虚拟主机
Mpm模块属性定义
版本:HTTP/0.9, HTTP/1.0, HTTP/1.1
httpd的相关信息:
服务脚本:/etc/rc.d/init.d/httpd
运行目录:/etc/httpd
配置文件:/etc/httpd/conf/
主配置文件:httpd.conf
扩展配置:/etc/httpd/conf.d/*.conf
监听端口socket: http: 80/tcp, https: 443/tcp
网页文件目录(DocumentRoot):/var/www/html
CGI: /var/www/cgi-bin/
安装并启动web服务
需要注意的是httpd的默认安装会试图通过反解当前主机的ip地址来为httpd服务器提供一个主机名称,如果反解是失败的它就会报错,并且告诉你主机名称解析失败,使用127.16.4.1当做当前主机的主机名。所以为避免此问题,建议先编辑/etc/hosts
如:127.16.4.1 www 别名为www
安装httpd
#service httpd start重启服务
#chkconfig --list httpd 查看运行级别
#chkconfig httpd on 打开2 3 4 5级别
默认主页面:index.html
直接以127.16.4.1 访问的时候,显示的是测试页面,即默认的主页面。我们编辑/var/www/html/index.html文件
<html>
<title> Test Page</title>
<body>
<h1> Hello</h1>
Hello word
</body>
</html>
这样我们打开的就是我们所编辑的内容了。
如果我们不对/var/www/html/index.html文件进行编辑,又不想显示欢迎界面,那就需要修改配置页面了。
(1)在/etc/httpd/conf/httpd.conf中修改
(2)将/etc/httpd/conf.d目录下的welcome.conf删除或文件名改变
配置httpd的工作属性:vim /etc/httpd/conf/httpd.conf
指令不区分字符大小写,但约定俗成的习惯:单词的首字母大写;指令的值很有可能区分大小写;有些指令可以重使用多次;
配置文件的构成:主服务器和虚拟主机不能同时启用
全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;
主服务器:主站属性;
虚拟主机:虚拟主机及属性定义
配置文件语法测试:
# service httpd configtest 检查语法是否有错误
# httpd -t
大多数配置修改后,使用service httpd reload即能生效;
而修改监听的地址和端口通常需要重启服务,使用命令service httpd restart
本文转自 宋鹏超 51CTO博客,原文链接:http://blog.51cto.com/qidian510/1280126,如需转载请自行联系原作者