给 iphone 3G 安装程序开发软件

我的iphone 3G基本不是电话了,现在我已经将它当做普通电脑用了,昨晚安装了sshd,然后做什么事情就都方便多了,今天有装了几个软件:

1. 安装 sudo top lsof vsftfd tcpdump

都很简单的,只有vsftpd安装完,启动报错:500 OOPS: could not bind listening IPv4 socket

 

2. 安装php,大小才14MB ,自带了不少模块,版本还是PHP5.2.8呢,而且还附带安装了curl

iPhone:~ mobile$ php -m
[PHP Modules]
ctype
curl
date
dom
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
posix
Reflection
session
SimpleXML
SPL
SQLite
standard
tokenizer
xml
xmlreader
xmlwriter

[Zend Modules]

iPhone:~ mobile$ php -v
PHP 5.2.8 (cli) (built: Jan 25 2009 02:57:26)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

 

3. 还装了几个java开发的实例

 

 

4. 下一步就是安装gcc c库之类的东西了,希望能了解一下iphone软件开发

 

5. iphone 里的vi就是有些不好使,编辑个很简单的文件都不好用,就安装了一个vim 7.1的

sshd 配置

“/etc/ssh/sshd_config”是OpenSSH的配置文件,允许设置选项改变这个daemon的运行。这个文件的每一行包含“关键词-值”的匹配,其中“关键词”是忽略大小写的。下面列出来的是最重要的关键词,用man命令查看帮助页(sshd (8))可以得到详细的列表。

# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin

下面逐行说明上面的选项设置:

Port 22
“Port”设置sshd监听的端口号。

ListenAddress 192.168.1.1
“ListenAddress”设置sshd服务器绑定的IP地址。

HostKey /etc/ssh/ssh_host_key
“HostKey”设置包含计算机私人密匙的文件。

ServerKeyBits 1024
“ServerKeyBits”定义服务器密匙的位数。

LoginGraceTime 600
“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。

KeyRegenerationInterval 3600
“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。

PermitRootLogin no
“PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。

IgnoreRhosts yes
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。

IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”

StrictModes yes
“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。

X11Forwarding no
“X11Forwarding”设置是否允许X11转发。

PrintMotd yes
“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。

SyslogFacility AUTH

“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。

LogLevel INFO
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。

RhostsAuthentication no
“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。

RhostsRSAAuthentication no
“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。

RSAAuthentication yes
“RSAAuthentication”设置是否允许只有RSA安全验证。

PasswordAuthentication yes
“PasswordAuthentication”设置是否允许口令验证。

PermitEmptyPasswords no
“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。

AllowUsers admin
“AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。

————————————————————-

如果出现 ssh_exchange_identification

编辑 hosts.deny 把 ALL: ALL: DENY 注释掉

————————————————————–

由SecureCRT 生成的密钥对和用OpenSSH生成的密钥对在格式上不一样,而且二者都只能认识自己的密钥的格式,所以在用SecureCRT同OpenSSH连接时分别都要用它们自己的密钥格式,可以用任何一个方法生成然后使用ssh-keygen -i 把SecureCRT生成的的密钥转换成OpenSSH的密钥格式,或者用ssh-keygen -e把OpenSSH的密钥格式转换成SecureCRT能够识别的IETF SECSH格式。

摘自:http://lnote.blogbus.com/logs/10003892.html

iphone 3G 启动sshd

买的iphone 3G手机默认没有启动sshd,启动该服务基本走了如下步骤:

1.  执行 /usr/sbin/sshd  提示libcrypto 找不见,后来发现时openssl没有安装,安装openssl后,该提示消失
2.  执行 /usr/sbin/sshd  提示 ssh_host_rsa_key   ssh_host_dsa_key 没有,使用ssh-keygen 生成就行了:
  # ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N ""
  Generating public/private rsa1 key pair.
  Your identification has been saved in /usr/local/etc/ssh_host_key.
  Your public key has been saved in /usr/local/etc/ssh_host_key.pub.
  The key fingerprint is:
  5c:30:b9:cc:45:b6:fd:c3:c1:e1:a2:cc:7c:0f:3c:29

  #ssh-keygen -t dsa -f /usr/local/etc/ssh_host_dsa_key -N ""
  Generating public/private dsa key pair.
  ification has been saved in /usr/local/etc/ssh_host_dsa_key.
  Your public key has been saved in /usr/local/etc/ssh_host_dsa_key.pub.
  The key fingerprint is:
  30:ce:d9:c1:61:36:40:0b:9e:04:6f:89:96:f1:e7:39 root@v420

  #ssh-keygen -t rsa -f /usr/local/etc/ssh_host_rsa_key -N ""
  Generating public/private rsa key pair.
  Your identification has been saved in /usr/local/etc/ssh_host_rsa_key.
  Your public key has been saved in /usr/local/etc/ssh_host_rsa_key.pub.
  The key fingerprint is:
  37:34:88:98:b3:8c:1b:50:e0:50:9c:3d:18:c6:64:2a
3. 生成key后,启动sshd、远程连接成功

curl 上传文件

curl通过ftp上传文件:

curl -T file_to_upload “ftp://username:password@host/

curl通过http上传文件:

curl -F file_alia_name=@file_to_upload "http://host/receive.php"

————receive.php————

<?php

$uploadfile = "path_to_save_file";

move_uploaded_file($_FILES[‘file_alia_name’][‘tmp_name’], $uploadfile);

?>

如果使用curl通过http传递数据,不管是get还是post,都是需要urlencode的,所以如果数据很乱,可以考虑以文件的形式上传

笑话

情人节到了:                      
GG问MM:你喜欢什么花?
MM羞答答道:我喜欢两种花。
GG急切的问:哪两种?我送给你!
MM低头小声说:有钱花,尽管花!

————————————————————————————
情人节到了,尽量不要喝酒,如果非吆喝,希望坚持四项基本原则:
一、喝酒以不醉为原则;
二、醉了以不失身为原则;
三、失身了以不承认为原则;
四、承认了以不负责为原则。

————————————————————————————

周一早上....正在冲泡着浓郁的咖啡,一个有趣的对话发生了...

爸,我是怎么来到这世界的?

哦,儿子啊,总有一天我会让你知道的。

拜托!为什么今天不行?

好吧,你仔细听着!

你妈和我在网吧相遇而认识,

并在网咖的洗手间你妈和我使用了超级链接,

那时你妈从我的随身插硬盘下载一些数据,

当我完成上传时,我们发现我们没有使用防火墙,

因此,想要取消或删除都已为时太晚,

nine months later we ended up with a virus.

————————————————————————————

有一美女下夜班,被一好色男子尾随跟踪,美女很害怕,正好路过一片坟地, 好色男子正要下手, 美女走到一座坟墓前说:“爸爸,开门吧,我回来了”。吓的好色男子狂奔而去。美女为自己的聪明得意地笑了起来,哪知笑声未落,从坟墓里传出一个阴森森的声音说:“闺女,你咋又忘记带钥匙了呢?”吓得美女尖叫着跑了。这时,一个盗墓者从坟墓里爬了出来,说:“影响我工作,吓死你”。突然发现墓碑前有一老者,手拿凿子在刻墓碑,就好奇地问:“你在干吗”?老者生气地说:“这些不肖子孙把我的墓碑都刻错了,只好自己来改啦”。盗墓者一听,吓得撒腿就跑了。看着盗墓者的背影,老者冷笑道:“跟老子抢生意,吓死你”。一不小心,凿子掉地上了,老者正要弯腰去拾,却看见从草丛中伸出一只手,同时还有个冷冰冰声音:“ 啊,敢乱改我家的门牌号”。吓得老者连滚带爬地跑了。一个拾荒者从草丛中爬出来,捡起地上的凿子,感叹道:“这年头,捡块烂铁还得费这么大神。”祝同志们国庆节节快乐 !

关于浏览器的一个问题

在一个很多代码的程序里出现过类似如下的问题(这里我就核心内容举了个例子):

———————–test.html———————————–

<form id="f" action="" method="get" >
 <input type="submit">
</form>
<script>
 function check(){
  alert("mmm");
  return false;
 }
 document.getElementById("f").onsubmit=check;
(function (){
    var footer = ‘<hr><div>’;
    footer += ‘<a href="http://sina.com.cn">sina</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;’;
    footer += ‘<a href=http://163.com>163</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;’;
    footer += ‘</div>’;
 document.body.innerHTML += footer;
})();
</script>

—————————————————————————-

就这段代码,在ie中点击按钮,有弹出的alert;在firfox中就没有弹出的alert;

经测试,问题就出在document.body.innerHTML上,不知道为什么;

做如下修改就可以了:

——————————test2.html——————————-

<form id="f" action="" method="get" >
 <input type="submit">
</form>
<script>
 function check(){
  alert("mmm");
  return false;
 }
 document.getElementById("f").onsubmit=check;
(function (){
    var footer = ”;
    footer += ‘<a href="http://sina.com.cn/">sina</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;’;
    footer += ‘<a href="http://163.com/">163</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;’;
    var div = document.createElement("div");
    div.innerHTML = footer;
    document.body.appendChild(div);

})();
</script>

————————————————————————–

我在这里写这篇日志,不完全是想说明这个问题;因为我在很长的代码中猜测、尝试了很多种办法,但怎么也没想到在这里出现了问题;最终还是通过使用二分法来删除一些无关的代码来缩小问题出现的范围才发现了,我一直很强调也很重视这种方法,但使用的时候总是根据经验做一些无谓的尝试,所以我在这里再一次提醒自己,也提醒同行们,调试代码时一定要重视二分法的使用。

HTTP 协议基础,http头信息详解

HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP 协议的详细内容请参 考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以 及可能的实体内容。

 通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域 值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

通用头域

 通用头 域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩 展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。

Cache-Control头域

 Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如 下:

 Public指示响应可被任何缓存区缓存。

 Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

no-cache指示请求或响应消息不能缓存

no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Date头域

 Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

Pragma头域

 Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。

请求消息

请求消息的第一行为下面的格式:

 MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。 HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可 以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。

 SP表示空格。Request-URI遵循URI格式,在此字段为星 号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP- Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加 信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请 求头域,一般将会作为实体头域处理。

典型的请求消息:

GET http://download.microtool.de:80/somedata.exe
Host: download.microtool.de
Accept:*/*
Pragma: no-cache
Cache-Control: no-cache
Referer: http://download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-

 上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。

Host头域

 Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

Referer头域

 Referer 头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被 追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

Range头域

Range头域可以请求实体的一个或者多个子范围。例如,

表示头500个字节:bytes=0-499

表示第二个500字节:bytes=500-999

表示最后500个字节:bytes=-500

表示500字节以后的范围:bytes=500-

第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-999

 但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。

User-Agent头域

User-Agent头域的内容包含发出请求的用户信息。

响应消息

响应消息的第一行为下面的格式:

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF

 HTTP -Version表示支持的HTTP版本,例如为HTTP/1.1。Status- Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自 动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可 能取5个不同的值:

1xx:信息响应类,表示接收到请求并且继续处理

2xx:处理成功响应类,表示动作被成功接收、理解和接受

3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

5xx:服务端错误,服务器不能正确执行一个正确的请求

 响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头 域,一般将会作为实体头域处理。

典型的响应消息:

HTTP/1.0200OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Etag:"a030f020ac7c01:1e9f"

Content-length:39725426

Content-range:bytes554554-40279979/40279980

 上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。

Location响应头

Location响应头用于重定向接收者到一个新URI地址。

Server响应头

 Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。

实体

 请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体 头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定 义,它的长度由Content-Length或Content-Range定义。

Content-Type实体头

 Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型 Content-Range实体头

 Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

 Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

 例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。

Last-modified实体头

    

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

    

应答头 说明
Allow 服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding 文 档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的 下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept- Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
Content-Length 表 示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过 byteArrayStream.writeTo(response.getOutputStream()发送内容。
Content-Type 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。
            
Date 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
Expires 应该在什么时候认为文档已经过期,从而不再缓存它?
Last-Modified 文 档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档 才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
Location 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。
            注 意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的 HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。
            
            注意Refresh的意义是“N秒之后 刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则 可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" …>。
            
            注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
Server 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
Set-Cookie 设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", …),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
WWW-Authenticate 客 户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如, response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。
            注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

关于Cache-control的一些认识

网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
(1) 打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5
表示当访问此网页后的5秒内再次访问不会去服务器
(2) 在地址栏回车
如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
(3) 按后退按扭
如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问
(4) 按刷新按扭
无论为何值,都会重复访问

当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。
另外,通过指定“Expires”值也会影响到缓存。例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问:
Expires: Fri, 31 Dec 1999 16:00:00 GMT

在ASP中,可以通过Response对象的Expires、ExpiresAbsolute属性控制Expires值;通过Response对象的CacheControl属性控制Cache-control的值,例如:
Response.ExpiresAbsolute = #2000-1-1# ‘ 指定绝对的过期时间,这个时间用的是服务器当地时间,会被自动转换为GMT时间
Response.Expires = 20 ‘ 指定相对的过期时间,以分钟为单位,表示从当前时间起过多少分钟过期。
Response.CacheControl = "no-cache"

详细确切的定义建议参考rfc :http://www.w3.org/Protocols/rfc2616/rfc2616.html