sql server2005发布服务不能删除的解决办法

有一个数据库chinatown做了本地发布,另一台服务器之前有做订阅,估计是订阅服务器上的订阅已经被删了,所以在删本地发布的时候怎么也删不掉。说这个发布内还有订阅,但删下面的订阅又说需连上订阅服务器才能删,连上后还是删不掉。比较头疼。

解决办法:

在发布服务器上执行:

EXEC sp_removedbreplication ‘chinatown’;

chinatown为数据库名,不是发布名。

net-snmp调用脚本及独立日志配置

net-snmp可以调用外部脚本扩展功能,如:

vi /etc/snmp/snmpd.conf
exec .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/snmp/tcpconn.sh
exec .1.3.6.1.4.1.2021.19 tcpCurrHttp /etc/snmp/tcphttp.sh
exec .1.3.6.1.4.1.2021.20 tcpCurrPhp-fpm /etc/snmp/tcpphp.sh
exec .1.3.6.1.4.1.2021.21 tcpCurrMemcache /etc/snmp/tcpmemcache.sh

上面是旧版的配置,已经弃用了,新版本用:
extend .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/snmp/tcpconn.sh
extend .1.3.6.1.4.1.2021.19 tcpCurrHttp /etc/snmp/tcphttp.sh
extend .1.3.6.1.4.1.2021.20 tcpCurrPhp-fpm /etc/snmp/tcpphp.sh
extend .1.3.6.1.4.1.2021.21 tcpCurrMemcache /etc/snmp/tcpmemcache.sh

snmpd想允许一个段访问,配置为:
com2sec notConfigUser  192.168.1.0/24       public

[root@ha1 log]# cat /etc/snmp/tcpconn.sh
#!/bin/sh
conn=`netstat -s -t | grep connections established |awk ‘{print $1}’`
echo $conn
[root@ha1 log]# cat /etc/snmp/tcphttp.sh
#!/bin/sh
netstat -an | grep ‘:80 ‘ | grep ESTABLISHED | wc -l
[root@ha1 log]# cat /etc/snmp/tcpmemcache.sh
#!/bin/sh
netstat -an | grep :11211 | grep ESTABLISHED | wc -l
[root@ha1 log]# cat /etc/snmp/tcpphp.sh
#!/bin/sh
netstat -an | grep :9000 | grep ESTABLISHED | wc -l

重启net-snmpd:
service snmpd restart

测试:
[root@ha1 log]# snmpwalk -v 2c -c public 192.168.1.4 .1.3.6.1.4.1.2021.18
UCD-SNMP-MIB::ucdavis.18.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.2.1 = STRING: "tcpCurrEstab"
UCD-SNMP-MIB::ucdavis.18.3.1 = STRING: "/etc/snmp/tcpconn.sh"
UCD-SNMP-MIB::ucdavis.18.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "5023"
UCD-SNMP-MIB::ucdavis.18.102.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.103.1 = ""

有信息输出就表明成功了。

默认net-snmpd输出日志到/var/log/messes,想输出至一个独立日志文件,配置为:

vi /etc/sysconfig/snmpd.options
# snmpd command line options
# OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
OPTIONS="-Lf /var/log/snmpd.log"

重启net-snmpd:
service snmpd restart

cat /var/log/snmpd.log

Sql Server 批量增加表索引的T-SQL

Sql Server 内有一批表,需增加一个索引,表名为ct_user_jewe_00 – ct_user_jewe_99,编写如下T-SQL完成:

declare @i int
declare @table varchar(100)
declare @index varchar(100)
declare @sql nvarchar(1000)
SET @i=0
WHILE @i<=99
BEGIN
BEGIN TRANSACTION
IF @i < 10
BEGIN
SET @table=’dbo.ct_user_jewe_0’+CONVERT(char(5),@i)
SET @index=’IX_ct_user_jewe_0’+CONVERT(char(5),@i)
END
ELSE
BEGIN
SET @table=’dbo.ct_user_jewe_’+CONVERT(char(5),@i)
SET @index=’IX_ct_user_jewe_’+CONVERT(char(5),@i)
END
SET @sql=’CREATE NONCLUSTERED INDEX ‘+@index+’ ON ‘+@table
SET @sql=@sql+’ ( uId ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]’
PRINT @sql
execute sp_executesql @sql
SET @i=@i+1
COMMIT
END

使用ipmitool 工具 调出服务器字符终端

一、原理:用ipmitool命令抓取串口字符流来实现远程调出服务器终端的效果

生产环境可操作性论述:
在服务器系统出现故障的时候,我们使用iptool可以远程配置BIOS,BMC,RAID等DRAC能做在工作。

二、服务器配置要求
BMC 支持ipmi 2.0版本(ipmi 1.5版本不支持)
BIOS 端口重定向到com2,一般都能做到。

三、配置步骤:
使用ipmitool调出服务器终端我们需要做以下几项配置:

1.修改linux内核
1.1 支持ipmi(在本地命令行实现配置本机bmc的ip、用户和密码,以及本地收集ipmi log等信息)
1.2 支持console (打开串口,让ipmitool能够连接到系统)

2.BIOS
2.1 修改串口重定向,让其都指向com2,远程终端修改为 字符终端
2.2 配置bmc (修改ip,用户等,此项操作可以在系统中操作,一条命令就可以解决)

3. 修改grub
在grub中加入 串口,Baud Rate以及在系统中终端
即如下:
kernel /boot/kernel ro root=/dev/sda1 console=tty0 console=ttyS1,57600
4. 修改/etc/inittab
修改或加入下列一行在第50行的位置
4:2345:respawn:/sbin/mingetty ttyS1 57600
5. 修改字符终端能够登陆
修改/etc/securetty添加
ttyS1
ttyS0
重启系统,ok了

四、使用范围:

适于DELL 1950,也适于其他服务器(配有BMC且ipmi 版本2.0)

配置操作过程可以参照录像《通过ipmitool调出服务器字符终端》

五、安全性

  IPMI增强的认证(基于安全哈希算法1和基于密钥哈希消息认证)和加密(高级加密标准和Arcfour)功能有助于实现安全的远程操作。
对VLAN的支持为设置管理专用网络提供了方便,并且可以以通道为基础进行配置。

版权声明:可以任意转载,但转载时必须标明原作者asher、原始链接http://hi.baidu.com/rhca/blog/item/ded802f762732a25730eec41.html 以及本声明。

参考资料
ipmitool manpage , http://ipmitool.sourceforge.net/manpage.html
openipmi help , http://openipmi.sourceforge.net/
http://www.intel.com/design/servers/ipmi/

使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理

Dell™ 系统底板管理控制器 (BMC) 通过与主板上的不同传感器通信来监视系统是否有严重事件,并在某些参数超出其预置阈值时发出警报和日志事件。 BMC 支持工业标准的 Intelligent Platform Management Interface (IPMI) 协议,可以实现远程配置、监测和恢复系统。 BMC 提供以下功能:
• 通过系统的串行端口和集成 NIC 进行访问
• 故障日志记录和 SNMP 警报发送
• 访问系统事件日志 (SEL) 和传感器状况
• 控制包括开机和关机在内的系统功能
• 独立于系统电源或工作状态的支持
• 用于系统设置、基于文本公用程序和操作系统控制台的文本控制台重定向
• 使用 LAN 上串行 (SOL) 访问 Linux Enterprise 服务器串行控制台界面。

二,环境检测
dell x9xx系列机器都支持ipmi 2.0协议,如果是在linux环境中,可以运行下面的命令来确认
[root@host ~]# dmidecode |sed -n ‘/IPMI/,+5p’
如果能看到IPMI信息,就说明支持ipmi,比如下面就是pe 2950 的输出,注意Version 是2.0
IPMI Device Information
Interface Type: KCS (Keyboard Control Style)
Specification Version: 2.0
I2C Slave Address: 0x10
NV Storage Device: Not Present
Base Address: 0x0000000000000CA8 (I/O)

同时需要启动ipmi服务,centos 4 默认安装了该服务执行
#/etc/init.d/ipmi start
如果启动成功就ok
注意:如果要通过网线来控制另一个机器的电源或者是bios重定向,需要满足的条件是这两个机器在同一个局域网或者vlan里面,所以在同一个机房,可能会有机器之间不能相互控制,因为不在同一个vlan或者局域网。

三,配置:
配置bmc可以有多种方法配置,比如开机时候按ctrl+E直接进入配置界面;或者是利用dell 的server admin (web界面)工具包配置,以及dell SDK光盘里面syscfg(CLI命令行)工具配置;还可以通过ipmitool工具进行配置,ipmitool是一个开源软件,这是最方便的配置方 式。考虑到多数机器都是在机房,所以这里主要演示利用ipmitool进行配置的方法。 其他配置方式参考dell文档光盘,有详细的傻瓜化文档。

1. 开启ipmi 服务
#/etc/init.d/ipmi start
2. 编译安装ipmitool 工具
http://ipmitool.sourceforge.net/ 下载最新稳定版本,然后编译安装到/opt/app/ipmitool
,然后执行该文件自动安装.
3.具体的配置

#$ipmitool lan set 1 ipaddr 10.0.0.12
#$ipmitool lan set 1 netmask 255.255.255.0
#$ipmitool lan set 1 access on
#$ipmitool lan set 1 user
配置好网卡地址和访问权限。
修改一下root用户的密码
#$ipmitool user list 1
#$ipmitool user set password 2 secpass
本机的设置就完成了。
四,测试
然后在局域网的另一个机器上安装好ipmitool ,并且配置一个10.0.0.0/24网段内的地址到该机器上。
比如
# ip a add 10.0.0.11/24 dev eth0
然后测试一下是否能ping 通 10.0.0.12
# ping 10.0.0.12
如果网络通了,则开始下一步的操作
例如直接对服务器关机
#ipmitool -I lan -U root -P secpass -H 10.0.0.12 power off
开机
#ipmitool -I lan -U root -P secpass -H 10.0.0.12 power on
reset
#ipmitool -I lan -U root -P secpass -H 10.0.0.12 power reset
通过sol控制bios和查看linux启动的输出
#ipmitool -I lanplus -U root -P secpass -H 10.0.0.12 sol activate

输入~+. 中断链接,输入~+? 查看帮助

参考文档 http://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html

vmstat 性能分析工具

vmstat 全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、CPU使用等。

在系统中使用root身份,执行vmstat 1 命令,观察性能状况。各参数值含义见下方:
vmstat
    procs
    r:
运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
    b:
处于不可中断状态的进程数,常见的情况是由IO引起的
    memory
    swpd: 切换到交换内存上的内存(默认以KB为单位)
如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。
    free: 空闲的物理内存
    buff: 作为buffer cache的内存,对块设备的读写进行缓冲
    cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。
    Swap
    si: 交换内存使用,由磁盘调入内存
    so: 交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。
常有人看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
    io
    bi: 从块设备读入的数据总量(读磁盘) (KB/s),
    bo: 写入到块设备的数据总理(写磁盘) (KB/s)
随机磁盘读写的时候,这2个 值越大(如超出1M),能看到CPU在IO等待的值也会越大
    system
    in: 每秒产生的中断次数
    cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多
    cpu
    us: 用户进程消耗的CPU时间百分比
us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了
    sy: 内核进程消耗的CPU时间百分比
sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
    wa: IO等待消耗的CPU时间百分比
wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
    id: CPU处在空闲状态时间百分比

情景分析
vmstat1

这个vmstat的输出那些信息值得关注?
procs r: 运行的进程比较多,系统很繁忙
io bo: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
cpu us: 持续大于50,服务高峰期可以接受
cpu wa: 稍微有些高
cpu id:持续小于50,服务高峰期可以接受

nginx上配置正式的https证书

nginx上配置https证书与apache有些不一样,参考:http://wiki.nginx.org/NginxHttpSslModule,如果是自己建一个证书用,方法如下:
Generate Certificates

To generate dummy certficates you can do this steps:

$ cd /usr/local/nginx/conf
$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Configure the new certificate into nginx.conf:

server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
}

Restart Nginx.

Now all ready to access using:

https://YOUR_DOMAINNAME_HERE上面这种自己建的证书用firefox打开会有个提示:

YOUR_DOMAINNAME_HERE 使用了无效的安全证书。该证书仅对下列名称有效:

(错误码: ssl_error_bad_cert_domain)

这是因为证书并不是经过认证的,希望IE或firefox不提示错误,需要向发证机构申请证书。我们在WoSign上申请了一个证书。
申请步骤如下:
1)先生成一个key:
[root@ha1 sslkey]# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
……………………………………………………………..++++++
.++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying – Enter pass phrase for server.key:
[root@ha1 sslkey]# ls
server.key
会提示输入一个密码,这个要记好。

2)生成CSR:
[root@ha1 sslkey]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:ShangHai
Locality Name (eg, city) [Newbury]:ShangHai
Organization Name (eg, company) [My Company Ltd]:Shine Zone Co., Ltd.
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server’s hostname) []:www.domain.com
Email Address []:admin@shinezone.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

输入刚生成key的密码及相关信息。就可以生成一个csr文件了。
然后把生成的server.csr给WoSign就可以申请证书了。

申请成功后,他们给我两个文件,server.ca-bundle及server.crt,按手册配置如下:

server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
}用IE访问没有提示了,但用firefox访问时,提示:https sec_error_unknown_issuer,这个问题的原因是由于nginx没有配置中级根证书造成的。解决方法如下:

cat server.crt server.ca-bundle > server.pem

修改配置文件:
server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.pem;
ssl_certificate_key /usr/local/nginx/conf/server.key;
}再重启就测试就不会有错误提示了。

因为之前我们在生成key的时候用了密码。你会发现配置好nginx证书后,在重启nginx时,会提示你输入密码,输入密码后才能启动。如何取消证书的密码呢?

有两种方式:
1)把带密码的key转成不带密码的:
openssl rsa -in server.key -out server2.key

2)在第一步生成key时不带-des3参数:
openssl genrsa -out www_shinezone_com.key 1024

用cacti监控squid的方法

配置squid的snmp,安装时squid需加–enable-snmp参数。

vi /usr/local/squid/etc/squid.conf

加上下面几行:
snmp_port 3401
acl snmppublic snmp_community public
acl logger src 127.0.0.1/32
snmp_access allow snmppublic logger
snmp_access deny all

重启squid:
service squid restart

用下面的命令测试:
snmpwalk -v1 -c public 127.0.0.1:3401 .1.3.6.1.4.1.3495.1

如果能看到类似下面的信息,说明成功了。
SNMPv2-SMI::enterprises.3495.1.1.1.0 = INTEGER: 16360
SNMPv2-SMI::enterprises.3495.1.1.2.0 = INTEGER: 21626872

因为squid的snmp用的是3401端口,而snmp默认端口是161,所以需要用net-snmpd做转发:

vi /etc/snmp/snmpd.conf

加上下面一行:
proxy -v 1 -c public 127.0.0.1:3401 .1.3.6.1.4.1.3495.1

重启net-snmpd:

service snmpd restart

再用下面的命令测试,如果能得到和上面一样的信息,就没问题了。
snmpwalk -v1 -c public 127.0.0.1 .1.3.6.1.4.1.3495.1

然后就是配置cacti了,导入http://forums.cacti.net/about4142.html的模板做图就行了。

HTTP 头部解释

1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type.

2. Accept-Charset:   浏览器申明自己接收的字符集
Accept-Encoding:  浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法  (gzip,deflate)
Accept-Language::浏览器申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。

3. Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受。

4. Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。

5. Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,该头部来回应自己的身份验证信息给WEB服务器。

6. Cache-Control:请求:no-cache(不要缓存的实体,要求现在从WEB服务器去取)
max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)
max-stale:(可以接受过去的对象,但是过期时间必须小于max-stale 值)
min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象)
响应:public(可以用 Cached 内容回应任何用户)
private(只能用缓存内容回应先前请求该内容的那个用户)
no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)
max-age:(本响应包含的对象的过期时间)
ALL:  no-store(不允许缓存)

7. Connection:请求:close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。
keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的 响应后,保持连接,等待本次连接的后续请求)。
响应:close(连接已经关闭)。
keepalive(连接保持着,在等待本次连接的后续请求)。
Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300

8. Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。例如:Content-Encoding:gzip
Content-Language:WEB 服务器告诉浏览器自己响应的对象的语言。
Content-Length:  WEB 服务器告诉浏览器自己响应的对象的长度。例如:Content-Length: 26012
Content-Range:   WEB 服务器表明该响应包含的部分对象为整个对象的哪个部分。例如:Content-Range: bytes 21010-47021/47022
Content-Type:    WEB 服务器告诉浏览器自己响应的对象的类型。例如:Content-Type:application/xml

9. ETag:就是一个对象(比如URL)的标志值,就一个对象而言,比如一个 html 文件,如果被修改了,其 Etag 也会别修改, 所以,ETag 的作用跟 Last-Modified 的作用差不多,主要供 WEB 服务器 判断一个对象是否改变了。
比如前一次请求某个 html 文件时,获得了其 ETag,当这次又请求这个文件时,浏览器就会把先前获得的 ETag 值发送给  WEB 服务器,然后 WEB 服务器会把这个 ETag 跟该文件的当前 ETag 进行对比,然后就知道这个文件有没有改变了。

10. Expired:WEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。是 HTTP/1.0 的头部。
例如:Expires:Sat, 23 May 2009 10:02:12 GMT

11. Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。
例如:Host:rss.sina.com.cn

12. If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作。
If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。

13. If-Modified-Since:如果请求的对象在该头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。例如:If-Modified-Since:Thu, 10 Apr 2008 09:14:42 GMT
If-Unmodified-Since:如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)。

14. If-Range:浏览器告诉 WEB 服务器,如果我请求的对象没有改变,就把我缺少的部分给我,如果对象改变了,就把整个对象给我。 浏览器通过发送请求对象的ETag 或者 自己所知道的最后修改时间给 WEB 服务器,让其判断对象是否改变了。总是跟 Range 头部一起使用。

15. Last-Modified:WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。例如:Last-Modified:Tue, 06 May 2008 02:42:43 GMT

16. Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。
例如:Location:http://i0.sinaimg.cn/dy/deco/2008/0528/sinahome_0803_ws_005_text_0.gif

17. Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。例如:Pragma:no-cache

18. Proxy-Authenticate: 代理服务器响应浏览器,要求其提供代理身份验证信息。
Proxy-Authorization:浏览器响应代理服务器的身份验证请求,提供自己的身份信息。

19. Range:浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。例如:Range: bytes=1173546-

20. Referer:浏览器向 WEB 服务器表明自己是从哪个网页/URL 获得/点击 当前请求中的网址/URL。例如:Referer:http://www.sina.com/

21. Server: WEB 服务器表明自己是什么软件及版本等信息。例如:Server:Apache/2.0.61 (Unix)

22. User-Agent: 浏览器表明自己的身份(是哪种浏览器)。
例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

23. Transfer-Encoding: WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)。例如:Transfer-Encoding: chunked

24. Vary: WEB服务器用该头部的内容告诉 Cache 服务器,在什么条件下才能用本响应所返回的对象响应后续的请求。假如源WEB服务器在接到第一个请求消息时,其响应消息的头部为:
Content-Encoding: gzip; Vary: Content-Encoding  那么 Cache 服务器会分析后续请求消息的头部,检查其 Accept-Encoding,是否跟先前响应的 Vary 头部值一致,即是否使用相同的内容编码方法,这样就可以防止 Cache 服务器用自己Cache 里面压缩后的实体响应给不具备解压能力的浏览器。
例如:Vary:Accept-Encoding

25. Via: 列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。
当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via头部,并把自己的相关信息加到后面, 以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。
例如:Via:1.0 236-81.D07071953.sina.com.cn:80 (squid/2.6.STABLE13)

============================================================================================================================
HTTP 请求消息头部实例:
Host:rss.sina.com.cn
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language:zh-cn,zh;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive:300
Connection:keep-alive
Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWSm3WRlEB3vRwTnRtW   <– Cookie
If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT
Cache-Control:max-age=0

HTTP 响应消息头部实例:
Status:OK – 200                                                <– 响应状态码,表示 web 服务器处理的结果。
Date:Sun, 01 Jun 2008 12:35:47 GMT
Server:Apache/2.0.61 (Unix)
Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT
Accept-Ranges:bytes
Content-Length:18616
Cache-Control:max-age=120
Expires:Sun, 01 Jun 2008 12:37:47 GMT
Content-Type:application/xml
Age:2
X-Cache:HIT from 236-41.D07071951.sina.com.cn                  <– 反向代理服务器使用的 HTTP 头部
Via:1.0 236-41.D07071951.sina.com.cn:80 (squid/2.6.STABLE13)
Connection:close
========================================================================