什么是DNS 配置?
DNS简介
在Linux中,域名服务(DNS)是由柏克莱网间名域(Berkeley Internet Name Domain——BIND)软件实现的。BIND是一个客户/服务系统,它的客户方面称为转换程序(resolver),它产生域名信息的查询,将这类信息发送给服务器,DNS软件回答转换程序的查询。BIND的服务方面是一个称为named(读作“name”“d”)的守护进程。
我们将讨论三种基本BIND配置任务:
配置BIND转换程序。
配置BIND域名服务。
建立服务器数据库文件,称为“区文件(zone file)。
前面我们介绍过,术语“区(zone)”往往可以与单词“域(domain)”互换使用,但这里却有一些区别,“区”是指域数据库文件,而“域”则比较通用。在本书中,域是用域名定义的域结构中的一部分,而区则是域数据库文件中包含域信息的集合,包含域信息的文件称为“区文件”。
DNS的作用是把IP地址转化为代表主机、网络和邮件别名的助记名。它把整个Internet IP地址和名字空间分解为不同的逻辑组来做这项工作。每个组对它所拥有的计算机和其他信息具有控制权。
DNS服务器的类型
BIND可以配置成以几种不同的方法运行的DNS,常见的BIND配置是唯转换程序系统、唯高速缓存系统、主服务器和辅助服务器。
转换程序是一段要求域名服务器提供域信息的程序,在Linux系统中,它是作为一个库程序来实现的,不是一个单独的客户程序。在唯转换程序系统中,仅使用转换程序,并不运行域名服务器。这种系统是很容易配置的,最多只需要设置/etc/resolvconf文件。其它三个BIND配置选项都是用于named服务软件的。
唯高速缓存服务器 唯高速缓存服务器(caching-only server)可运行域名服务器软件但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的回答,一旦取得一个答案,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。所有的域名服务器都按这种方式使用高速缓存中的信息,但唯高速缓存服务器则依赖于这一技术提供所有的域名服务器信息。唯高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。
对于唯高速缓存服务器只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件,这或许是最常见的域名服务器配置。接着才是唯转换程序配置,它是最容易配置的。
主服务器 主服务器(primary name server)是特定域所有信息的权威性信息源。它从域管理员构造的本地磁盘文件中加载域信息,该文件(区文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对它域的任何查询。
配置主服务器需要一整套配置文件,包括正规域的区文件(namedhosts)和反向域的区文件(namedrev)、引导文件(namedconf)、高速缓存(namedca)和回送文件(namedlocal),其它的配置都不需要这样一整套文件。
辅助域名服务器 辅助域名服务器(secondary name server)可从主服务器中转移一整套域信息。区文件是从主服务器中转移出来的,并作为本地磁盘文件存储在辅助服务器中。这种转移称为“区文件转移”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询,因此,辅助域名服务器也称作权威性服务器。
配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。然而其它的文件是确是需要的,包括引导文件、高速缓存文件和回送文件。
一个域名服务器可以是这类配置中的任何一种,但经常是将多种配置类型的元素组合在一起。然而所有的系统都要运行转换程序。
DNS常用术语
DNS是一个很复杂的概念,表1列出了常用的DNS术语。
表1 常用DNS术语
术语
说明
域
代表网络一部分的逻辑实体或组织
域名
主机名的一部分,它代表包含这个主机的域。它可以和域交换使用
主机
网络上的一台计算机
节点
网络上的一台计算机
域名服务器
提供DNS服务的计算机,它将DNS名字转化为IP地址
解析
把一个DNS服务器转化为与其相映的IP地址的过程
解析器
从域名服务器中提取DNS信息的程序或库子程序
反向解析
将给出的IP地址转化为其相映的DNS名字
欺骗
使网络看上去好象具有不同的IP地址或域名的行为
在概念上可以把DNS分为三个部分:
域名空间 这是标识一组主机并提供他们的有关信息的树结构的详细说明。树上的每一个节点都有它控制下的主机的有关信息的数据库。查询命令试图从这个数据库中提取适当的信息。简单地说,这只是所有不同类型信息的列表,这些信息是域名、IP地址、邮件别名和那些在DNS系统中能查到的内容。
域名服务器 它们是保持并维护域名空间中的数据的程序。每个域名服务器含有一个域名空间子集的完整信息,并保存其它有关部分的信息。一个域名服务器拥有它控制范围的完整信息。控制的信息按区进行划分,区可以分布在不同的域名服务器上,以便为每个区提供服务。每个域名服务器都知道每个负责其他区的域名服务器。如果来了一个请求,它请求给定域名服务器负责的那个区的信息,那么这个域名服务器只是简单地返回信息。但是,如果请求是不同区的信息,那么这个域名服务器就要与控制该区的相映服务器联系。
解析器 解析器是简单的程序或子程序库,它从服务器中提取信息以响应对域名空间中主机的查询。
配置转换程序
使用DNS的第一步是在用户的计算机上配置转换程序,即让机器能够能够从DNS服务器中获取域名解析/反解析服务。转换程序不是一个单独而明确的处理进程,而是网络进程调用的一个标准C程序库。如果本地系统不运行named,就必须配置本地转换程序。
转换程序控制文件/etc/hostconf
/etc/hostconf是用来控制本地转换程序的文件的设置。该文件告诉转换程序使用哪些服务、按照什么顺序进行。该文件的字段可以用空格或制表符分隔。字符“#”表示注释行。表2是可在hostconf中指定的选项。
表2 /etc/hostconf文件的配置选项
选项
说明
order
指定按照哪种顺序来尝试不同的名字解析机制。按列出的顺序来进行指定的解析服务。支持下面的名字解析机制:
hosts 试图通过查找本地/etc/hosts文件来解析名字
bind 使用DNS域名服务器来解析名字
nis 使用网络信息服务(NIS)协议来解析主机名字
multi
以off和on为参数。与host查询一起使用,用来确定一台主机是否在/etc/hosts文件中指定了多个IP地址
nospoof
如果用逆向解析找出与指定的地址匹配的主机名,对返回的地址进行解析以确认它确实与您查询的地址相配。为了防止“骗取”IP地址,通过指定nospoof on来允许这种功能
alert
以off和on为参数。如果打开,任何试图骗取IP地址的行为都通过syslog工具进行记录
trim
以域名为参数。在/etc/hosts中查找名字前,trim删除这个域名。着使你只把基本主机名放在/etc/hostconf中而不指定域名
下面这个例子是主机vlager上的/etc/hostconf文件:
# /etc/hostconf
# We have named running, but no NIS (yet)
order bind hosts
# Allow multiple addrs
multi on
# Guard against spoof attempts
nospoof on
# Trim local domain (not really necessary)
trim vbrewcom
这个例子给出了域vbrewcom的通用解析程序配置。该解析程序首先使用DNS然后使用/etc/hosts文件查找主机名。在解析查找中指定本地/etc/hosts文件是一个好主意。如果由于某种原因不能使用域名服务器了,我们还可以使用主机文件中列出的那些主机名。该机器上允许使用多个IP地址,主机通过重新解析主机名字(从IP地址逆向查找返回的主机名字)来检查IP欺骗。
转换程序/配置文件/etc/resolvconf
当配置转换程序使用BIND域名服务查询主机时,我们必须告诉转换程序使用哪一个域名服务器。用来完成这项任务的工具就是/etc/resolvconf文件。/etc/resolvconf控制转换程序使用DNS解析主机名使用的方式,它可以明确地定义系统的配置,允许我们命名由于缺省服务器不响应而使用的备份服务器。因此,尽管会增加系统负荷,但在某些场合使用resolvconf是很受欢迎的。
/etc/resolvconf是一个简单而易读的文件。在/etc/resovconf中使用的命令,具有系统专用的形式,但一般都支持domain和nameserver两项命令。
nameserver项利用IP地址去识别让转换程序去识别查询域信息的那些服务器。我们可以多次使用nameserver选项,可以使用多达三个域名服务器。这些名服务器是按照它们在文件中的顺序进行查询的,如果没有接收到一个服务器的响应,就去试表中的下一个服务器,直到所有服务器试完为止(如果在/etc/resolvconf文件中设置了三个以上的域名服务器,那么,即使前三个服务器都没有响应查询请求,Linux也不会去请求后面的服务器)。我们应该将最可靠的域名服务器列在最前面,以便在查询时不会超时。如果resolvconf文件中不包含nameserver项,或者不存在resolvconf文件,就将所有名服务器查询发送给本地主机。然而,如果有一个resolvconf文件,它包含nameserver项,除非有一项指向本地主机,否则就不查询本地主机。在配置唯转换程序的主机中,resolvconf文件包含nameserver项,但没有一个项指向本地主机。
domain项用来定义缺省域名(主机的本地域名)。转换程序会将缺省域名挂在任何不含点的主机名后面。例如,转换程序接收到主机名vale(它不含点),就将其缺省域名挂接在vale后面,构成对它的查询。如果domian域中的name值是vbrewcom,那么转换程序就将查询valevbrewcom。如果没有出它,则转换程序就试图通过getdomainname()系统调用来获得本地域名。
如果听起来让人迷惑不解的话,我们可以看看下面这个例子,这是Virtual Brewery中的resolvconf文件:
# /etc/resolvconf
# Our domain
domain vbrewcom
#
# We use vlager as central nameserver:
nameserver 1917211
在该例中,通过domain指定缺省域名,并列出一个用于解析主机名的域名服务器。在这个例子中没有指定查寻顺序(使用search选项),因此如果要查询一台机器的地址(如vale),解析器则首先试图查找vale,如果没找到,则查找valevbrewcom,然后再查找vbrewcom。
唯转换程序配置
配置唯转换程序是非常简单的,下面是一个唯转换程序的/etc/resolvconf文件的例子:
# /etc/resolvconf
# Our domain
domain vbrewcom
#
# We use vlager as central nameserver:
nameserver 1917211
# netx try vale
namesever 1917213
该配置文件告诉转换程序将所有的查询发送给主域名服务器vlager,如果失败,就试vale。这些查询是永远不能在本地转换的。这一个简单的resolvconf文件就可以满足唯转换程序配置的全部要求。
设置域名服务器
在Linux上的域名服务是由named守护进程来执行的,named最早是为BSD向客户机提供域名服务而开发的。named守护进程通常在系统启动时开始工作,并一直工作到系统关闭。该进程从被称作/etc/namedboot的配置文件中获取有关信息和将主机名映射为IP地址的各种文件。
为了运行named,只要在命令行中输入:
# /etc/rcd/initd/named start
named就会开始运行,读取namedboot文件及其定义的任何区文件并将它的进程ID以ASCII码的形式写入/var/run/namedpid中,下载任何来自主服务器的区文件,如果有必要的话在端口53等待DNS请求。
虽然转换程序的配置只需要一个配置文件,但是在配置named时却要使用多个文件,一整套named配置文件如表3所示。
表3 named配置文件
配置文件
说明
namedconf
设置一般的named参数,指向该服务器使用的域数据库信息的源,这类源可以是本地磁盘文件或远程服务器
namedca
指向根域名服务器
namedlocal
用于在本地转换回送地址
namedhosts
将主机名映射为IP地址
namedrev
用于反向域的、将IP地址映射到主机名的区文件
在下面各节中我们将探讨如何利用其中的每一个文件去配置named。
/etc/namedconf文件
namedconf文件通常很小,只包括一些指向DNS信息源的信息。其中某些源是本地文件,其他则是远程服务器。下面我们将看到一个需要生成的每种文件类型的例子。
表4概括了namedconf文件中使用的各种配置语句,它提供的信息能帮助我们了解这一些例子:
表4 namedboot文件的配置选项
选项
说明
Directory
指定DNS文件所在的目录。您可以重复此选项以指定几个不同的目录。可以给出这些目录相关的文件路径名
Master
以一个域名和一个文件名为参数。此选项声明named对指定的域具有控制权,并使named从指定的区域加载信息
Hint
为named建立高速缓存信息。以一个域名和一个文件名为参数。域名通常用“”指定。指定的文件包括一组称为服务器提示的记录,这些记录列出了根域名服务器的信息
Forwarders
以一个域名服务器的列表作为参数。告诉本地域名服务器:如果它不能从它的本地信息中解析出地址,那么就与该列表中的服务器联系
Slave
把本地域名服务器变成一个从属服务器。如果给出了此选项,那么本地服务器就试着通过递归查询来解析DNS名字。它只把请求传递给forwarders选项行列出的服务器中的一个
配置namedconf文件所使用的方法,是用来控制将域名服务器作为主服务器、辅助服务器还是唯高速缓存服务器的。理解不同配置的最佳方法是讨论各种namedconf的示例文件。
1唯高速缓存服务器
配置唯高速缓存域名服务器是很简单的。必须有namedconf和namedca文件,通常也要用到namedlocal文件。下面是用于唯高速缓存服务器的namedconf文件的例子,其中以“//”开头的是注释:
// generated by named-bootconfpl
options {
directory "/var/named";
/
If there is a firewall between you and nameservers you want
to talk to, you might need to uncomment the query-source
directive below Previous versions of BIND always asked
questions using port 53, but BIND 81 uses an unprivileged
port by default
/
// query-source address port 53;
};
//
// a caching only nameserver config
//
//
// a caching only nameserver config
//
zone "" {
type hint;
file "namedca";
};
zone "00127in-addrarpa" {
type master;
file "namedlocal";
directory这一行告诉named到哪里去找寻文件。所有其后命名的文件都将是相对于此目录的。该文件告诉named去维持一个域名服务器响应的高速缓存,并利用namedca文件的内容去初始化该高速缓存。该高速缓存初始化文件的名字可以是任何名字,但一般使用/var/named/namedca。并不是在该文件中使用一个hint语句就能使它成为唯高速缓存配置,几乎每一种服务器的配置都要用到cache语句,而是因为没有master和slave语句才使它成为一个唯高速缓存配置。
但是,在我们这个例子中却有一个master语句。事实上,几乎在每一个唯高速缓存的配置文件中都有这一个语句,它将本地服务器定义为它自己的回送域的主服务器,并假定该域的信息存储在namedlocal文件中。这个回送域是一个in-addrarpa域(in-addrarpa域用于指定逆向解析,或IP地址到DNS名字解析),它将地址127001映射为名字localhost。转换自己的回送地址对于大多数人都是有意义的,因为大多数的namedconf文件都包含这一项。
在大多数唯高速缓存服务器的配置文件中,这种directory、master和hint语句是唯一使用的语句,但也可以增加其他的语句,forwarders和slave等语句都可以使用。
2主服务器和辅助服务器的配置
我们虚构的vbrewcom是举例说明主服务器和辅助服务器的基础,下面是将vlager定义为vbrewcom域的主服务器的namedconf文件:
// generated by named-bootconfpl
options {
directory "/var/named";
/
If there is a firewall between you and nameservers you want
to talk to, you might need to uncomment the query-source
directive below Previous versions of BIND always asked
questions using port 53, but BIND 81 uses an unprivileged
port by default
/
// query-source address port 53;
};
//
// a caching only nameserver config
//
zone "" {
type hint;
file "namedca";
};
zone "vbrewcom"{
type master;
file "namedhosts";
};
zone "00127in-addrarpa" {
type master;
file "namedlocal";
};
zone "72191in-addrarpa"{
type master;
file "namedrev";
};
上例中第一个master告诉我们这是vbrewcom域的主服务器。该域的数据是从namedhosts文件中加载的。在我们这个例子中,我们将文件名namedhosts作为区文件名,但也可以使用更有说明性的文字,例如,vbrewcom区文件的名字使用vbrewcomhosts则较好。
第三个master语句指向能将IP地址1917200映射为主机名的文件。它假定本地服务器是反向域72191in-addrarpa的主服务器,该域的数据从文件namedrev中加载。
在上例配置中的hint语句和第二个用于回送域的primary语句我们前面在唯高速缓存配置中已经讨论过。在这些配置中,它们的作用是相同的,而且几乎在任何配置中都要使用它们。
辅助服务器的配置与主服务器的配置不同,它使用slave语句代替master语句。slave语句指向用作域信息源的远程服务器,以替代本地磁盘文件。下面的namedconf文件可以将vale配置成为vbrewcom域的辅助服务器:
// generated by named-bootconfpl
options {
directory "/var/named";
/
If there is a firewall between you and nameservers you want
to talk to, you might need to uncomment the query-source
directive below Previous versions of BIND always asked
questions using port 53, but BIND 81 uses an unprivileged
port by default
/
// query-source address port 53;
};
//
// a caching only nameserver config
//
zone "" {
type hint;
file "namedca";
};
zone "00127in-addrarpa" {
type master;
file "namedlocal";
};
zone "vbrewcom"{
type slave;
file "namedhosts";
masters { 1917213; };
};
zone "72191in-addrarpa"{
type slave;
file "namedrev";
masters {1917213;};
};
cache namedca
secondary vbrewcom 1917213 namedhosts
secondary 72191in-addrarpa 1917213 namedrev
primary 00127in-addrarpa namedlocal
第一个slave语句是使这个服务器成为vbrewcom的辅助服务器。它告诉named从IP地址为1917213的服务器中下载vbrewcom的信息,并将其数据保存在/var/named/namedhosts文件中。如果该文件不存在,named就创造一个,并从远程服务器中取得区数据,然后将这些数据写入新创建的文件中。如果存在该文件,named就要检查远程服务器,以了解该远程服务器的数据是否不同于该文件中的数据,如果数据有变化,它就下载更新后的数据,用新数据覆盖该文件的内容;如果数据没有变化,named就加载磁盘文件的内容,不必做麻烦的区转移工作。
将一个数据库拷贝到本地磁盘文件中,就不必每次引导主机时都要转移区文件;只有当数据修改时,才进行这种区文件的转移工作。
该配置文件中的下一行表示该本地服务器也是反向域72191in-addrarpa的一个辅助服务器,而且该域的数据也从1917213中下载。该反向域的数据存储在namedrev中。
DNS数据库文件和资源记录
配置named所需的所有文件(namedhosts、namedrev、namedlocal和namedca)中的信息是以称为资源记录的形式存在的。每个资源记录都有一个类型,这个类型说明记录的功能。这些记录都是标准资源记录,称为RR(resource records)。表5列出了最常见的资源记录类型,其余的类型很少用到,如果感兴趣的话。请参考相应的RFC和man page。
表5 常见标准资源记录
资源记录名
记录类型
功能说明
地址
A
将主机名转换为地址。这个字段保存以点分隔的十进制形式的IP地址。任何给定的主机都只能有一个A记录,因为这个记录被认为是授权信息。这个主机的任何附加地址名或地址映射必须用CNAME类型给出
规范名
CNAME
给定一个主机的别名,主机的规范名字是在这个主机的A记录中指定的
主机信息
HINFO
描述主机的硬件和操作系统
邮件交换
MX
建立邮件交换器记录。MX记录告诉邮件传送进程把邮件送到另一个系统,这个系统知道如何将它递送到它的最终目的地
名服务器
NS
标识一个域的域名服务器。NS资源记录的数据字段包括这个域名服务器的DNS名。我们还需要指定这个名字名字服务器的地址与主机名相匹配的A记录
指针
PTR
将地址变换成主机名。主机名必须是规范主机名
管理开始
SOA
告诉域名服务器它后面跟着的所有所有资源记录是控制这个域的(SOA)表示授与控制权)。其数据字段用()括起来并且通常是多行字段。SOA记录的数据字段包含下面的项:
origin
这个域的主域名服务器的规范主机名。用点“” 结尾的绝对主机名,因此,它不能被named守护进程修改
contact
负责维护这个域的人的电子邮件联系地址。因为@在资源记录中有特殊的意义,所以用点“”代替这个符号。如果负责维护vbrewcom的人是clfls,那么联系地址就是clflsvbrewcom
serial
这个区信息文件的版本号,它是一个整数。辅助域名服务器用它来确定这个区信息的文件是何时改变的。每次改变信息文件时都应该使这个数加一
refresh
辅助域名服务器在试图检查主域名服务器的SOA记录之前应等待的秒数。SOA记录不经常改变,因此可以把这个值设置为一天
retry
辅助服务器在主服务器不能使用时,重试对主服务器的请求应等待的秒数。通常,它应该按分进行设置
expire
这是辅助服务器在不能与主服务器取得联系的情况下丢掉区信息之前应等待的秒数,一般应该设置成30天左右
minimum
当没有指定ttl资源记录时默认的ttl值。如果网络没有太大的变化,那么这个数可以设得很大。可以在资源记录中指定一个ttl值来代替它
为了能看懂本章中使用的配置示例文件,有必要稍微介绍以下资源记录的结构。DNS资源记录的格式是:
[domain] [ttl] [class] type rdate
各个字段之间有空格或指标符分隔。表6讨论了这些字段的含义。
表6 资源记录格式中的字段
字段
说明
domain
资源记录引用的域对象名。它可以是单台主机,也可以是整个域。作为domain输入的字串除非不是以一个点结束,否则就与当前域有关系。如果该domain字段是空的,那么该记录适用于最后一个带名字的域对象
ttl
生存时间记录字段。它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。通常该字段是空字段,这表示使用SOA记录中为整个区域设置的缺省ttl
class
指定网络的地址类。对于TCP/IP网络使用IN。如果没有给出类,就使用前一个资源记录的类
type
标识这是哪一类资源记录
rdata
指定与这个资源记录有关的数据。这个值是必要的。数据字段的格式取决于类型字段的内容
namedca文件
namedboot文件中的cache语句指向一个高速缓存初始化文件,具有高速缓存的服务器都有这样一个文件。它包含着域名服务器启动时开始创造一个域数据高速缓存所需的信息。在cache语句中,用一个指点其根域,在namedca文件中至少包含根服务器的名字和地址。named的高速缓存操作是很重要的。幸运的是,建立高速缓存的namedca文件通常是最简单的named配置文件。
基本的namedca文件包含根服务器的NS记录和提供根服务器地址的A记录。下面就是基本的namedca文件:
; namedca file
; servers for the root domain
99999999 IN NS NSNICDDNMIL
99999999 IN NS NSNASAGOV
99999999 IN NS KAVANISCSRICOM
99999999 IN NS TERPUMDEDU
99999999 IN NS CNYSERNET
99999999 IN NS NSINTERNICNET
;
; root servers by address
;
NSNICDDNMIL 99999999 IN A 199112364
NSNASAGOV 99999999 IN A 1281021610
KAVANISCSRICOM 99999999 IN A 192333324
TERPUMDEDU 99999999 IN A 12881090
CNYSERNET 99999999 IN A 19233412
NSINTERNICNET 99999999 IN A 1984104
该记录只包含各服务器记录和地址记录。
了解HTTP-cache文章
本文大部分内容参考图文并茂的HTTP。那么为什么在谈缓存的时候要先扯代理服务器呢?不要着急,让我们来看一个简单的请求图。
我们看到客户端(用户)不是直接向源服务器发送请求,而是通过代理服务器,然后通过代理服务器发送给源服务器。响应也遵循此顺序。
那么代理服务器在这个过程中起到什么作用呢?
缓存是指保存在代理服务器或客户端本地磁盘上的资源副本。使用缓存可以减少对源服务器的访问,从而节省通信流量和通信时间。
缓存是代理服务器的一种,分为缓存代理型。换句话说,当代理转发从服务器返回的响应时,代理服务器将保留资源的副本。
缓存的好处是可以避免多次从源服务器转发资源。因此,客户端可以从附近的缓存服务器获取资源,源服务器不必多次处理同一请求。
即使缓存服务器和客户端有缓存,也不可能每次都返回给我。如果有,我不知道源服务器有没有更新,因为我总是看缓存的资源。
为了解决这个问题,时效性的概念是为缓存设计的:
即使有缓存,由于客户端的要求和缓存的有效期,资源的有效性也会向源服务器确认。如果判断缓存无效,缓存服务器将再次从源服务器获取“新”资源。
缓存不仅可以存在于缓存服务器中,也可以存在于客户端浏览器中。以InternetExplorer程序为例,客户端缓存称为Internet临时文件。
如果浏览器缓存有效,就没有必要向服务器请求相同的资源,可以直接从本地磁盘读取。
此外,与缓存服务器相同,当确定缓存已经过期时,它会向源服务器确认资源的有效性。如果判断浏览器缓存无效,浏览器会再次请求新的资源。
Pragma是HTTP/11之前历史遗留的字段,只定义为向后兼容HTTP/10。
定义的形式是独特的,如下所示。
Pragma:无缓存
这个头字段属于通用头字段,但是只在客户端发送的请求中使用。客户端将要求所有中间服务器不要返回缓存的资源。
通过指定标题字段Cache-Control的指令,可以操作高速缓存的工作机制。
可用指令按请求和响应分类如下:
公共指导
缓存控制:公共
当公共指令被指定时,它清楚地表明其他用户也可以使用缓存。
私人指导
无存储指令
缓存控制:无存储
当使用no-store指令时,它意味着请求(和相应的响应)或响应包含机密信息。
因此,该指令规定缓存不能在本地存储请求或响应的任何部分。
Ps:从字面上看,很容易把no-cache误解为不缓存,但实际上no-cache代表的是不缓存过期的资源。缓存将在与源服务器确认有效期后处理资源。或许称之为“无撤销不从缓存提供服务”更合适。No-store真的不是缓存,读者要注意区别。
S-maxage指令
cache-control:s-maxage=604800//(单位:秒)
s-maxage指令的功能与max-age指令相同,不同的是s-maxage指令只适用于多个用户使用的公共缓存服务器(这里指代理服务器)。也就是说,这个指令对重复返回响应给同一个用户的服务器没有影响。
此外,当使用s-maxage指令时,Expires头字段和max-age指令的处理被直接忽略。
最大年龄指令
缓存扩展令牌
缓存控制:私有,社区="UCI"
使用高速缓存扩展令牌,可以扩展高速缓存控制头字段中的指令。
例如,高速缓存控制头字段本身没有命令社区。在扩展标记的帮助下,添加了这条指令。如果缓存服务器不能忽略社区的新指令,就直接忽略。因此,扩展令牌仅对能够理解它的缓存服务器有意义。
如果-未修改-自:2012年7月3日星期四00:00:00GMT
头字段If-Modified-Since的功能与头字段If-Modified-Since的功能相反。它的功能是通知服务器,如果在字段值中指定的日期和时间之后,指定的请求资源尚未更新,则它只能处理请求。如果更新发生在指定的日期和时间之后,则作为响应返回状态代码412前提条件失败。
Ps:Last-Modified有些问题。如果在服务器上修改了一个资源,但是它的实际内容根本没有改变,那么整个实体将被返回给客户机,因为最后修改时间不匹配(即使在客户机缓存中有一个相同的资源)。
标题If-None-Match是附加条件之一。且其报头字段If-Match具有相反效果。当用于指定If-None-Match字段的值的实体标记(ETag)的值与所请求资源的ETag不一致时,它告诉服务器处理该请求。
在GET或head方法中使用HEADer字段If-None-Match来获取最新的资源。因此,这有点类似于使用头字段If-Modified-Since时的情况。
不要向服务器查询,直接使用浏览器缓存的内容。响应内容与上一次响应内容完全相同,例如日期时间为上次响应时间。
F5的功能不同于直接在URI输入字段中键入然后按enter。F5无论如何都会让浏览器向服务器发送一个HTTP请求,即使之前的响应中有Expires头。
CtrlF5想要的是彻底从服务器获取一个新的资源,所以不仅需要向服务器发送一个HTTP请求,而且这个请求连if-modified-since/if-none-match都没有,这就迫使服务器不返回304,而是准确返回整个资源的副本。这样CtrlF5导致的传输时间变长,自然网页刷新变慢。
Cache-Control只在HTTP11中可用,不适用于HTTP10,而Expires同时适用于HTTP10和HTTP11,因此,大多数情况下同时发送这两个头是更好的选择。当客户端可以解析两个标头时,将首先使用Cache-Control。
两者都是通过某个标识值请求资源。如果服务器端的资源没有变化,会自动返回HTTP304(未变化)状态码,内容为空,这样就节省了传输的数据量。当资源改变时,新的资源被返回。从而保证资源不会重复发送给客户端,也保证了在服务器发生变化时,客户端能够获得最新的资源。
Last-Modified使用文件的最后一次修改作为文件标识值,无法处理一秒钟内多次修改文件的情况,只要修改文件就会再次返回资源内容,即使文件的实际内容没有修改;ETag作为“被请求变量的实体值”,完全可以解决Last-Modifiedheader的问题,但其计算过程需要消耗服务器资源。
Expires和Cache-Control都存在服务器被修改的问题。如果缓存仍然有效,那么客户端将不会请求服务器资源(非刷新),因此存在资源版本不匹配的问题。但是,强制刷新肯定会发起一个HTTP请求并返回资源内容,而不管该内容在此期间是否被修改过。Last-Modified和Etag每次请求资源都会发起请求,即使长时间不会有修改的资源,至少也会有一次请求响应消耗。
对于所有可缓存的资源,指定Expires或缓存控制最大年龄和Last-Modified或ETag是非常重要的。同时,前者和后者可以很好地相互适应。
前者不需要每次都发送请求来检查资源的时效性,而后者保证了资源没有被修改时不需要重新发送。在用户不同的页面刷新行为中,两者的结合也可以很好的利用HTTP缓存控制特性。无论是在地址栏输入URI然后回车访问,还是点击刷新按钮,浏览器都可以充分利用缓存的内容,避免不必要的请求和数据传输。
方法很简单,就是把可能更新的资源以版本形式发布。常见的方法是将一串md5或时间标记附加到文件名或参数上:
可以看出,上面的例子都有不同的做法。有的在URI后面加md5参数,有的用md5值作为文件名的一部分,有的把资源放在featureversion的目录下。
然后在文件不变的情况下,浏览器可以直接使用缓存的文件,不需要发起请求;当文件改变时,由于文件版本号的改变,文件名改变,请求的url改变,自然文件更新。这可以确保客户端能够及时从服务器接收到新修改的文件。通过这样的处理,增加了静态资源尤其是资源的缓存时间,避免了资源快速过期,客户端频繁向服务器发起资源请求,服务器返回304响应(Last-Modified/Etag)的情况。
网页缓存文件怎么提取?
直接找到对应的缓存文件的目录打开就可以了,如果你系统装在C盘,那么目录应该是C:DocumentsandSettingsAdministratorLONGSKY-L383KG7LocalSettingsTemporaryInternetFiles其他盘的就把C换成你的盘符就可以了,进去之后按文件大小排序一下就行了,一般视频文件都是比较大的,这样就比较好找了,当然,你也可以搜索一下常见的饰品格式的文件效果也不错
怎么要用cookie缓存?
原因有以下几点:
1、信号问题,当在信号弱的情况下,网页是需要很长时间或者根本打不开的。
2、软件问题,新版本的UC或者是浏览器也有可能导致。
3、上网设置问题,你可以改变一下,cmwap,这个比较稳定。
手机浏览器cookie设置的方法操作如下:1、打开iphone的主界面,点击“设置”。
2、设置条目里,找到“Safari”,这就是自带浏览器的相关设置,点击进去。
3、这时候可以看到自带浏览器的相关设置了,往下拉,有“清除历史记录”、“清除Cookie”、以及“清除缓存”,三项,点击“清除历史记录”,询问时确定。
4、点击“清除缓存”。
电脑浏览器,比如qq浏览器如何缓存视频?
QQ浏览器可以缓存视频,缓存方法如下:;1进入QQ浏览器的首页,设置QQ浏览器默认的搜索引擎,点击左键,找到“设置”,找到,搜索引擎,查看已有的搜索引擎。2选择要使用的搜索引擎,选择完成,回到首页,在输入框输入要搜索的内容,此时出现搜索结果。3输入要搜索的视频内容,进入网页,QQ浏览器支持直接打开网页,进入的网页可能是不同的视频网站,但是下载的方法都是一样。4进入视频播放后,轻触界面,出现播放的进度条,在出现的界面上点击下载按钮,进入视频缓存界面,之后点击开始缓存。5缓存后的视频是在“我的视频—缓存管理”中查看,也可以直接左键进入“下载”查看视频下载进度,下载完成后,就可以在下载列表里看到已完成。6不同网页的视频下载的格式不一样具体看缓存的视频是什么格式,如果需要删除你的视频,长按视频,勾选删除,有时你正在播放的视频即使缓存完成也是无法删除的,需要关闭浏览器重新进入删除。
360浏览器怎么下载视频
1、在360浏览器中打开你要看的视频,无需缓冲
2、在下面有一个IE,打开它,红圈圈住的,双击
3、出现一个新网页,该网页是你所要视频的网页,让视频缓冲完
4、然后:工具——internet选项——常规栏的浏览历史纪录的设”——查看文件,按照红圈依次点
5、按着红圈依次点,视频文件是MP4,FLV,FLASH,拖到桌面放一下看是不是你要的就OK
打网页时出现(缓存文件写入失败!)怎么办呢?
右键桌面的IE在弹出的菜单中选Internet属性然后找到Internet临时文件按删除Cookies按钮然后再按删除文件按钮如果还不行就按设置按钮在弹出的窗口里面找一个叫移动文件夹的按钮把文件夹的位置更改一下
怎样在电脑上播放缓存的网页视频?
您好,很高兴为您服务!
HD版的UC浏览器缓存的视·频是不支持导出使用其他播放器播放的,只能使用UC浏览器播放,故找到缓存的文件也是无法更改格式播放的,请了解。
如果仍有问题,请您继续向我们反馈,我们会第一时间为您跟进。
0条评论