??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久不卡国产精品一区二区,国产巨作麻豆欧美亚洲综合久久 ,国产精品日韩深夜福利久久http://www.shnenglu.com/woaidongmao/category/11721.html文章均收录自他h博客Q但不喜标题前加-[转脓]Q因其丑陋,见谅Q~zh-cnTue, 08 Sep 2009 16:04:14 GMTTue, 08 Sep 2009 16:04:14 GMT60反向代理?---服务器的代理http://www.shnenglu.com/woaidongmao/archive/2009/09/08/95620.html肥仔肥仔Tue, 08 Sep 2009 14:44:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/09/08/95620.htmlhttp://www.shnenglu.com/woaidongmao/comments/95620.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/09/08/95620.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/95620.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/95620.html代理服务器是使用非常普遍的一U将局域网L联入互联|的一U方式,使用代理上网可以节约紧缺?span lang=EN-US>IP地址资源Q而且可以L外部L对内部主机的讉KQ 内部|主机免受外部网L的攻凅R但是,如果惌互联|上的主问内部网的主源(例如Q?span lang=EN-US>Web站点Q,又想使内部网L免受外部|主机攻击,一般的 代理服务是不能实现的Q需要用反向代理来实现?

  本文详l介l反向代理服务的概念以及如何利用反向代理服务器提?span lang=EN-US>WEB服务器的性能和安全性?span lang=EN-US>

  一Q反向代理的概念

  什么是反向代理呢?其实Q反向代理也是通常所说的WEB服务器加速,它是一U通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB~冲服务器(卻IWEB反向代理服务器)来降低实际的WEB服务器的负蝲。典型的l构如下图所C:

clip_image001

  Web服务器加速(反向代理Q是针对Web服务器提供加速功能的。它作ؓ代理CacheQ但q不针对?览器用户Q而针对一台或多台特定Web服务器(q也是反向代理名U的由来Q。实施反向代理(如上图所C)Q只要将Reverse Proxy Cache讑֤攄在一台或多台Web服务器前端即可。当互联|用戯问某?span lang=EN-US>WEB服务器时Q通过DNS服务器解析后?span lang=EN-US>IP地址?span lang=EN-US>Reverse Proxy Server?span lang=EN-US>IP地址,而非原始Web服务器的IP地址,q时Reverse Proxy Server讑֤充当Web服务器,览器可以与它连接,无需再直接与Web服务器相q。因此,大量Web服务工作量被卸蝲到反向代理服务上。不但能够防 止外部网L直接?span lang=EN-US>web服务器直接通信带来的安全隐患,而且能够很大E度上减?span lang=EN-US>web服务器的负担Q提高访问速度?span lang=EN-US>

  二.      反向代理和其它代理的比较

  下面对几种典型的代理服务作一个简单的比较。在|络上常见的代理服务器有三种Q?span lang=EN-US>

  1Q?标准的代理缓冲服务器

  一个标准的代理~冲服务被用于缓存静态的|页Q例如:html文g和图片文件等Q到本地|络上的一CZQ即代理服务器)。当被缓存的面被第二次讉K的时候,览器将直接从本C理服务器那里获取h数据而不再向?span lang=EN-US>web站点h数据。这样就节省了宝늚|络带宽Q而且提高了访问速度。但是,要想实现q种方式Q必d每一个内部主机的览器上明确指明代理服务器的IP地址和端口号。客L上网Ӟ每次都把h送给代理服务器处理,代理服务器根据请求确定是否连接到q程web服务器获取数据。如果在本地~冲区有目标文gQ则直接文件传l用户即可。如果没有的话则先取回文Ӟ先在本地保存一份缓Ԍ然后文件发l客L览器?span lang=EN-US>

  2Q?透明代理~冲服务?span lang=EN-US>

  透明代理~冲服务和标准代理服务器的功能完全相同。但是,代理操作对客L的浏览器是透明的(即不需?明代理服务器?span lang=EN-US>IP和端口)。透明代理服务器阻断网l通信Qƈ且过滤出讉K外部?span lang=EN-US>HTTPQ?span lang=EN-US>80端口Q流量。如果客L的请求在本地有缓冲则缓冲的数据 直接发给用户Q如果在本地没有~冲则向q程web服务器发求,其余操作和标准的代理服务器完全相同。对?span lang=EN-US>Linux操作pȝ来说Q透明代理使用 Iptables或?span lang=EN-US>Ipchains实现。因Z需要对览器作M讄Q所以,透明代理对于ISPQ?span lang=EN-US>Internet服务器提供商Q特别有用?span lang=EN-US>

  3Q?反向代理~冲服务?span lang=EN-US>

  反向代理是和前两U代理完全不同的一U代理服务。用它可以降低原始WEB服务器的负蝲。反向代理服务器承担了对原始WEB服务器的静态页面的hQ防止原始服务器q蝲。它位于本地WEB服务器和Internet之间Q处理所有对WEB服务器的hQ阻??span lang=EN-US>WEB服务器和Internet的直接通信。如果互联网用户h的页面在代理服务器上有缓冲的话,代理服务器直接将~冲内容发送给用户。如果没有缓冲则先向WEB服务器发求,取回数据Q本地缓存后再发送给用户。这U方式通过降低了向WEB服务器的hC而降低了WEB服务器的负蝲?span lang=EN-US>

  三.反向代理工作原理

  反向代理服务器位于本?span lang=EN-US>WEB服务器和Internet之间,如下图所C:

clip_image002

  当用h览器发出一?span lang=EN-US>HTTPhӞ通过域名解析请求定向到反向代理服务器(如果要实现多?span lang=EN-US>WEB 服务器的反向代理Q需要将多个WEB服务器的域名都指向反向代理服务器Q。由反向代理服务器处理器h。反向代理一般只~存可缓冲的数据Q比?span lang=EN-US>html|?和囄{)Q而一?span lang=EN-US>CGI脚本E序或?span lang=EN-US>ASP之类的程序不~存。它Ҏ?span lang=EN-US>WEB服务器返回的HTTP头标记来~冲静态页面。有四个最重要HTTP头标 讎ͼ

  • Last-Modified: 告诉反向代理面什么时间被修改
  • Expires: 告诉反向代理面什么时间应该从~冲Z删除
  • Cache-Control: 告诉反向代理面是否应该被缓?
  • Pragma: 告诉反向代理面是否应该被缓?span lang=EN-US>.

例如Q在默认情况下,ASP面q回” Cache-control: private.” Q所?span lang=EN-US>ASP面时不会在反向代理服务器缓存的

 

 

     反向代理服务器(Reverse Proxy ServerQ一般被|于源服务器的前端,如图中所C。它配备有大定w的内存和高速磁盘,用于~存客户的请求,所以反向代理服务器又称为加速服务器?

                       

clip_image001

?span lang=EN-US>:反向代理服务?span lang=EN-US>

    对于客户送过来的hQ反向代理服务器的工作方式如下:

·            使用反向代理服务器后Q客L送过来的h会首先送到反向代理服务器?

·            反向代理服务器先查自q存的内容Q动态内Ҏ静态内容)?

·            如果客户h内容在缓存中Q则直接结果反馈给客户Q此ơ请求完成?

·            如果客户h内容不在~存中,它会Ҏ后面的各?span lang=EN-US>HTTP服务器(或内Ҏ务器Q的q行情况Q做负蝲均衡处理Q将hq一步送到某个http 服务器(或内Ҏ务器Q?

·            后端服务器作处理后,反馈l果l反向代理服务器?

·            对于后端服务器反馈过来的l果Q它会将l果~存Q动态内Ҏ静态内容)hQƈq一步送给客户端,此次h完成?

    反向代理服务器通常要ؓ一个请求同时维护两个会话:与客L的会话和与后端服务器的对话。和普通的代理不同Q反向代理服务器一般只代理一台或者有限的几台服务器,对于客户而言Q反向代理服务器对于他们q当于源服务器Q对于源服务器而言Q反向代理服务器通常是唯一的客P因ؓ一般客户不和源服务器直接通信。典型情况下Q源服务器对于客h者客户对于源服务器,都是不可见的?span lang=EN-US>

反向代理服务器的作用

    代理服务器v着客户Zl站的作用。它转发hq接收响应,q它成为高速缓存结果以侉K用的理想场所。这cM理服务器UCؓ高速缓存代理,它具有以下作用:

·            加快对客L响应旉Q减d端源服务器(卛_Ҏ务器Q负?

    使用反向代理服务器后Q由于它h大容量缓存,可以~存多个静?span lang=EN-US>/动态页面,当有客户h送过来时Q如能够直接在缓存中扑ֈhl果Q就可以直接反馈l客P而不用再请求送给后端服务器。这样就加快了对客户的响应时_同时也减M后端源服务器的负载?span lang=EN-US>

·            保障后端源服务器Q即内容服务器)的安?

    ?span lang=EN-US>Internet上的客户端而言Q它只能接触到反向代理服务器Q因此反向代理服务器成为后端服务器的屏障,保障了后端服务器的安全?span lang=EN-US>

·            减少源服务器Q即内容服务器)节点之间占用的网l带?

    使用反向代理服务器后Q它h的大定w~存可以减少源服务器的网l通讯量。这样就减少源服务器Q即内容服务器)节点之间占用的网l带宽?span lang=EN-US>

·            Ҏ服务器进行负载均?span lang=EN-US>(Load Balance)?

    当后端源服务器有多个Ӟ反向代理服务器可以根据后端各个服务器当前负蝲情况Q做负蝲均衡处理Q有选择的将当前h送给最I闲的后端服务器?/span>



肥仔 2009-09-08 22:44 发表评论
]]>
深入出URL~码http://www.shnenglu.com/woaidongmao/archive/2009/09/08/95602.html肥仔肥仔Tue, 08 Sep 2009 10:33:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/09/08/95602.htmlhttp://www.shnenglu.com/woaidongmao/comments/95602.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/09/08/95602.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/95602.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/95602.html阅读全文

肥仔 2009-09-08 18:33 发表评论
]]>
Keep-Alive: timeout=5, max=100http://www.shnenglu.com/woaidongmao/archive/2009/09/08/95544.html肥仔肥仔Tue, 08 Sep 2009 03:17:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/09/08/95544.htmlhttp://www.shnenglu.com/woaidongmao/comments/95544.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/09/08/95544.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/95544.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/95544.htmlKeep-Alive: timeout=5, max=100
timeout
Q过期时?span lang=EN-US>5U(对应httpd.conf里的参数是:KeepAliveTimeoutQ,maxq了100U,强制断掉q接

是?span lang=EN-US>timeout旉内又有新的连接过来,同时max会自动减1Q直Cؓ0Q强制断?/span>。见下面的四个图Q注意看Date的|前后旉差都是在5U之内)Q?span lang=EN-US>
clip_image002
clip_image004

clip_image006

clip_image008

 



肥仔 2009-09-08 11:17 发表评论
]]>
支持gzip的爬?gzip zlib deflate 相关介绍http://www.shnenglu.com/woaidongmao/archive/2009/09/07/95496.html肥仔肥仔Mon, 07 Sep 2009 13:58:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/09/07/95496.htmlhttp://www.shnenglu.com/woaidongmao/comments/95496.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/09/07/95496.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/95496.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/95496.html最q给Httpdownload 装了支?/span>gzip传输

 

?/span>HTTP的角?/span>

1 客户?/span> ?/span>http Request  Header上带?/span> Accept-Encoding:gzip,deflate

2服务器若是支?/span>gzip压羃则在http reponse eader

部分q回Content-Encoding: gzip 或?/span>Content-Type: application/x-gzip

3?/span>body部分?/span>gzip解压~?/span> 则得到网内?/span>.

传说?/span>ie?/span>bug 在处?/span>js css压羃的时候有bug,我不理解 挺简单的怎么会有bug?/span>.

?/span>gzip的角?/span>

gzip是一U数据格?/span> 默认且目前仅使用deflate法压羃data部分

zlib也是一U数据格?/span>,使用defalte法压羃数据部分.

deflate是一U压~算?/span>,?/span>huffman~码的一U加?/span>

 

zlib是一个开源库, 提供deflate压羃和对应的infalte解压~?/span>.

不过zlib默认?/span>deflate infalte默认是处?/span>zlib格式数据.必须使用

deflateInit2(&strm, DEFAULT_COMPRESSION,Z_DEFLATED, DEFAULT_WINDOWSIZE,DEFAULT_MEMLEVEL, Z_DEFAULT_STRATEGY);

初始化才是处?/span>raw deflate data.(q一点在zlib manul没有?/span>,?/span>faq中提?/span>,困扰了我好久,q是同事L帮我调试发现)

至于gzip格式解析 对着RFC写就可以?/span>.

参见RFC 1950 关于zlib http://www.faqs.org/rfcs/rfc1950.html

      RFC 1951 关于deflate http://www.faqs.org/rfcs/rfc1951.html

      RFC 1952 关于gzip http://www.faqs.org/rfcs/rfc1952.html 


nt  CGzip::Ungzip(const std::string & inStr , std::string &outStr){
    static int nFileCount=0;
        nFileCount++;
    string strZipFileName="test";
//    CConvert::StrToFile(inStr,strZipFileName+CConvert::toString<int>(nFileCount)+"H.gzip"clip_image001;
    if(inStr.length()<11){
        return -1;   
    }
    //process gzip header
    unsigned int skipCt = 10;
    unsigned int skipZeroCt = 0;
    unsigned char ID1 = inStr[0];
    unsigned char ID2 = inStr[1];
    unsigned char XFL=inStr[8];
    bool bFEXTRA = false ;
    bool bFNAME = false ;
    bool bFCOMMENT = false ;
    bool bFHCRC = false ;
    unsigned int XLEN = 0;
   
    if( (ID1!=31) && (ID2!=139)){
        return -1;  //
?/span>gzip头部
        }
    unsigned char CM = inStr[2];
    if(CM!=clip_image002{
        return -1; //
现在都只处理 deflate压羃?/span>
    }
    unsigned char FLG = inStr[3];
    if( (FLG & GZIP_HEAD_FEXTRA) != 0){
        bFEXTRA = true ;
        skipCt += 2;
        XLEN = inStr[10]+ inStr[11]*256 ;//
按照端字节序列处理
        skipCt += XLEN;
    }
    if( (FLG & GZIP_HEAD_FNAME) != 0){
        bFNAME = true;
        skipZeroCt++;
    }
    if( (FLG & GZIP_HEAD_FCOMMENT) != 0){
        bFCOMMENT = true;
        skipZeroCt++;   
    }
   
    size_t passedZeroCt = 0;
   
    size_t iStep = skipCt ;
    for( size_t iStep =  skipCt ; iStep<inStr.length(); iStep++){
            if(passedZeroCt>=skipZeroCt){
                break;   
            }
            if(inStr[iStep]==''clip_image001{
                passedZeroCt++;   
            }
       
    }
    skipCt = iStep ;
    if( (FLG & GZIP_HEAD_FHCRC) != 0){
        bFHCRC = true;
        skipCt+=2 ;
    }
        string coreStr = inStr.substr(skipCt,inStr.length()-8-skipCt);
           return CGzip::Inflate(coreStr,outStr);
   
   
   
}

 

int  CGzip:clip_image003ogzip(const std::string & inStr , std::string &outStr){
    char pAddHead[10];
    unsigned long crc = 0;
    // gzip header
    static const char deflate_magic[2] = {'37', '\213'};
    snprintf(pAddHead, 10,
            "%c%c%c%c%c%c%c%c%c%c", deflate_magic[0],
            deflate_magic[1], Z_DEFLATED, 0 /* flags */,
            0, 0, 0, 0 /* 4 chars for mtime */,
            0 /* xflags */, 0xff);
    string addHead(pAddHead,10);
    //gzip's raw deflate body
    if(CGzip:clip_image003eflate(inStr,outStr)<0){
        return - 1;   
    }
    //gzip trailer
    crc = crc32(crc, (const Bytef*)inStr.data(), inStr.length());
    char  tailBuf[8];
    memcpy(tailBuf, &crc, 4);
    int isize=inStr.size();
    memcpy(tailBuf,&isize,4);
    string tailStr(tailBuf , 8 );
    outStr = addHead + outStr+tailStr;     //
    return outStr.length(); //



肥仔 2009-09-07 21:58 发表评论
]]>
HTTP协议相关概述http://www.shnenglu.com/woaidongmao/archive/2009/09/04/95298.html肥仔肥仔Fri, 04 Sep 2009 06:09:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/09/04/95298.htmlhttp://www.shnenglu.com/woaidongmao/comments/95298.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/09/04/95298.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/95298.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/95298.htmlHTTP协议被设计得非常强大Q但很多|络应用都没有利用这些强大之处。比如缓存和HTTPҎ?span lang=EN-US>HTTP源的增删Ҏ分别提供?span lang=EN-US> PUT,DELETE,POST,GET{方法,没有h用。所以,最q兴LRestful只是对优?span lang=EN-US>web架构、充分利?span lang=EN-US>HTTP协议的能力的一个回 归。下面是一?span lang=EN-US>HTTP协议的概qͼ

 

消息Q?span lang=EN-US>HTTP协议中顶U数据单位,使用HTTP协议通信的机器之间来回发送的数据?span lang=EN-US>

 

实体Q只出现在有消息体的消息中。它按照实体header定义的格式和~码q行传输?span lang=EN-US>

 

ҎQ?span lang=EN-US>

OPTIONS Q客L查询服务器对与某URL允许的通信选项

GET Q从服务器获?span lang=EN-US>URL对应的资?span lang=EN-US>

HEAD Q除了服务器响应中不能包含消息体Q该Ҏ?span lang=EN-US>GET一栗用于只需数元信息的情况

POST Q被设计用来注解、修?span lang=EN-US>URL所对应的资?span lang=EN-US>

PUT Q被设计用来修改或创源。当URL对应的资源存在时Q则提交的作为新版本Q否则新?span lang=EN-US>

DELETE Q被设计用来删除URL对应的资?span lang=EN-US>

TRACE Q主要用来测试。服务器最l接收到的请求本w发送回来,作ؓ客户端诊断依?span lang=EN-US>

CONNECT Q保留的Ҏ名,用于代理切换隧道

 

headerҎ参数Q?span lang=EN-US>

q Q在大多的各U?span lang=EN-US>headergQ都可以看到一个名?span lang=EN-US>q=0.2?span lang=EN-US>q=0.7之类的参数。因为发?span lang=EN-US>header主要是一个和服务器的协商q程Q所以能允许的选项一般不只一个,但具体哪个优先呢Q这需要ؓ一些选项制定权重倹{?span lang=EN-US>q参数的值是一个从0?span lang=EN-US>1的QҎQ默认是10表示客户端无法接Ӟ数点后 不能过3位。另外,header的多个g间用逗号分隔而不是分受比如这?span lang=EN-US>headerQ?span lang=EN-US>Accept:audio/*;q=0.2,audio /basicQ这表示客户端告诉服务器“我最喜欢的是一?span lang=EN-US>audio/basiccd的音?span lang=EN-US>(因ؓ它没有设|?span lang=EN-US>q参数Q默认是1Q,但如果没有,l我一个Q 意类?span lang=EN-US>(audio/*)的音频也?#8221;。当Ӟq只?span lang=EN-US>q参数一个比较简单的应用?span lang=EN-US>

 

常规header Q?span lang=EN-US>

Cache-Control Q用于指?span lang=EN-US>/响应链上所有缓存必L从的指oQ它必须hIK各代理和网关的能力?span lang=EN-US>HTTP1.0可能不支持该header?span lang=EN-US>PragmaQ?span lang=EN-US>no-cache?span lang=EN-US>

Connection Q允许客L指出希望特定q接的选项Q且止׃理在来的连接中通讯

Date Q表C消息发生的日期和时_?span lang=EN-US>RFC 822中的orig-date语义一?

Pragma Q用来包括实现特定的指oQ可能应用到h/响应链上所有接收方  

Trailer Q指出给出的头部域集合在?span lang=EN-US>chunked transfer-coding~码的消息的N中存?span lang=EN-US>

Transfer-Encoding Q指出应用什么类型的转换到消息主体上Q与content-coding不同Q这不是指定实体的属性而是消息?span lang=EN-US>

Upgrade Q允许客L指出其支持的其他通讯协议Q切愿意使用之,若服务器发现切换是可行的Q必d响应中回101

Via Q必ȝ|关或代理来指出h中的UA和服务器、以及在响应中的原始服务器和客户端的中间协议和接收方。用于跟t消息{发,避免h循环

Warning Q用h带关于消息的状态和转换的额外信息,可能不在消息中反映。一般用于警告应用到消息实体上的~存操作或{换缺语义透明?span lang=EN-US>

 

 

hheaderQ?span lang=EN-US>

Accept Q客L指出响应可以接受的媒体类?span lang=EN-US>             

Accept-Charset Q客L指出响应可以接受的字W集

Accept-Encoding Q客L指出响应可以接受的字W编?span lang=EN-US>

Accept-Language Q客L指出允许的语a     

Authorization Q客L在受?span lang=EN-US>401后,需要向服务器标明n份,包括?span lang=EN-US>header卛_      

Expect : 客户端指求的Ҏ服务器行为。若服务器无法满I可以q回417            

From :               

Host : 客户端指h的资源的因特|主机和端口?span lang=EN-US>              

If-Match : 用于与方法一起其条件化          

If-Modified-Since : 用于Ҏ使其条g化,如果h的变量在本域指定的时间从来不曾修改过Q则实体不会从服务器返回,改ؓ304

If-None-Match : 用于与方法一起其条件化     

If-Range : 用于与方法一起其条件化          

If-Unmodified-Since : 用于与方法一起其条件化Q如果请求的资源?span lang=EN-US>header值时间以来未改变Q则服务器执行该h

Max-Forwards : 提供某种机制Q?span lang=EN-US>TRACE?span lang=EN-US>OPTIONSҎ用来限制可以转发l下个入界服务器代理或网关的数量Q相当于客户端跟t请求链      

Proxy-Authorization : 允许客户端向代理标识自己Q该代理需要认?span lang=EN-US>

Range : 字节范围Q可以指定单个实体中单个字节范围或范围集             

Referer : 允许服务器ؓ感兴的资源、日志、优化缓存等生成向后链接清单           

TE : 指出愿意在响应中接受M扩展?span lang=EN-US>transfer-coding                

User-Agent : 包含发vh的用户代理(览器和OSQ的信息

 

 

响应headerQ?span lang=EN-US>

Accept-Ranges Q服务器指出对请求的资源可接受的范围Q可以是字节数或none      

Age Q?span lang=EN-US>HTTP使用?span lang=EN-US>header来传输从~存服务器获取时的响应消息的估计q龄Q是~存服务器估计从响应产生或被原始服务器重新证实以来的L?span lang=EN-US>          

ETag Q提供所h的实体标{当前?span lang=EN-US>              

Location Q用来重定向接收

 

方到?span lang=EN-US>URI的位|来完成h。对?span lang=EN-US>201Q?span lang=EN-US>Location是由h创徏的新资源的标?span lang=EN-US>          

Proxy-Authenticate Q该header必须作ؓ407响应的一部分Q指证方案和可应用到代理?span lang=EN-US>URI上的参数

Retry-After Q能?span lang=EN-US>503响应一L于指出希望该服务对客L可以l持多久Q?span lang=EN-US>       

Server Q指出服务器使用的Y件信?span lang=EN-US>            

Vary Q?span lang=EN-US>              

WWW-Authenticate Q必d括在401中,D有challengel成Q它指出认证Ҏ和可应用?span lang=EN-US>URI的参?span lang=EN-US>  

 

实体headerQ?span lang=EN-US>

Allow Q客L指出?span lang=EN-US>URI的资源允许的Ҏ              

Content-Encoding : 用作?span lang=EN-US>media-type的修饰符Q其值将必须应用到实?span lang=EN-US>body上的额外内容~码。主要用来允许压~而不丢失下层媒体cd标识  

Content-Language : 客户端指己所选的语言Q指出目标观众对所装实体的自然语a。这可能与实?span lang=EN-US>body内所有语a相同  

Content-Length Q指出实?span lang=EN-US>body按十q制数的字节的寸     

Content-Location Q如果实体能从独立于hURI的位|访问,则服务器可以提供该实体自q位置   

Content-MD5 Q是实体body?span lang=EN-US>MD5摘要Q以便提供端到端的完整性检?span lang=EN-US>        

Content-Range Q与实体body的一部分一起发送,用来指定该部?span lang=EN-US>body应用到全?span lang=EN-US>body的哪个地?span lang=EN-US>      

Content-Type Q指出发送给接收方的实体body的媒体类型,媒体cd参见IANA       

Expires Q指出响应被认ؓq期的日?span lang=EN-US>/            

Last-Modified Q指出原始服务器认ؓ该变量最后修改的日期和时_实意思取决于原是服务器的实现和资源的属性。对文gQ可能只是文件系l内最后修Ҏ?

extension-header Q?span lang=EN-US>

 

状态码Q?span lang=EN-US>

100 : Continue

101 : Switching Protocols

200 : OK

201 : Created

202 : Accepted

203 : Non-Authoritative Information

204 : No Content

205 : Reset Content

206 : Partial Content

300 : Multiple Choices

301 : Moved Permanently

302 : Found

303 : See Other

304 : Not Modified

305 : Use Proxy

307 : Temporary Redirect

400 : Bad Request

401 : Unauthorized

402 : Payment Required

403 : Forbidden

404 : Not Found

405 : Method Not Allowed

406 : Not Acceptable

407 : Proxy Authentication Required

408 : Request Time-out

409 : Conflict

410 : Gone

411 : Length Required

412 : Precondition Failed

413 : Request Entity Too Large

414 : Request-URI Too Large

415 : Unsupported Media Type

416 : Requested range not satisfiable

417 : Expectation Failed

500 : Internal Server Error

501 : Not Implemented

502 : Bad Gateway

503 : Service Unavailable

504 : Gateway Time-out

505 : HTTP Version not supported

extension-code

 

关键字:HTTP

 



肥仔 2009-09-04 14:09 发表评论
]]>
关于http的Last-Modifiedhttp://www.shnenglu.com/woaidongmao/archive/2009/09/04/95293.html肥仔肥仔Fri, 04 Sep 2009 03:47:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/09/04/95293.htmlhttp://www.shnenglu.com/woaidongmao/comments/95293.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/09/04/95293.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/95293.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/95293.html1) 什么是”Last-Modified”?

       
在浏览器W一ơ请求某一?span lang=EN-US>URL
Ӟ服务器端的返回状态会?span lang=EN-US>200Q内Ҏ你请求的资源Q同时有一?span lang=EN-US>Last-Modified的属性标记此文g在服务期端最后被修改的时_格式cMq样Q?span lang=EN-US> 

        Last-Modified: Fri, 12 May 2006 18:53:33 GMT

        客户端第二次h?span lang=EN-US>URLӞҎ HTTP 协议的规定,览器会向服务器传?span lang=EN-US> If-Modified-Since 报头Q询问该旉之后文g是否有被修改q: 

        If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT

       
如果服务器端的资源没有变化,则自动返?span lang=EN-US> HTTP 304 Q?span lang=EN-US>Not Changed.Q状态码Q内容ؓI,q样p省了传输数据量?/font>当服务器端代码发生改变或者重启服务器Ӟ则重新发源,q回和第一ơ请求时cM。从而保证不向客L重复发出资源Q也保证当服务器有变化时Q客L能够得到最新的资源?span lang=EN-US> 

        2) 什么是”Etag”?

        HTTP
协议规格说明定义ETag?span lang=EN-US>“被请求变量的实体?span lang=EN-US>” Q参?span lang=EN-US> —?章节 14.19Q?span lang=EN-US> 另一U说法是Q?span lang=EN-US>ETag是一个可以与Web资源兌的记PtokenQ?/font>典型?span lang=EN-US>Web资源可以一?span lang=EN-US>Web,但也可能?span lang=EN-US>JSON?span lang=EN-US>XML文档。服务器单独负责判断记号是什么及其含义,q在HTTP响应头中其传送到客户端,以下是服务器端返回的格式Q?span lang=EN-US> 

       ETag: "50b1c1d4f775c61:df3"

       
客户端的查询更新格式是这LQ?/font> 

        If-None-Match: W/"50b1c1d4f775c61:df3"

       
如果ETag没改变,则返回状?span lang=EN-US>304然后不返回,q也?span lang=EN-US>Last-Modified一栗本人测?span lang=EN-US>Etag主要在断点下载时比较有用?span lang=EN-US>
       
      Last-Modified?span lang=EN-US>Etags如何帮助提高性能?
       
聪明的开发者会?span lang=EN-US>Last-Modified ?span lang=EN-US>ETagsh?span lang=EN-US>http报头一起用,q样可利用客LQ例如浏览器Q的~存。因为服务器首先产生 Last-Modified/Etag标记Q服务器可在E后使用它来判断面是否已经被修攏V本质上Q客L通过该记号传回服务器要求服务器验证Ӟ客户端)~存?span lang=EN-US> 
        q程如下:
                1.
客户端请求一个页面(AQ?span lang=EN-US> 
                2. 服务器返回页?span lang=EN-US>AQƈ在给A加上一?span lang=EN-US>Last-Modified/ETag?span lang=EN-US> 
                3. 客户端展现该面Qƈ页面连?span lang=EN-US>Last-Modified/ETag一L存?span lang=EN-US> 
                4. 客户再次h面AQƈ上ơ请求时服务器返回的Last-Modified/ETag一起传递给服务器?span lang=EN-US> 
                5. 服务器检查该Last-Modified?span lang=EN-US>ETagQƈ判断面自上ơ客Lh之后q未被修改,直接q回响应304和一个空的响应体



肥仔 2009-09-04 11:47 发表评论
]]>
RFC1738 - l一资源定位?amp;quot;URL&quot;http://www.shnenglu.com/woaidongmao/archive/2008/12/28/70569.html肥仔肥仔Sun, 28 Dec 2008 09:17:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/12/28/70569.htmlhttp://www.shnenglu.com/woaidongmao/comments/70569.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/12/28/70569.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/70569.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/70569.html阅读全文

肥仔 2008-12-28 17:17 发表评论
]]>
URL中间'/'的区?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/06/19/54014.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Thu, 19 Jun 2008 06:39:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/06/19/54014.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/54014.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/06/19/54014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/54014.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/54014.html</trackback:ping><description><![CDATA[<form <font color=#ff0000>action="UploadFile"</font> method="post" enctype="multipart/form-data" onSubmit="return validate()"> <p>对应URL:D:\New HY Code\HY Web Server\Debug\hy web root\Henyep\UploadFile</p> <form <font color=#ff0000>action="/UploadFile"</font> method="post" enctype="multipart/form-data" onSubmit="return validate()"> <p>对应URL:D:\UploadFile</p> <img src ="http://www.shnenglu.com/woaidongmao/aggbug/54014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-06-19 14:39 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/06/19/54014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTPh模型和头信息参?很全http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51491.html肥仔肥仔Thu, 29 May 2008 08:48:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/29/51491.htmlhttp://www.shnenglu.com/woaidongmao/comments/51491.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/29/51491.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/51491.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/51491.html阅读全文

肥仔 2008-05-29 16:48 发表评论
]]>
HTTP常用消息?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51486.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Thu, 29 May 2008 08:18:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51486.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/51486.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/51486.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/51486.html</trackback:ping><description><![CDATA[<p> </p> <p>HTTP消息由客L到服务器的请求和服务器到客户端的响应l成。请求消息和响应消息都是由开始行Q对于请求消息,开始行是h行,对于响应消息Q开始行是状态行Q,消息报头Q可选)Q空行(只有CRLF的行Q,消息正文Q可选)l成? <p>HTTP消息报头包括普通报头、请求报头、响应报头、实体报头?br>每一个报头域都是由名?“Q?#8221;+I格+?l成Q消息报头域的名字是大小写无关的? <p>1、普通报?br>在普通报头中Q有数报头域用于所有的h和响应消息,但ƈ不用于被传输的实体,只用于传输的消息?br>egQ?br>Cache-Control 用于指定~存指oQ缓存指令是单向的(响应中出现的~存指o在请求中未必会出玎ͼQ且是独立的Q一个消息的~存指o不会影响另一个消息处理的~存机制Q,HTTP1.0使用的类似的报头域ؓPragma?br>h时的~存指o包括Qno-cacheQ用于指C求或响应消息不能~存Q、no-store、max-age、max-stale、min-fresh、only-if-cached;<br>响应时的~存指o包括Qpublic、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.<br>egQؓ了指CIE览器(客户端)不要~存面Q服务器端的JSPE序可以~写如下Qresponse.sehHeader("Cache-Control","no-cache");<br>//response.setHeader("Pragma","no-cache");作用相当于上qC码,通常两?/合用<br>q句代码在发送的响应消息中设|普通报头域QCache-Control:no-cache <p>Date普通报头域表示消息产生的日期和旉 <p>Connection普通报头域允许发送指定连接的选项。例如指定连接是q箋Q或者指?#8220;close”选项Q通知服务器,在响应完成后Q关闭连? <p>2、请求报?br>h报头允许客户端向服务器端传递请求的附加信息以及客户端自w的信息?br>常用的请求报?br>Accept<br>Accepth报头域用于指定客L接受哪些cd的信息。egQAcceptQimage/gifQ表明客L希望接受GIF图象格式的资源;AcceptQtext/htmlQ表明客L希望接受html文本?br>Accept-Charset<br>Accept-Charseth报头域用于指定客L接受的字W集。egQAccept-Charset:iso-8859-1,gb2312.如果在请求消息中没有讄q个域,~省是Q何字W集都可以接受?br>Accept-Encoding<br>Accept-Encodingh报头域类gAcceptQ但是它是用于指定可接受的内容编码。egQAccept-Encoding:gzip.deflate.如果h消息中没有设|这个域服务器假定客L对各U内容编码都可以接受?br>Accept-Language<br>Accept-Languageh报头域类gAcceptQ但是它是用于指定一U自然语a。egQAccept-Language:zh-cn.如果h消息中没有设|这个报头域Q服务器假定客户端对各种语言都可以接受?br>Authorization<br>Authorizationh报头域主要用于证明客L有权查看某个资源。当览器访问一个页面时Q如果收到服务器的响应代码ؓ401Q未授权Q,可以发送一个包含Authorizationh报头域的hQ要求服务器对其q行验证?br>HostQ发送请求时Q该报头域是必需的)<br>Hosth报头域主要用于指定被h资源的InternetL和端口号Q它通常从HTTP URL中提取出来的QegQ?br>我们在浏览器中输入:<a >http://www.guet.edu.cn/index.html</a><br>览器发送的h消息中,׃包含Hosth报头域,如下Q?br>HostQwww.guet.edu.cn<br>此处使用~省端口?0Q若指定了端口号Q则变成QHostQwww.guet.edu.cn:指定端口?br>User-Agent<br>我们上网登陆论坛的时候,往往会看C些欢q信息,其中列出了你的操作系l的名称和版本,你所使用的浏览器的名U和版本Q这往往让很多h感到很神奇,实际上,服务器应用程序就是从User-Agentq个h报头域中获取到这些信息。User-Agenth报头域允许客L它的操作系l、浏览器和其它属性告诉服务器。不q,q个报头域不是必需的,如果我们自己~写一个浏览器Q不使用User-Agenth报头域,那么服务器端无法得知我们的信息了?br>h报头举例Q?br>GET /form.html HTTP/1.1 (CRLF)<br>Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)<br>Accept-Language:zh-cn (CRLF)<br>Accept-Encoding:gzip,deflate (CRLF)<br>If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)<br>If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)<br>User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)<br>Host:www.guet.edu.cn (CRLF)<br>Connection:Keep-Alive (CRLF)<br>(CRLF) <p>3、响应报?br>响应报头允许服务器传递不能放在状态行中的附加响应信息Q以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息?br>常用的响应报?br>Location<br>Location响应报头域用于重定向接受者到一个新的位|。Location响应报头域常用在更换域名的时候?br>Server<br>Server响应报头域包含了服务器用来处理请求的软g信息。与User-Agenth报头域是相对应的。下面是<br>Server响应报头域的一个例子:<br>ServerQApache-Coyote/1.1<br>WWW-Authenticate<br>WWW-Authenticate响应报头域必被包含?01Q未授权的)响应消息中,客户端收?01响应消息时候,q发送Authorization报头域请求服务器对其q行验证Ӟ服务端响应报头就包含该报头域?br>egQWWW-Authenticate:Basic realm="Basic Auth Test!" //可以看出服务器对h资源采用的是基本验证机制?br>Content-Disposition是当用h把请求所得的内容存ؓ一个文件的时候提供一个默认的文g名。具体的定义如下 Content-Disposition: attachment; filename=“filename.xls” <br>当然filename参数可以包含路径信息Q但User-Agnet会忽略掉q些信息Q只会把路径信息的最后一部分做ؓ文g名。当你在响应cd为application/octet- stream情况下用了q个头信息的话,那就意味着你不想直接显C内容,而是弹出一?#8221;文g下蝲”的对话框Q接下来是׃来决?#8220;打开”q是“保存”了? <p>4、实体报?br>h和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文l成Q但q不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文QegQ有无实体正文)和请求所标识的资源的元信息?br>常用的实体报?br>Content-Encoding<br>Content -Encoding实体报头域被用作媒体cd的修饰符Q它的值指CZ已经被应用到实体正文的附加内容的~码Q因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encodingq样用于记录文档的压~方法,egQContent-EncodingQ?gzip<br>Content-Language<br>Content-Language实体报头域描qC资源所用的自然语言。没有设|该域则认ؓ实体内容提供给所有的语言阅读<br>者。egQContent-Language:da<br>Content-Length<br>Content-Length实体报头域用于指明实体正文的长度Q以字节方式存储的十q制数字来表C?br>Content-Type<br>Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。egQ?br>Content-Type:text/html;charset=ISO-8859-1<br>Content-Type:text/html;charset=GB2312<br>Last-Modified<br>Last-Modified实体报头域用于指C源的最后修Ҏ期和旉?br>Expires<br>Expires 实体报头域给出响应过期的日期和时间。ؓ了让代理服务器或览器在一D|间以后更新缓存中(再次讉K曾访问过的页面时Q直接从~存中加载,~短响应旉和降低服务器负蝲)的页面,我们可以使用Expires实体报头域指定页面过期的旉。egQExpiresQThuQ?5 Sep 2006 16:23:12 GMT<br>HTTP1.1的客L和缓存必d其他非法的日期格式(包括0Q看作已l过期。egQؓ了让览器不要缓存页面,我们也可以利用Expires实体报头域,讄?Qjsp中程序如下:response.setDateHeader("Expires","0");</p> <img src ="http://www.shnenglu.com/woaidongmao/aggbug/51486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-29 16:18 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP状态消息列?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51485.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Thu, 29 May 2008 08:16:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51485.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/51485.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/51485.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/51485.html</trackback:ping><description><![CDATA[     摘要: 1xx: 信息 消息: 描述: ...  <a href='http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51485.html'>阅读全文</a><img src ="http://www.shnenglu.com/woaidongmao/aggbug/51485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-29 16:16 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解HTTP消息?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51483.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Thu, 29 May 2008 08:13:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51483.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/51483.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/51483.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/51483.html</trackback:ping><description><![CDATA[<p>一Q初识HTTP消息? <p>但凡搞WEB开发的人都M开HTTPQ超文本传输协议Q,而要了解HTTPQ除了HTML本n以外Q还有一部分不可忽视的就是HTTP消息头?br>做过Socket~程的h都知道,当我们设计一个通信协议Ӟ“消息?消息?#8221;的分割方式是很常用的Q消息头告诉Ҏq个消息是干什么的Q消息体告诉Ҏ怎么qӀHTTP传输的消息也是这栯定的Q每一个HTTP包都分ؓHTTP头和HTTP体两部分Q后者是可选的Q而前者是必须的。每当我们打开一个网,在上面点d键,选择“查看源文?#8221;Q这时看到的HTML代码是HTTP的消息体Q那么消息头又在哪呢QIE览器不让我们看到这部分Q但我们可以 通过截取数据包等Ҏ看到它?br>下面来看一个简单的例子Q?br>首先制作一个非常简单的|页Q它的内容只有一行:<br><html><body>hello world</body></html><br>把它攑ֈWEB服务器上Q比如IISQ然后用IE览器请求这个页面(<a href="http://localhost:8080/simple.htm">http://localhost:8080/simple.htm</a>Q,当我们请求这个页面时Q浏览器实际做了以下四项工作Q?br>1 解析我们输入的地址Q从中分解出协议名、主机名、端口、对象\径等部分Q对于我们的q个地址Q解析得到的l果如下Q?br>协议名:http<br>L名:localhost<br>端口Q?080<br>对象路径Q?simple.htm<br>2 把以上部分结合本q信息Q封装成一个HTTPh数据?br>3 使用TCP协议q接C机的指定端口Qlocalhost, 8080Q,q发送已装好的数据?br>4 {待服务器返回数据,q解析返回数据,最后显C出?br>由截取到的数据包我们不难发现览器生成的HTTP数据包的内容如下Q?br>GET /simple.htm HTTP/1.1<CR><br>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<CR><br>Accept-Language: zh-cn<CR><br>Accept-Encoding: gzip, deflate<CR><br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<CR><br>Host: localhost:8080<CR><br>Connection: <a name=baidusnap4></a><strong>Keep</strong>-<a name=baidusnap5></a><strong>Alive</strong><CR><br><CR><br>Z昄清楚我把所有的回R的地斚w加上?#8220;<CR>”Q注意最后还有一个空行加一个回车,q个I正是HTTP规定的消息头和消息体的分界线Q第一个空行以下的内容是消息体,q个h数据包是没有消息体的?br>消息的第一?#8220;GET”表示我们所使用的HTTP动作Q其他可能的q有“POST”{,GET的消息没有消息体Q而POST消息是有消息体的Q消息体的内容就是要POST的数据。后?simple.htm是我们要请求的对象Q之?a name=baidusnap0></a><strong>HTTP1.1</strong>表示使用的是<strong>HTTP1.1</strong>协议?br>W二行表C我们所用的览器能接受的Content-typeQ三四两行则是语a和编码信息,W五行显C出本机的相关系信息Q包括浏览器cd、操作系l信息等Q很多网站可以显C出你所使用的浏览器和操作系l版本,是因ؓ可以从这里获取到q些信息?br>W六行表C我们所h的主机和端口Q第七行表示使用<strong>Keep</strong>-<strong>Alive</strong>方式Q即数据传递完q不立即关闭q接?br>服务器接收到q样的数据包以后会根据其内容做相应的处理Q例如查找有没有“/simple.htm”q个对象Q如果有Q根据服务器的设|来军_如何处理Q如果是HTMQ则不需要什么复杂的处理Q直接返回其内容卛_。但在直接返回之前,q需要加上HTTP消息头?br>服务器发回的完整HTTP消息如下Q?br>HTTP/1.1 200 OK<CR><br>Server: Microsoft-IIS/5.1<CR><br>X-Powered-By: ASP.NET<CR><br>Date: Fri, 03 Mar 2006 06:34:03 GMT<CR><br>Content-Type: text/html<CR><br>Accept-Ranges: bytes<CR><br>Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT<CR><br>ETag: "5ca4f75b8c3ec61:9ee"<CR><br>Content-Length: 37<CR><br><CR><br><html><body>hello world</body></html><br>同样Q我?#8220;<CR>”来表C回车。可以看刎ͼq个消息也是用空行切分成消息头和消息体两部分Q消息体的部分正是我们前面写好的HTML代码?br>消息头第一?#8220;HTTP/1.1”也是表示所使用的协议,后面?#8220;200 OK”是HTTPq回代码Q?00pC操作成功,q有其他常见的如404表示对象未找刎ͼ500表示服务器错误,403表示不能览目录{等?br>W二行表C个服务器使用的WEB服务器YӞq里是IIS 5.1。第三行是ASP.Net的一个附加提C,没什么实际用处。第四行是处理此h的时间。第五行是所q回的消息的content-typeQ浏览器 会根据它来决定如何处理消息体里面的内容,例如q里是text/htmlQ那么浏览器׃启用HTML解析器来处理它,如果是image/jpegQ那?׃使用JPEG的解码器来处理?br>消息头最后一?#8220;Content-Length”表示消息体的长度Q从I以后的内容算P以字节ؓ单位Q浏览器接收到它所指定的字节数的内容以后就会认个消息已l被完整接收了? <p><strong>理解HTTP消息?Q二Q?/strong> <p><strong>常见的HTTPq回?/strong> <p>上一文章里我简要的说了说HTTP消息头的格式Q注意到在服务器q回的HTTP消息头里有一?#8220;HTTP/1.1 200 OK”Q这里的200是HTTP规定的返回代码,表示h已经被正常处理完成。浏览器通过q个q回代码可以知道服务器Ҏ发请求的处理情况是什么,每一U返回代码都有自q含义。这里列丑ևU常见的q回码? <p><strong>1 403 Access Forbidden</strong> <p>如果我们试图h服务器上一个文件夹Q而在WEB服务器上q个文g夹ƈ没有允许对这个文件夹列目录的话,׃q回q个代码。一个完整的403回复可能是这LQ(IIS5.1Q?br>HTTP/1.1 403 Access Forbidden<br>Server: Microsoft-IIS/5.1<br>Date: Mon, 06 Mar 2006 08:57:39 GMT<br>Connection: close<br>Content-Type: text/html<br>Content-Length: 172 <p><html><head><title>Directory Listing Denied</title></head><br><body><h1>Directory Listing Denied</h1>This Virtual Directory does not allow contents to be listed.</body></html> <p><strong>2 404 Object not found</strong> <p>当我们请求的对象在服务器上ƈ不存在时Q就会给个返回代码,q可能也是最常见的错误代码了。IISl出?04消息内容很长Q除了消息头以外q有一个完整的说明“Z么会q样”的网cAPACHE服务器的404消息比较短,如下Q?br>HTTP/1.1 404 Not Found<br>Date: Mon, 06 Mar 2006 09:03:14 GMT<br>Server: Apache/2.0.55 (Unix) PHP/5.0.5<br>Content-Length: 291<br><strong>Keep</strong>-<strong>Alive</strong>: timeout=15, max=100<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>Content-Type: text/html; charset=iso-8859-1 <p><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><br><html><head><br><title>404 Not Found</title><br></head><body><br><h1>Not Found</h1><br><p>The requested URL /notexist was not found on this server.</p><br><hr><br><address>Apache/2.0.55 (Unix) PHP/5.0.5 Server at localhost Port 8080</address><br></body></html> <p>也许你会问,无论?04q是200Q都会在消息体内l出一个说明网,那么对于客户端来说二者有什么区别呢Q一个比较明昄区别在于200?成功hQ浏览器会记录下q个地址Q以便下ơ再讉K时可以自动提C地址Q?04是失败请求,览器只会显C出q回的页面内容,q不会记录此地址Q要再次讉K时还需要输入完整的地址? <p><strong>3 401 Access Denied</strong> <p>当WEB服务器不允许匿名讉KQ而我们又没有提供正确的用户名/密码Ӟ服务器就会给个返回代码。在IIS中,讄IIS的安全属性ؓ不允许匿名访问(如下图)Q此时直接访问的话就会得C下返回结果: <p><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/HTTP_E40D/clip_image001_3.gif"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=36 alt=clip_image001 src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/HTTP_E40D/clip_image001_thumb.gif" width=36 border=0></a><br>HTTP/1.1 401 Access Denied<br>Server: Microsoft-IIS/5.1<br>Date: Mon, 06 Mar 2006 09:15:55 GMT<br>WWW-Authenticate: Negotiate<br>WWW-Authenticate: NTLM<br>Connection: close<br>Content-Length: 3964<br>Content-Type: text/html <p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><br><html dir=ltr><br>……<br>此时览器上l出的提C如下图Q让我们输入用户名和密码Q? <p><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/HTTP_E40D/clip_image001%5B1%5D.gif"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=36 alt=clip_image001[1] src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/HTTP_E40D/clip_image001%5B1%5D_thumb.gif" width=36 border=0></a> <p>因返回信息中消息体较长,只取前面两行内容。注意,如果是用localhost来访问本机的IISQ因IE可以直接取得当前用户的n份,它会和服务器间直接进行协商,所以不会看?01提示?br>当我们在输入了用户名和密码以后,服务器与客户端会再进行两ơ对话。首先客L向服务器索取一个公钥,服务器端会返回一个公钥,二者都用BASE64~码Q相应的消息如下Q编码部分已l做了处理)Q? <p>GET / HTTP/1.1<br>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<br>Accept-Language: zh-cn<br>Accept-Encoding: gzip, deflate<br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br>Host: 192.168.0.55:8080<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>Authorization: Negotiate ABCDEFG…… <p>HTTP/1.1 401 Access Denied<br>Server: Microsoft-IIS/5.1<br>Date: Mon, 06 Mar 2006 09:20:53 GMT<br>WWW-Authenticate: Negotiate HIJKLMN……<br>Content-Length: 3715<br>Content-Type: text/html <p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><br><html dir=ltr><br>……<br>客户端拿到公钥之后用公钥对用户名和密码q行加密码,然后把加密以后的l果重新发给服务器:<br>GET / HTTP/1.1<br>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<br>Accept-Language: zh-cn<br>Accept-Encoding: gzip, deflate<br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br>Host: 192.168.0.55:8080<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>Authorization: Negotiate OPQRST…… <p>q样Q如果验证通过Q服务器端就会把h的内容发送过来了Q也是说禁止匿名访问的|站会经q三ơ请求才可以看到面。但因ؓ客户端浏览器已经~存了公钥,用同一个浏览器H口再次hq个|站上的其它面时就可以直接发送验证信息,从而一ơ交互就可以完成了? <p><strong>4 302 Object Moved</strong> <p>用过ASP的h都知道ASP中页面重定向臛_有Redirect和Transfer两种Ҏ。二的区别在于Redirect是客L重定向,而Transfer是服务器端重定向Q那么它们具体是如何通过HTTP消息头实现的呢?<br>先来看一下Transfer的例子:<br>例如ASP文g1.asp只有一?br><% Server.Transfer "1.htm" %><br>HTML文g1.htm也只有一行:<br><p>this is 1.htm</p><br>如果我们从浏览器里请?.aspQ发送的h是:<br>GET /1.asp HTTP/1.1<br>Accept: */*<br>Accept-Language: zh-cn<br>Accept-Encoding: gzip, deflate<br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br>Host: localhost:8080<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>Cookie: ASPSESSIONIDACCTRTTT=PKKDJOPBAKMAMBNANIPIFDAP <p>注意h的文件确实是1.aspQ而得到的回应则是Q?br>HTTP/1.1 200 OK<br>Server: Microsoft-IIS/5.1<br>Date: Mon, 06 Mar 2006 12:52:44 GMT<br>X-Powered-By: ASP.NET<br>Content-Length: 20<br>Content-Type: text/html<br>Cache-control: private <p><p>this is 1.htm</p><br>不难看出Q通过Server.Transfer语句服务器端已经做了面重定向,而客LҎ一无所知,表面上看上去得到的就?.asp的结果?br>如果?.asp的内Ҏ为:<br><% Response.Redirect "1.htm" %><br>再次h1.aspQ发送的h没有变化Q得到的回应却变成了Q?br>HTTP/1.1 302 Object moved<br>Server: Microsoft-IIS/5.1<br>Date: Mon, 06 Mar 2006 12:55:57 GMT<br>X-Powered-By: ASP.NET<br>Location: 1.htm<br>Content-Length: 121<br>Content-Type: text/html<br>Cache-control: private <p><head><title>Object moved</title></head><br><body><h1>Object Moved</h1>This object may be found <a HREF="">here</a>.</body> <p>注意HTTP的返回代码由200变成?02Q表C是一个重定向消息Q客L需要根据消息头中Location字段的值重新发送请求,于是有了下面一l对话:<br>GET /1.htm HTTP/1.1<br>Accept: */*<br>Accept-Language: zh-cn<br>Accept-Encoding: gzip, deflate<br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br>Host: localhost:8080<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>If-Modified-Since: Thu, 02 Mar 2006 06:50:13 GMT<br>If-None-Match: "b224758ec53dc61:9f0"<br>Cookie: ASPSESSIONIDACCTRTTT=PKKDJOPBAKMAMBNANIPIFDAP <p>HTTP/1.1 200 OK<br>Server: Microsoft-IIS/5.1<br>X-Powered-By: ASP.NET<br>Date: Mon, 06 Mar 2006 12:55:57 GMT<br>Content-Type: text/html<br>Accept-Ranges: bytes<br>Last-Modified: Mon, 06 Mar 2006 12:52:32 GMT<br>ETag: "76d85bd51c41c61:9f0"<br>Content-Length: 20 <p><p>this is 1.htm</p><br>很明显,两种重定向方式虽然看上去l果很像Q但在实现原理上有很大的不同? <p><strong>5 500 Internal Server Error</strong> <p>500号错误发生在服务器程序有错误的时候,例如QASPE序?br><% if %><br>昄q个E序q不完整Q于是得到的l果为:<br>HTTP/1.1 500 Internal Server Error<br>Server: Microsoft-IIS/5.1<br>Date: Mon, 06 Mar 2006 12:58:55 GMT<br>X-Powered-By: ASP.NET<br>Content-Length: 4301<br>Content-Type: text/html<br>Expires: Mon, 06 Mar 2006 12:58:55 GMT<br>Set-Cookie: ASPSESSIONIDACCTRTTT=ALKDJOPBPPKNPCNOEPCNOOPD; path=/<br>Cache-control: private <p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <p><html dir=ltr><br>…… <p>服务器发送了500号错误,q且后面通过HTML的方式说明了错误的原因? <p><strong>理解HTTP消息?Q三Q?/strong> <p>Q三Q?客户端发送的内容<br>q一ơ主要来观察HTTP消息头中客户端的hQ从中找C些有意思的内容? <p><strong>1 HTTP_REFERER<br></strong>写两个简单的|页Q?br>a.htmQ?br><a href=b.htm>to page b</a><br>b.htmQ?br>haha<br>内容很简单,是|页A中有一个到B的链接。把它们攑ֈIIS上,q访问网AQ从中再点击到B的链接,于是看到了B늚“haha”。那么这两次h有什么不同吗Q观察它们所发送的HTTP消息_最明显的区别就是访问B|比访问A|多了一行:<br>Referer: <a href="http://localhost/a.htm">http://localhost/a.htm</a><br>q一行就表示Q用戯讉K的B|从A链接过来的?br>服务器端要想取得q个g是很Ҏ的,以ASPZQ只需要写一?br><% =Request.ServerVariables("HTTP_REFERER") %><br>可以了?br>一些网站通过HTTP_REFERER来做安全验证Q判断用h不是从允许的面链接来的Q而不是直接从览器上打URL或从其他面链接q来Q这样可?从一定程度上防止|页被做非法使用。但从上q原理来看,惌骗过服务器也q不困难Q只要手工构造输入的HTTP消息头就可以了,其他常用的手D还有通过 HOSTS文g伪造域名等?br>除了链接以外,q有其他几种方式会导致HTTP_REFERER信息被发送,如:<br>内联框架Q?lt;iframe src=b.asp></iframe><br>框架集:<frameset><frame src=b.asp></frameset><br>表单提交Q?lt;form action=b.asp><input type=submit></form><br>SCRIPT引用Q?lt;script src=b.asp></script><br>CSS引用Q?lt;link rel=stylesheet type=text/css href=b.asp><br>XML数据岛:<xml src=b.asp></xml> <p>而以下Ş式不会发送HTTP_REFERERQ?br>script转向Q?lt;script>location.href="b.asp"</script><br>script开新窗口:<script>window.open("b.asp");</script><br>META转向Q?lt;meta http-equiv="refresh" content="0;URL=b.asp"><br>引入囄Q?lt;img src=b.asp> <p><strong>2 COOKIE</strong><br>COOKIE是大安非常熟悉的了Q通过它可以在客户端保存用L态,即用户关闭览器也能l保存。那么客L与服务器端是如何交换COOKIE信息的呢Q没错,也是通过HTTP消息头?br>首先写一个简单的ASP|页Q?br><%<br>Dim i<br>i = Request.Cookies("key")<br>Response.Write i<br>Response.Cookies("key") = "haha"<br>Response.Cookies("key").Expires = #2007-1-1#<br>%><br>W一ơ访问此|页Ӟ屏幕上一片白Q第二次讉KӞ则会昄?#8220;haha”。通过阅读E序不难发现Q屏q上昄的内容实际上是COOKIE 的内容,而第一ơ访问时q没有设|COOKIE的|所以不会有昄Q第二次昄的是W一ơ设|的倹{那么对应的HTTP消息头应该是什么样的呢Q?br>W一ơ请求时没什么不同,略过<br>W一ơ返回时消息内容多了下面q一行:<br>Set-Cookie: key=haha; expires=Sun, 31-Dec-2006 16:00:00 GMT; path=/<br>很明显,key=haha表示键名?#8220;key”的COOKIE的gؓ“haha”Q后面是q则COOKIE的过期时_因ؓ我用的中文操作系l的时区是东八区Q?007q???点对应的GMT旉是2006q?2?1?6炏V?br>W二ơ再讉K此网|Q发送的内容多了如下一行:<br>Cookie: key=haha<br>它的内容是刚才讄COOKIE的内宏V可见,客户端在从服务器端得到COOKIEg后就保存在硬盘上Q再ơ访问时׃把它发送到服务器。发送时q没有发送过期时_因ؓ服务器对q期旉q不兛_Q当COOKIEq期后浏览器׃会再发送它了?br>如果使用IE6.0览器ƈ且禁用COOKIE功能Q可以发现服务器端的set-cookieq是有的Q但客户端ƈ不会接受它,也不会发送它。有些网站, 特别是在U投网站通过记录COOKIE防止用户重复投票Q破解很单,只要用IE6览器ƈ用COOKIE可以了。也有的|站通过COOKIEgؓ 某值来判断用户是否合法Q这U判断也非常Ҏ通过手工构造HTTP消息头来ƺ骗Q当然用HOSTS的方式也是可以欺骗的? <p><strong>3 SESSION<br></strong>HTTP协议本n是无状态的Q服务器和客L都不保证用户讉K期间q接会一直保持,事实上保持连接是<strong>HTTP1.1</strong>才有的新内容Q当客户端发送的消息头中?#8220;Connection: <strong>Keep</strong>-<strong>Alive</strong>” 时表C客L览器支持保持连接的工作方式Q但q个q接也会在一D|间没有请求后自动断开Q以节省服务器资源。ؓ了在服务器端l持用户状态,SESSIONp发明出来了,现在各主的动态网制做工具都支持SESSIONQ但支持的方式不完全相同Q以下皆以ASPZ?br>当用戯求一个ASP|页Ӟ在返回的HTTP消息头中会有一行:<br>Set-Cookie: ASPSESSIONIDCSQCRTBS=KOIPGIMBCOCBFMOBENDCAKDP; path=/<br>服务器通过COOKIE的方式告诉客L你的SESSIONID是多,在这里是“KOIPGIMBCOCBFMOBENDCAKDP”Qƈ且服务器上保 留了和此SESSIONID相关的数据,当同一用户再次发送请求时Q还会把q个COOKIE再发送回去,服务器端Ҏ此ID扑ֈ此用L数据Q也实C 服务器端用户状态的保存。所以我们用ASP~程时可以?#8220;session("name")=user”q样的方式保存用户信息。注意此COOKIE内容 里ƈ没有q期旉Q这表示q是一个当关闭览器时立即q期的COOKIEQ它不会被保存到盘上。这U工作方式比单纯用COOKIE的方式要安全很多Q因 为在客户端ƈ没有什么能让我们修改和ƺ骗的|唯一的信息就是SESSIONIDQ而这个ID在浏览器关闭时会立即失效Q除非别在你览|站期间或关闭浏览器后很短时间内知道此ID的|才能做一些欺骗活动。因为服务器端判断SESSIONq期的方式ƈ不是断开q接或关闭浏览器Q而是通过用户手工l束 SESSION或等待超Ӟ当用户关闭浏览器后的一D|间里SESSIONq没有超Ӟ所以这时如果知道了刚才的SESSIONIDQ还是可以欺骗的。因 此最安全的办法还是在d|站之前手工l束SESSIONQ很多网站都提供“Logout”功能Q它会通过讄SESSION中的gؓ已退出状态或?SESSION立即q期从而v到安全的目的?br>SESSION和COOKIE的方式各有优~点。SESSION的优Ҏ比较安全Q不Ҏ被欺骗,~点是过期时间短Q如果用q在过q期旉里没有向服务器发送Q何信息,׃被认q过期了QCOOKIE则相反,Ҏ服务器端讄的超时时_可以长时间保留信息,即x再开Z可能保留状态,而安全性自然大打折扣。很多网站都提供两种验证方式相结合,如果用户临时用这台电脑访问此讉K则需要输入用户名和密码,不保存COOKIEQ如果用户用的是自q个h电脑Q则可以让网站在自己盘上保留COOKIEQ以后访问时׃需要重新输入用户名和密码了? <p><strong>4 POST<br></strong>览器访问服务器常用的方式有GET和POST两种QGET方式只发送HTTP消息_没有消息体,也就是除了要GET的基本信息之?不向服务器提供其他信息,|页表单QFROMQ的默认提交方式是用GET方式Q它会把所有向服务器提交的信息都作为URL后面的参敎ͼ?a.asp?a=1&b=2q样的方式。而当要提交的数据量很大,或者所提交内容不希望别人直接看到时Q应该用POST方式。POST方式提交 的数据是作ؓHTTP消息体存在的Q例如,写一个网表单:<br><form method=post><br><input type=text name=text1><br><input type=submit><br></form><br>讉K此网,q在表单中填入一?#8220;haha”Q然后提交,可以看到此次提交所发送的信息如下Q?br>POST /form.asp HTTP/1.1<br>Accept: */*<br>Referer: <a href="http://localhost:8080/form.asp">http://localhost:8080/form.asp</a><br>Accept-Language: zh-cn<br>Content-Type: application/x-www-form-urlencoded<br>Accept-Encoding: gzip, deflate<br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br>Host: localhost:8080<br>Content-Length: 10<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>Cache-Control: no-cache<br>Cookie: key=haha; ASPSESSIONIDCSQCRTBS=LOIPGIMBLMNOGCOBOMPJBOKP <p>text1=haha<br>前面关键字从“GET”变ؓ?#8220;POST”QContent-Type变成?#8220;application/x-www-form- urlencoded”Q后面内容ƈ无大变化Q只是多了一行:Content-Length: 10Q表C提交的内容的长度。空行后面是消息体,内容是表单中所填的内容。注意此时发送的内容只是“Name=Value”的Ş式,表单上其他的信息?会被发送,所以想直接从服务器端取得list box中所有的list item是办不到的,除非在提交前用一Dscript把所有的item内容都连在一hC个隐含表单域中?br>如果是用表单上传文gQ情况就要复杂一些了Q首先是表单声明中要加上一句话Qenctype='multipart/form-data'Q表C个表单将提交多段数据Qƈ用HTMLQinput type=file来声明一个文件提交域?br>表单内容如下Q?br><form method=post enctype='multipart/form-data'><br><input type=text name=text1><br><input type=file name=file1><br><input type=submit><br></form><br>我们为text1输入文字QheheQؓfile1选择文ghaha.txtQ其内容?#8220;ABCDEFG”Q然后提交此表单。提交的完全信息为:<br>POST /form.asp HTTP/1.1<br>Accept: */*<br>Referer: <a href="http://localhost:8080/form.asp">http://localhost:8080/form.asp</a><br>Accept-Language: zh-cn<br>Content-Type: multipart/form-data; boundary=---------------------------7d62bf2f9066c<br>Accept-Encoding: gzip, deflate<br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br>Host: localhost:8080<br>Content-Length: 337<br>Connection: <strong>Keep</strong>-<strong>Alive</strong><br>Cache-Control: no-cache<br>Cookie: key=haha; ASPSESSIONIDCSQCRTBS=LOIPGIMBLMNOGCOBOMPJBOKP <p>-----------------------------7d62bf2f9066c<br>Content-Disposition: form-data; name="text1" <p>hehe<br>-----------------------------7d62bf2f9066c<br>Content-Disposition: form-data; name="file1"; filename="H:\Documents and Settings\Administrator\桌面\haha.txt"<br>Content-Type: text/plain <p>ABCDEFG<br>-----------------------------7d62bf2f9066c-- <p>昄q个提交的信息要比前q的复杂很多。Content-Type变成?#8220;multipart/form-data”Q后面还多了一?boundaryQ此值是Z区分POST的内容的区段用的Q只要在内容中遇C此|pCZ面要开始一个新的区D了Q每个区D늚内容相对独立。如果遇 到的是此值后面连着两个减号Q则表示全部内容到此l束。每个段也分为段头和D体两部分,用空行隔开Q每D都有自qcd和相关信息。如W一区段?text1的|它的名称?#8220;text1”Qgؓ“hehe”。第二段是文件内容,D首里表明了此文件域的名U?#8220;file1”和此文g在用L盘上的位|,后面是文g的内宏V?br>如果我们惌自己写一个上传文件组件来接收HTML表单传送的文g数据Q那么最核心的Q务就是解析此数据包,从中取得需要的信息? <p><strong>理解HTTP消息?Q四Q?br>服务器返回的消息</strong> <p>服务器返回的HTTP消息也分为消息头和消息体两部分。前面连载的W二里已经介绍了返回消息中常见q回代码的含义。对于非正常的返回代码的处理比较单,只要照着要求d好了,而对于正常的q回代码Q?00Q,其处理方式就多种多样了? <p><strong>1 Content-Type</strong> <p>Content-Type是返回消息中非常重要的内容,它标识出q个q回内容的类型,其gؓ“ȝ?子类?#8221;的格式,例如最常见的就?text/htmlQ它的意思是说返回的内容是文本类型,q个文本又是HTML格式的。原则上览器会ҎContent-Type来决定如何显C回的 消息体内宏V常见的内容cd有:<br>text/html HTML文本<br>image/jpeg JPG囄<br>image/gif GIF囄<br>application/xml XML文档<br>audio/x-mpegurl MP3文g列表Q如果安装了WinampQ则可以直接把它当面M3U文g来打开<br>更多的内容类型可以在注册?#8220;HKCR\MIME\Database\Content Type”下看?br>对于IE6览器来_如果Content-Type中的cd和实际的消息体类型不一_那么它会Ҏ内容中的cd来分析实际应该是什么类型,对于JPG、GIF{常用图片格式都可以正确的识别出来,而不Content-Type中写的是什么?br>如果Content-Type中指定的是浏览器可以直接打开的类型,那么览器就会直接打开其内ҎC出来,如果是被兌到其它应用程序的cdQ这时就要查找注册表中关于这U类型的注册情况Q如果是允许直接打开而不需要询问的Q就会直接调个关联的应用E序来打开q个文gQ但如果是不允许直接打开的,?会询问是否打开。对于没有关联到M应用E序的类型,IE览器不知道它该如何打开Q此时IE6׃把它当成XML来尝试打开? <p><strong>2 Content-Disposition</strong> <p>如果用AddHeader的方法在HTTP消息头中加入Content-DispositionD,q指定其gؓ“attachment”Q那么无个文件是何类型,览器都会提C我们下载此文gQ因为此时它认ؓ后面的消息体是一?#8220;附g”Q不需要由览器来处理了。例如,在ASP.Net?写入如下语句Q?br>Response.AddHeader("Content-Disposition: attachment");<br>h此页面是得到的结果如Q?br>HTTP/1.1 200 OK<br>Server: Microsoft-IIS/5.1<br>Date: Thu, 23 Mar 2006 07:54:53 GMT<br>Content-Disposition: attachment<br>Cache-Control: private<br>Content-Type: text/html; charset=utf-8<br>……<br>也就是说Q通过AddHeader函数可以为HTTP消息头加入我们自定义的内宏V用这U方法可以强制让览器提CZ载文Ӟ即ɘq个文g是我们已知的 cdQ基于是HTML|页。如果想要让用户下蝲时提CZ个默认的文g名,只需要在前面一句话后加?#8220;filename=文g?#8221;卛_。例如:<br>Response.AddHeader("Content-Disposition: attachment; filename=mypage.htm"); <p><strong>3 Content-Type</strong><strong>与Content-Disposition</strong> <p>如果把Content-Type和Content-Dispositionl合在一起用会怎么样呢Q?br>打开一个网|Q浏览器会首先看是否有Content-Disposition: attachmentq一,如果有,无论Content-Type的值是什么,都会提示文g下蝲?br>如果指定了filenameQ就会提C默认的文g名ؓ此文件名。注意到在IE6中除?#8220;保存”按扭外还?#8220;打开”按扭Q此时打开文g的类型是由在 filename中指定的文g扩展名决定的Q例如让filename=mypic.jpgQ浏览器׃查找默认的图片查看器来打开此文件?br>如果没有指定filenameQ那么浏览器根据Content-Type中的cd来决定文件的cdQ例如Content-Typecd?image/gifQ那么就会去查找默认的看GIF囄的工Pq且讄此文件的名字为所h的网늚dQ不带扩展名Q加上对应于此文件类弄扩展名Q例 如请求的mypage.aspxQ就会自动变成mypage.gif。如果ƈ没有指定Content-Type|那么默认它?“text/html”Qƈ且保存的文g名就是所h的网|件名?br>但如果没有指定Content-DispositionQ那么就和前面关于Content-Type中所讨论的情冉|一L了? <p><strong>4 Cache</strong> <p>q回消息中的Cache用于指定|页~存。我们经常可以看到这L情况Q打开一个网|速度不快Q但再次打开时就会快很多Q原因是览器已l对此页面进行了~存Q那么在同一览器窗口中再次打开此页时不会重C服务器端获取。网늚~存是由HTTP消息头中?#8220;Cache-control”来控?的,常见的取值有private、no-cache、max-age、must-revalidate{,默认为private。其作用Ҏ不同的重新浏 览方式分Z下几U情况:<br><strong>Q?Q?打开新窗?/strong><br>如果指定cache-control的gؓprivate、no-cache、must-revalidateQ那么打开新窗口访问时都会重新讉K服务器。而如果指定了max-age|那么在此值内的时间里׃会重新访问服务器Q例如:<br>Cache-control: max-age=5<br>表示当访问此|页后的5U内再次讉K不会L务器<br><strong>Q?Q?在地址栏回?/strong><br>如果gؓprivate或must-revalidateQ和|上说的不一PQ则只有W一ơ访问时会访问服务器Q以后就不再讉K。如果gؓno-cacheQ那么每ơ都会访问。如果gؓmax-ageQ则在过期之前不会重复访问?br><strong>Q?Q?按后退按扭</strong><br>如果gؓprivate、must-revalidate、max-ageQ则不会重访问,而如果ؓno-cacheQ则每次都重复访?br><strong>Q?Q?按刷新按?br></strong>无论Z|都会重复讉K <p>当指定Cache-controlgؓ“no-cache”Ӟ讉K此页面不会在Internet临时文章夹留下页面备份?br>另外Q通过指定“Expires”g会媄响到~存。例如,指定Expiresgؓ一个早已过ȝ旉Q那么访问此|时若重复在地址栏按回RQ那么每ơ都会重复访问:<br>Expires: Fri, 31 Dec 1999 16:00:00 GMT <p>在ASP中,可以通过Response对象的Expires、ExpiresAbsolute属性控制Expires|通过Response对象的CacheControl属性控制Cache-control的|例如Q?br>Response.ExpiresAbsolute = #2000-1-1# ' 指定l对的过期时_q个旉用的是服务器当地旉Q会被自动{换ؓGMT旉<br>Response.Expires = 20 ' 指定相对的过期时_以分钟ؓ单位Q表CZ当前旉赯多少分钟q期?br>Response.CacheControl = "no-cache" <br>Expires值是可以通过在Internet临时文g夹中查看临时文g的属性看到的Q如Q? <p><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/HTTP_E40D/clip_image003_2.jpg"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=227 alt=clip_image003 src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/HTTP_E40D/clip_image003_thumb.jpg" width=203 border=0></a> </p> <img src ="http://www.shnenglu.com/woaidongmao/aggbug/51483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-29 16:13 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP Keep-Alivehttp://www.shnenglu.com/woaidongmao/archive/2008/05/29/51481.html肥仔肥仔Thu, 29 May 2008 08:02:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/29/51481.htmlhttp://www.shnenglu.com/woaidongmao/comments/51481.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/29/51481.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/51481.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/51481.html       Keep-Alive功能使客L到服务器端的q接持箋有效Q当出现Ҏ务器的后l请求时QKeep-Alive功能避免了徏立或者重新徏立连接。市Z的大部分Web服务器,包括iPlanet、IIS和ApacheQ都支持HTTP Keep-Alive。对于提供静态内容的|站来说Q这个功能通常很有用。但是,对于负担较重的网站来_q里存在另外一个问题:虽然为客户保留打开的连接有一定的好处Q但它同样媄响了性能Q因为在处理暂停期间Q本来可以释攄资源仍旧被占用。当Web服务器和应用服务器在同一台机器上q行ӞKeep- Alive功能对资源利用的影响其H出?此功能ؓHTTP 1.1预设的功能,HTTP 1.0加上Keep-Alive header也可以提供HTTP的持l作用功能?



肥仔 2008-05-29 16:02 发表评论
]]>
HTTP POST和GET的区?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51476.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Thu, 29 May 2008 07:33:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51476.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/51476.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/51476.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/51476.html</trackback:ping><description><![CDATA[<p>1、HTTP 只有POST和GET 两种命o模式Q? <p>2、POST是被设计用来向上放东西的Q而GET是被设计用来从服务器取东西的QGET也能够向服务器传送较的数据Q而Get之所以也能传送数?只是用来设计告诉服务?你到底需要什么样的数?POST的信息作为HTTP h的内容,而GET是在HTTP 头部传输的; <p>3、POST与GET在HTTP 中传送的方式不同QGET的参数是在HTTP 的头部传送的Q而Post的数据则是在HTTP h的内定w传? <p>4、POST传输数据Ӟ不需要在URL中显C出来,而GETҎ要在URL中显C; <p>5、GETҎ׃受到URL长度的限?只能传递大U?024字节QPOST传输的数据量大,可以辑ֈ2MQ而根据微软方面的说法Q微软对?Request.Form() 可接收的最大数据有限制QIIS 4 中ؓ 80 KB 字节QIIS 5 中ؓ 100 KB 字节Q? <p>6、SOAP是依赖于HTTP POST模式实现的; <p>  <p>例子Q? <p><strong>HTTP GET</strong></p> <p>发?</p> <p>GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1<br>Host: api.efxnow.com</p> <p>回复</p> <p>HTTP/1.1 200 OK<br>Content-Type: text/xml; charset=utf-8<br>Content-Length: length </p> <p><?xml version="1.0" encoding="utf-8"?><br><objPlaceOrderResponse xmlns="<a href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>><br>  <Success>boolean</Success><br>  <ErrorDescription>string</ErrorDescription><br>  <ErrorNumber>int</ErrorNumber><br>  <CustomerOrderReference>long</CustomerOrderReference><br>  <OrderConfirmation>string</OrderConfirmation><br>  <CustomerDealRef>string</CustomerDealRef><br></objPlaceOrderResponse></p> <p> </p> <p><strong>HTTP POST</strong></p> <p>发?</p> <p>POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1<br>Host: api.efxnow.com<br>Content-Type: application/x-www-form-urlencoded<br>Content-Length: length <p>UserID=string&PWD=string&OrderConfirmation=string</p> <p>回复</p> <p>HTTP/1.1 200 OK<br>Content-Type: text/xml; charset=utf-8<br>Content-Length: length </p> <p><?xml version="1.0" encoding="utf-8"?><br><objPlaceOrderResponse xmlns="<a href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>><br>  <Success>boolean</Success><br>  <ErrorDescription>string</ErrorDescription><br>  <ErrorNumber>int</ErrorNumber><br>  <CustomerOrderReference>long</CustomerOrderReference><br>  <OrderConfirmation>string</OrderConfirmation><br>  <CustomerDealRef>string</CustomerDealRef><br></objPlaceOrderResponse></p> <p> </p> <p><strong>SOAP 1.2</strong></p> <p>发?</p> <p>POST /DEMOWebServices2.8/Service.asmx HTTP/1.1<br>Host: api.efxnow.com<br>Content-Type: application/soap+xml; charset=utf-8<br>Content-Length: length <p><?xml version="1.0" encoding="utf-8"?><br><soap12:Envelope xmlns:xsi="<a href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xmlns:xsd="<a href_cetemp='http://www.w3.org/2001/XMLSchema"'>http://www.w3.org/2001/XMLSchema"</a> xmlns:soap12="<a href_cetemp='http://www.w3.org/2003/05/soap-envelope"'>http://www.w3.org/2003/05/soap-envelope"</a>><br>  <soap12:Body><br>    <CancelOrder xmlns="<a href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>><br>      <UserID>string</UserID><br>      <PWD>string</PWD><br>      <OrderConfirmation>string</OrderConfirmation><br>    </CancelOrder><br>  </soap12:Body><br></soap12:Envelope></p> <p>回复</p> <p>HTTP/1.1 200 OK<br>Content-Type: application/soap+xml; charset=utf-8<br>Content-Length: length </p> <p><?xml version="1.0" encoding="utf-8"?><br><soap12:Envelope xmlns:xsi="<a href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xmlns:xsd="<a href_cetemp='http://www.w3.org/2001/XMLSchema"'>http://www.w3.org/2001/XMLSchema"</a> xmlns:soap12="<a href_cetemp='http://www.w3.org/2003/05/soap-envelope"'>http://www.w3.org/2003/05/soap-envelope"</a>><br>  <soap12:Body><br>    <CancelOrderResponse xmlns="<a href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>><br>      <CancelOrderResult><br>        <Success>boolean</Success><br>        <ErrorDescription>string</ErrorDescription><br>        <ErrorNumber>int</ErrorNumber><br>        <CustomerOrderReference>long</CustomerOrderReference><br>        <OrderConfirmation>string</OrderConfirmation><br>        <CustomerDealRef>string</CustomerDealRef><br>      </CancelOrderResult><br>    </CancelOrderResponse><br>  </soap12:Body><br></soap12:Envelope> <div class="tdh3d3t" id=content><span><span> <div class="9b3l9jf" id=content><span><span> <pre> </pre> </span></span></div> </span></span></div> <img src ="http://www.shnenglu.com/woaidongmao/aggbug/51476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-29 15:33 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/05/29/51476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RFC1945&mdash;&mdash;HTTP 1.0中文??http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51411.html肥仔肥仔Wed, 28 May 2008 09:12:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51411.htmlhttp://www.shnenglu.com/woaidongmao/comments/51411.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51411.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/51411.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/51411.html阅读全文

肥仔 2008-05-28 17:12 发表评论
]]>
HTTP/1.1协议规范(中文归纳版)http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51408.html肥仔肥仔Wed, 28 May 2008 09:05:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51408.htmlhttp://www.shnenglu.com/woaidongmao/comments/51408.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51408.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/51408.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/51408.html一、介l(introductionQ?

1. 目的——HTTP/0.9-〉HTTP/1.0-〉HTTP/1.1

2. 要求——MUST、REQUIRED、SHOULD

3. 术语——连?Connection)、消?Message)、请?Request)、应{?Response)、资?Resource)、实?Entity)、表C方?Representation)、内容协?Content Negotiation)、变量(Variant)、客hQClientQ、用户代?User agent)、服务器(Server)、原服务器(Origin server)、代理服务器Q?ProxyQ、网养IgatewayQ、高速缓存(CacheQ、可~存QCacheableQ、直接(first-handQ、明终止时_explicit expiration timeQ、探索终止时_heuristic expiration timeQ、年龄(AgeQ、保鲜寿命(Freshness lifetimeQ、保鲜(FreshQ、陈旧(StaleQ、语义透明Qsemantically transparentQ、有效性判别器QValidatorQ、实体标讎ͼentity tagQ或最l更Ҏ_Last-Modified time))、上?下游Qupstream/downstreamQ、向?向外Qinbound/outboundQ?

4. M操作——请?应答、中?

二、符h例与一般语法(notational conversions and generic grammarQ?

1. 扩充BNF——name = definition,"literal",rule1 | rule2,(rule1 rule2),*rule,[rule],N rule, #rule,; comment, implied *LWS

2. 基本规则——OCTET,CHAR,UPALPHA,LOALPHA,ALPHA,DIGIT,CTL,CR,LF,SP,HT,<">

三、协议参敎ͼprotocol parametersQ?

1. HTTP版本——HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT

2. l一资源标示W(URIQ——统一资源定位?URL)和统一资源名称(URN)的结合,http_URL = "http:" "http://" host [ ":" port ] [ abs_path [ "?" query ]]

3. 日期/旉格式——Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123Q?br>Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036Q?br>Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format

4. 字符集——本文档中的术语"字符?指一U用一个或更多表格一个八字节序列转换成一个字W序列的ҎQ?br>charset=token
p字符?

5. 内容~码——内容编码主要用来允许文档压~(信源~码Q?br>content-coding= token
注册表包含下列标讎ͼgzipQcompressQdeflateQidentity

6. 传输~码——目的是能够保通过|络安全传输Q信道编码)
transfer-coding = "chunked" | transfer-extension
transfer-extension = token *( ";" parameter )Q?br>成块传输代码

7. 媒体cd——media-type = type "/" subtype *( ";" parameter )
type = token
subtype = token
规范化和原文~省
多部分类?

8. 产品标记——product = token ["/" product-version]
product-version = token

9. 质量值——qvalue = ( "0" [ "." 0*3DIGIT ] )| ( "1" [ "." 0*3("0") ] )

10. 语言标记——language-tag = primary-tag *( "-" subtag )
primary-tag = 1*8ALPHA
subtag = 1*8ALPHA

11. 实体标记——entity-tag = [ weak ] opaque-tag
weak = "W/"
opaque-tag = quoted-string

12. 范围单位——range-unit = bytes-unit | other-range-unit
bytes-unit = "bytes"
other-range-unit = token

四?HTTP消息QHTTP messageQ?

1. 消息cd——HTTP-message = Request | Response ; HTTP/1.1 messages
generic-message = start-line *(message-header CRLF) CRLF [ message-body ]
start-line = Request-Line | Status-Line

2. 消息头——HTTP头域包括常规?h?应答头和实体头域
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = <the OCTETs making up the field-value and consisting of either *TEXT or combinations of token, separators, and quoted-string>

3. 消息体——message-body = entity-body| <entity-body encoded as per Transfer-Encoding>

4. 消息的长度——决定因?

5. 常规头域——general-header = Cache-Control| Connection| Date| Pragma| Transfer-Encoding

五?hQrequestQ?

首行包括利用资源的方?区分资源的标?以及协议的版本号
Request = Request-Line * (( general-header| request-header| entity-header ) CRLF) CRLF [ message-body ]

1. h行——Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Ҏ——方法标记指的是在请求URI所指定的资源上所实现的方?br>Method = "OPTIONS"| "GET"| "POST"| "PUT"| "DELETE"| "TRACE"| "CONNECT"| extension-method
extension-method = token
hURL——请求URL是一U全球统一的应用于资源h的资源标识符
Request-URI = "*" | absoluteURI | abs_path | authority
h行D例:GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org

2. h定义的资源——一个INTERNETh所定义的精资源由hURL和主机报头域所军_

3. h报头域——request-header = Accept| Accept-Charset| Accept-Encoding| Accept-Language| Authorization| Expect| From| Host| If-Match| If-Modified-Since| If-None-Match| If-Range| If-Unmodified-Since| Max-Forwards| Proxy-Authorization| Range| Referer| TE| User-Agent

六?应答QresponseQ?

接收和翻译一个请求信息后Q服务器发出一个HTTP应答信息
Response = Status-Line*(( general-header| response-header| entity-header ) CRLF) CRLF [ message-body ]

1. 状态行——Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
状态码——状态码是试囄解和满h的三位数字的整数码,1xx,2xx,3xx,4xx,5xxQ?00-?05-〉扩展码

2. 应答报头域——response-header = Accept-Ranges| Age| Location| Proxy-Authenticate| Retry-After| Server| Vary| WWW-Authenticate

七?实体QentityQ?

在未l特别规定的情况下,h与应{的消息也可以传送实体?实体包括实体报头域与实体正文Q而有些应{只包括实体报头?

1. 实体报头域——entity-header = Allow | Content-Encoding| Content-Language| Content-Length | Content-Location| Content-MD5| Content-Range| Content-Type| Expires| Last-Modified| extension-header
extension-header = message-header

2. 实体正文——entity-body = *OCTET
entity-body := Content-Encoding( Content-Type( data ) )

八?q接QconnectionQ?

1. 持箋q接——优?br>持箋q接是Q何HTTPq接的缺省方式,支持持箋q接的客h可以以流水线方式发送请?br>代理服务?

2. 消息传递要求——持l连接与量控制
监视q接中出错状态的消息
100L态的用?br>服务器过早关闭连接时客户机的动作

九?Ҏ定义Qmethod definitionsQ?

1. 安全和等q方?br>安全Ҏ——GET和HEADҎ除了补救外不应该有别的采取措施的含义
{幂Ҏ——没有副作用的序列是{幂?

2. OPTIONS——OPTIONSҎ代表在请求URI定的请?应答q程中通信条g是否可行的信?

3. GET——GETҎ说明了重Z息的内容p求URI来确?

4. HEAD——除了应{中止q回消息正文?HEADҎ与GETҎ一?

5. POST——POSTҎ实现的实际功能取决于服务?

6. PUT——PUTҎ要求所附实体存储在提供的请求URI?

7. DELETE——DELELEҎ要求原服务器释放hURI指向的资?

8. TRACE——TRACEҎ用于调用q程的应用层循环h消息

9. CONNECT——CONNECTҎ用于能动态徏立v隧道的代理服务器

十?状态码定义Qstatus code definitionsQ?

1. 信息1XX—?br>100l箋
101转换协议

2. 成功2XX—?br>200h成功
201创徏
202接受
203非权威信?br>204无内?br>205重置内容
206局部内?

3. 重新定向3XX—?br>300多样选择
301怹Ud
302创立
303观察别的部分
304只读
306(没有用的)
307临时重发

4. 客户错误4xx—?br>400坏请?br>401未授权的
402必需的支?br>403用
404没有扑ֈ
405不被允许的方?br>406不接?br>407代理服务器认证所必需
408h时
409冲突
410停止
411必需的长?br>412预处理失?br>413h实体太大
414h的URIq长
415不被支持的媒体类?br>416h范围不满?br>417期望p|

5. 服务器错?xx—?br>500服务器内部错?br>501不能实现
502坏网?br>503难以获得的服?br>504|关时
505 HTTP版本不支?

十一?讉K验证Qaccess authenticationQ——可选择

十二?内容谈判Qcontent negotiationQ?

HTTPZ"内容谈判"提供了一些机Ӟ卛_有很多种可能的表C时如何选择对于一个请求的最佳的表示?

1. 服务器驱动谈判——一个请求的最佌C的选择由服务器提供的运法则来完成

2. 代理驱动谈判——对于一个应{的最佌C法的选择是在代理从原服务器端收到最初的应答后实现的

3. 透明谈判——透明的判断是服务器驱动和代理驱动谈判的结合体

十三?HTTP中的~存Qcaching in HTTPQ?

HTTP典型应用于能通过采用~存技术而提高性能的分布式信息pȝ

1. ~存—?br>~存正确?br>警告信息
~存控制机制
直接的用户代理警?br>规则和警告的例外情况
由客h制的行ؓ

2. q期模型—?br>服务器指定模?br>启发式过?br>q龄计算
q期计算
澄清q期?br>澄清多重响应

3. 认模型——当~存器想要用一个失时效的条目来相应客户的请?他首先必d源服务器验这一~存条目是否仍然可用
最后修Ҏ?br>标签~存认?br>强弱控制?br>关于何时使用实体标签和最后修Ҏ间的规则
不确认条?

4. 响应的缓存能力——除非被明确限制,~存pȝ可以一成功的响应作为缓存实体一直存?

5. 从缓存构造响应—?br>端到端和Hop-by-hop报头
不可更改报头
联合报头
联合字节范围

6. ~存谈判响应

7. ׃n与非׃n~存

8. 错误和不完全响应~存行ؓ

9. GET?HEAD的副作用

10. h或删除后的无效?

11. 强制写通过

12. ~存替换

13. 历史U录

十四?报头域定义(header field definitionsQ?

1. Accept——Accept = "Accept" ":" #( media-range [ accept-params ] )
media-range = ( "*/*"| ( type "/" "*" )| ( type "/" subtype )) *( ";" parameter )
accept-params = ";" "q" "=" qvalue *( accept-extension )
accept-extension = ";" token [ "=" ( token | quoted-string ) ]
?QAccept: audio/*; q=0.2, audio/basic
?QAccept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c

2. Accept-Charset——Accept-Charset = "Accept-Charset" ":" 1#( ( charset | "*" )[ ";" "q" "=" qvalue ] )
例:Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

3. Accept-Encoding——Accept-Encoding = "Accept-Encoding" ":" 1#( codings [ ";" "q" "=" qvalue ] )
codings = ( content-coding | "*" )
例:Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

4. Accept-Language——Accept-Language = "Accept-Language" ":" 1#( language-range [ ";" "q" "=" qvalue ] )
language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
例:Accept-Language: da, en-gb;q=0.8, en;q=0.7

5. Accept-Range——Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges
acceptable-ranges = 1#range-unit | "none"
例:Accept-Ranges: bytes

6. Age——Age = "Age" ":" age-value
age-value = delta-seconds

7. Allow——Allow = "Allow" ":" #Method
例:Allow: GET, HEAD, PUT

8. Authorization——Authorization = "Authorization" ":" credentials

9. Cache-Control——Cache-Control = "Cache-Control" ":" 1#cache-directive
cache-directive = cache-request-directive| cache-response-directive
cache-request-directive ="no-cache"| "no-store"| "max-age" "=" delta-seconds| "max-stale" [ "=" delta-seconds ]| "min-fresh" "=" delta-seconds| "no-transform"| "only-if-cached"| cache-extension
cache-response-directive ="public"| "private" [ "=" <"> 1#field-name <"> ]| "no-cache" [ "=" <"> 1#field-name <"> ]| "no-store"| "no-transform"| "must-revalidate"| "proxy-revalidate"| "max-age" "=" delta-seconds| "s-maxage" "=" delta-seconds| cache-extension
cache-extension = token [ "=" ( token | quoted-string ) ]
什么是可缓存的
哪些可能被缓存保?br>对基本过期失效机制的改进
~存重新认有效和重载控?br>不得转换的指?br>~存控制扩展

10. Connection——Connection = "Connection" ":" 1#(connection-token)
connection-token = token
例:Connection: close

11. Content-Encoding——Content-Encoding = "Content-Encoding" ":" 1#content-coding
例:Content-Encoding: gzip

12. Content-Language——Content-Language = "Content-Language" ":" 1#language-tag
例:Content-Language: mi, en

13. Content-Length——Content-Length = "Content-Length" ":" 1*DIGIT
Content-Length: 3495

14. Content-Location——Content-Location = "Content-Location" ":"( absoluteURI | relativeURI )

15. Content-MD5——Content-MD5 = "Content-MD5" ":" md5-digest
md5-digest = <base64 of 128 bit MD5 digest as per RFC 1864>

16. Content-Range——Content-Range = "Content-Range" ":" content-range-spec
content-range-spec = byte-content-range-spec
byte-content-range-spec = bytes-unit SP byte-range-resp-spec "/"( instance-length | "*" )
byte-range-resp-spec = (first-byte-pos "-" last-byte-pos) | "*"
instance-length = 1*DIGIT
例:The first 500 bytes:bytes 0-499/1234

17. Content-Type——Content-Type = "Content-Type" ":" media-type
例:Content-Type: text/html; charset=ISO-8859-4

18. Date——Date = "Date" ":" HTTP-date
例:Date: Tue, 15 Nov 1994 08:12:31 GMT
没有旉的原服务器的q作

19. Etag——ETag = "ETag" ":" entity-tag
例:ETag: W/"xyzzy"

20. Expect——Expect = "Expect" ":" 1#expectation
expectation = "100-continue" | expectation-extension
expectation-extension = token [ "=" ( token | quoted-string )*expect-params ]
expect-params = ";" token [ "=" ( token | quoted-string ) ]

21. Expires——Expires = "Expires" ":" HTTP-date
例:Expires: Thu, 01 Dec 1994 16:00:00 GMT

22. From——From = "From" ":" mailbox
例:From: webmaster@w3.org

23. Host——Host = "Host" ":" host [ ":" port ] ; Section 3.2.2

24. If-Match——If-Match = "If-Match" ":" ( "*" | 1#entity-tag )
例:If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"

25. If-Modified-Since——If-Modified-Since = "If-Modified-Since" ":" HTTP-date
例:If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

26. If-None-Match ——If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag )
例:If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"

27. If-Range ——If-Range = "If-Range" ":" ( entity-tag | HTTP-date )

28. If-Unmodified-Since ——If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date
例:If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

29. Last-Modified ——Last-Modified = "Last-Modified" ":" HTTP-date
例:Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

30. Location ——Location = "Location" ":" absoluteURI
Location: http://www.w3.org/pub/WWW/People.html

31. Max-Forwards ——Max-Forwards = "Max-Forwards" ":" 1*DIGIT

32. Pragma ——Pragma = "Pragma" ":" 1#pragma-directive
pragma-directive = "no-cache" | extension-pragma
extension-pragma = token [ "=" ( token | quoted-string ) ]

33. Proxy-Authenticate ——Proxy-Authenticate = "Proxy-Authenticate" ":" 1#challenge

34. Proxy-Authorization ——Proxy-Authorization = "Proxy-Authorization" ":" credentials

35. Range——字节范?br>范围索请?br>Range = "Range" ":" ranges-specifier

36. Referer——Referer = "Referer" ":" ( absoluteURI | relativeURI )

37. Retry-After ——Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds )

38. Server ——Server = "Server" ":" 1*( product | comment )

39. TE ——TE = "TE" ":" #( t-codings )
t-codings = "trailers" | ( transfer-extension [ accept-params ] )
例:TE: trailers, deflate;q=0.5

40. Trailer ——Trailer = "Trailer" ":" 1#field-name

41. Transfer-Encoding ——Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding
例:Transfer-Encoding: chunked

42. Upgrade——Upgrade = "Upgrade" ":" 1#product
例:Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

43. User-Agent ——User-Agent = "User-Agent" ":" 1*( product | comment )
例:User-Agent: CERN-LineMode/2.15 libwww/2.17b3

44. Vary ——Vary = "Vary" ":" ( "*" | 1#field-name )

45. Via ——Via = "Via" ":" 1#( received-protocol received-by [ comment ] )
received-protocol = [ protocol-name "/" ] protocol-version
protocol-name = token
protocol-version = token
received-by = ( host [ ":" port ] ) | pseudonym
pseudonym = token
例:Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy

46. Warning = "Warning" ":" 1#warning-value
warning-value = warn-code SP warn-agent SP warn-text [SP warn-date]
warn-code = 3DIGIT
warn-agent = ( host [ ":" port ] ) | pseudonym
warn-text = quoted-string
warn-date = <"> HTTP-date <">

47. WWW-Authenticate ——WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge

十五?安全考虑Qsecurity considerationsQ?

一些徏议,但是q不包括最l解x?

1. 个h信息
服务器日志信息的滥用
敏感信息的传?br>URI中敏感信息的~码
q接到Accept报头的机要问?

2. Z文g和\径名U的d

3. DNSƺ骗

4. LocationQ位|)报头和欺?

5. 内容們֐问题

6. 鉴定证书和空闲的客户?

7. 代理服务器和高速缓?br>对代理服务器的拒l服务攻?

十六?感谢

十七?参考文?

十八?作者地址

十九?附录



肥仔 2008-05-28 17:05 发表评论
]]>
HTTP深入出http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51407.html肥仔肥仔Wed, 28 May 2008 09:02:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51407.htmlhttp://www.shnenglu.com/woaidongmao/comments/51407.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51407.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/51407.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/51407.htmlHTTP(HyperText Transfer Protocol)是一套计机通过|络q行通信的规则。计机专家设计出HTTPQHTTP客户Q如Web览器)能够从HTTP服务?Web服务?h信息和服务,HTTP目前协议的版本是1.1.HTTP是一U无状态的协议Q无状态是指Web览器和Web服务器之间不需要徏立持久的q接Q这意味着当一个客L向服务器端发求,然后Web服务器返回响?response)Q连接就被关闭了Q在服务器端不保留连接的有关信息.HTTP遵@h(Request)/应答(Response)模型。Web览器向Web服务器发送请求,Web服务器处理请求ƈq回适当的应{。所有HTTPq接都被构造成一套请求和应答?

HTTP使用内容cdQ是指Web服务器向Web览器返回的文g都有与之相关的类型。所有这些类型在MIME Internet邮g协议上模型化Q即Web服务器告诉Web览器该文g所h的种c,是HTML文档、GIF格式囑փ、声x件还是独立的应用E序。大多数Web览器都拥有一pd的可配置的辅助应用程序,它们告诉览器应该如何处理Web服务器发送过来的各种内容cd?

HTTP通信机制是在一ơ完整的HTTP通信q程中,Web览器与Web服务器之间将完成下列7个步骤:

Q?Q?nbsp;   建立TCPq接

在HTTP工作开始之前,Web览器首先要通过|络与Web服务器徏立连接,该连接是通过TCP来完成的Q该协议与IP协议共同构徏InternetQ即著名的TCP/IP协议族,因此Internet又被UC是TCP/IP|络。HTTP是比TCP更高层次的应用层协议Q根据规则,只有低层协议建立之后才能Q才能进行更层协议的q接Q因此,首先要徏立TCPq接Q一般TCPq接的端口号?0

Q?Q?nbsp;   Web览器向Web服务器发送请求命?

一旦徏立了TCPq接QWeb览器就会向Web服务器发送请求命?

例如QGET/sample/hello.jsp HTTP/1.1

Q?Q?nbsp;   Web览器发送请求头信息

览器发送其h命o之后Q还要以头信息的形式向Web服务器发送一些别的信息,之后览器发送了一I白行来通知服务器,它已l结束了该头信息的发送?

Q?Q?nbsp;   Web服务器应{?

客户机向服务器发求后Q服务器会客h回送应{,

HTTP/1.1 200 OK

应答的第一部分是协议的版本号和应答状态码

Q?Q?nbsp;   Web服务器发送应{头信息

正如客户端会随同h发送关于自w的信息一P服务器也会随同应{向用户发送关于它自己的数据及被请求的文档?

Q?Q?nbsp;   Web服务器向览器发送数?

Web服务器向览器发送头信息后,它会发送一个空白行来表C头信息的发送到此ؓl束Q接着Q它׃Content-Type应答头信息所描述的格式发送用hh的实际数?

Q?Q?nbsp;   Web服务器关闭TCPq接

一般情况下Q一旦Web服务器向览器发送了h数据Q它p关闭TCPq接Q然后如果浏览器或者服务器在其头信息加入了q行代码

Connection:keep-alive

TCPq接在发送后仍然保持打开状态,于是Q浏览器可以l箋通过相同的连接发送请求。保持连接节省了为每个请求徏立新q接所需的时_q节U了|络带宽?

HTTPh格式

当浏览器向Web服务器发求时Q它向服务器传递了一个数据块Q也是h信息QHTTPh信息?部分l成Q?

l   hҎURI协议/版本

l   h?Request Header)

l   h正文

下面是一个HTTPh的例子:

GET/sample.jspHTTP/1.1

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

username=jinqiao&password=1234

Q?Q?nbsp;      hҎURI协议/版本

h的第一行是“ҎURL?版本”QGET/sample.jsp HTTP/1.1

以上代码?#8220;GET”代表hҎQ?#8220;/sample.jsp”表示URIQ?#8220;HTTP/1.1代表协议和协议的版本?

ҎHTTP标准QHTTPh可以使用多种hҎ。例如:HTTP1.1支持7U请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST?

URL完整地指定了要访问的|络资源Q通常只要l出相对于服务器的根目录的相对目录即可,因此L?#8220;/”开_最后,协议版本声明了通信q程中用HTTP的版本?

Q?Q h?Request Header)

h头包含许多有关的客户端环境和h正文的有用信息。例如,h头可以声明浏览器所用的语言Q请求正文的长度{?

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

Q?Q h正文

h头和h正文之间是一个空行,q个行非帔R要,它表C求头已经l束Q接下来的是h正文。请求正文中可以包含客户提交的查询字W串信息Q?

username=jinqiao&password=1234

在以上的例子的HTTPh中,h的正文只有一行内宏V当Ӟ在实际应用中QHTTPh正文可以包含更多的内宏V?

HTTPhҎ我这里只讨论GETҎ与POSTҎ

GETҎ

GETҎ是默认的HTTPhҎQ我们日常用GETҎ来提交表单数据,然而用GETҎ提交的表单数据只l过了简单的~码Q同时它作为URL的一部分向Web服务器发送,因此Q如果用GETҎ来提交表单数据就存在着安全隐患上。例?

Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

从上面的URLh中,很容易就可以辩认单提交的内容。(Q之后的内容Q另外由于GETҎ提交的数据是作ؓURLh的一部分所以提交的数据量不能太?

POSTҎ

POSTҎ是GETҎ的一个替代方法,它主要是向Web服务器提交表单数据,其是大扚w的数据。POSTҎ克服了GETҎ的一些缺炏V通过POSTҎ提交表单数据Ӟ数据不是作ؓURLh的一部分而是作ؓ标准数据传送给Web服务器,q就克服了GETҎ中的信息无法保密和数据量太小的缺炏V因此,Z安全的考虑以及对用户隐U的重Q通常表单提交旉用POSTҎ?

从编E的角度来讲Q如果用户通过GETҎ提交数据Q则数据存放在QUERYQSTRING环境变量中,而POSTҎ提交的数据则可以从标准输入流中获取?

HTTP应答与HTTPh怼QHTTP响应也由3个部分构成,分别是:

l  协议状态版本代码描q?

l  响应?Response Header)

l  响应正文

 

下面是一个HTTP响应的例子:

HTTP/1.1 200 OK

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

<html>
<head>

<title>HTTP响应CZ<title>

</head>

<body>

Hello HTTP!

</body>

</html>


协议状态代码描qHTTP响应的第一行类gHTTPh的第一行,它表C通信所用的协议是HTTP1.1服务器已l成功的处理了客L发出的请求(200表示成功Q?

HTTP/1.1 200 OK
响应?Response Header)响应头也和请求头一样包含许多有用的信息Q例如服务器cd、日期时间、内容类型和长度{:

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

响应正文响应正文是服务器返回的HTML面Q?

<html>
<head>

<title>HTTP响应CZ<title>

</head>

<body>

Hello HTTP!

</body>

</html>

响应头和正文之间也必ȝI分隔。  

HTTP应答?

HTTP应答码也UCؓ状态码Q它反映了Web服务器处理HTTPh状态。HTTP应答码由3位数字构成,其中首位数字定义了应{码的类型:

1XXQ信息类(Information),表示收到Web览器请求,正在q一步的处理?

2XXQ成功类QSuccessfulQ?表示用户h被正接Ӟ理解和处理例如:200 OK

3XX-重定向类(Redirection),表示h没有成功Q客户必采取进一步的动作?

4XX-客户端错?Client Error)Q表C客L提交的请求有错误 例如Q?04 NOT  FoundQ意味着h中所引用的文档不存在?

5XX-服务器错?Server Error)表示服务器不能完成对h的处理:?500

对于我们Web开发h员来说掌握HTTP应答码有助于提高Web应用E序调试的效率和准确性?

安全q接

Web应用最常见的用途之一是电子商务,可以利用Web服务器端E序使h们能够网l购物,需要指ZҎQ缺省情况下Q通过Internet发送信息是不安全的Q如果某人碰巧截获了你发l朋友的一则消息,他就能打开它,假想在里面有你的信用卡号码,q会有多么糟p,q运的是Q很多Web服务器以及Web览器都有创立安全连接的能力Q这样它们就可以安全的通信了?

通过Internet提供安全q接最常见的标准是安全套接?Secure Sockets layer,SSl)协议。SSL协议是一个应用层协议(和HTTP一?Q用于安全方式在Web上交换数据,SSL使用公开密钥~码pȝ。从本质Ԍq意味着业务中每一斚w拥有一个公开的和一个私有的密钥。当一方用另一方公开密钥q行~码Ӟ只有拥有匚w密钥的h才能对其解码。简单来Ԍ公开密钥~码提供了一U用于在两方之间交换数据的安全方法,SSLq接建立之后Q客户和服务器都交换公开密钥Qƈ在进行业务联pM前进行验证,一旦双方的密钥都通过验证Q就可以安全C换数据?



肥仔 2008-05-28 17:02 发表评论
]]>
HTTP客户h的数据格式说?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51405.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Wed, 28 May 2008 08:58:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51405.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/51405.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/51405.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/51405.html</trackback:ping><description><![CDATA[<p>HTTPh包括三部分:h?Request Line)Q头部(HeadersQ和数据体(Body)。其中,h行由hҎ(method)Q请求网址Request-URI和协?(Protocol)构成Q而请求头包括多个属性,数据体则可以被认为是附加在请求之后的文本或二q制文g?/p> <p>下面q个例子昄了一个HTTPh的Header内容Q这些数据是真正以网lHTTP协议从IE览器传递到Apache服务器上的?/p> <p>GET /icwork/? search=product HTTP/1.1</p> <p>Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,*.*</p> <p>Accept-Language:en-us</p> <p>Accept-Encoding:gzip,deflate</p> <p>User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)</p> <p>Host:www.icconcept.com:8080</p> <p>Referer:http://www.yoursite.com/header.html</p> <p>Connection:Keep-Alive</p> <p>q段E序使用?个HeaderQ还有一些Header没有出现。我们参考这个例子具体解释HTTPh格式?/p> <p>1.HTTPh行:h行格式ؓMethod Request-URI Protocol。在上面q个例子里,“GET /icwork/? search=pruduct HTTP/1.1”是请求行?/p> <p>2.Accept:指浏览器或其他客户可以接qMIME文g格式。Servlet可以Ҏ它判断ƈq回适当的文件格式?/p> <p>3.Accept-CharsetQ指出浏览器可以接受的字W编码。英文浏览器的默认值是ISO-8859-1.</p> <p>4.Accept-LanguageQ指出浏览器可以接受的语aU类Q如en或en-usQ指p?/p> <p>5.Accept-EncodingQ指出浏览器可以接受的编码方式。编码方式不同于文g格式Q它是ؓ了压~文件ƈ加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式?/p> <p>6.AuthorizationQ当使用密码机制时用来标识浏览器?/p> <p>7.Cache-ControlQ设|关于请求被代理服务器存储的相关选项。一般servlet用不到?/p> <p>8.ConnectionQ用来告诉服务器是否可以l持固定的HTTPq接。HTTP/1.1使用Keep-Alive为默认|q样Q当览器需要多个文件时(比如一个HTML文g和相关的囑Ş文g)Q不需要每ơ都建立q接?/p> <p>9.Content-TypeQ用来表名request的内容类型。可以用HttpServletRequest的getContentType()Ҏ取得?/p> <p>10.CookieQ浏览器用这个属性向服务器发送Cookie。Cookie是在览器中寄存的小型数据体Q它可以记蝲和服务器相关的用户信息,也可以用来实C话功能?/p> <p>11.ExpectQ表时客户预期的响应状态?/p> <p>12.FromQ给出客LHTTPh负责人的email地址?/p> <p>13.HostQ对应网址URL中的Web名称和端口号?/p> <p>14.If-MatchQ供PUTҎ使用?/p> <p>15.If-Modified-SinceQ客户用这个属性表明它只需要在指定日期之后更改q的|页。因为浏览器可以使用其存储的文g而不必从服务器请求,q样节省了Web资源。由于Servlet是动态生成的|页Q一般不需要用这个属性?/p> <p>16.If-None-MatchQ和If-Match相反的操作,供PUTҎ使用?/p> <p>17.If-Unmodified-SinceQ和If-Match-Since相反?/p> <p>18.PragmaQ这个属性只有一U|即PragmaQno-cache,表明如果servlet充当代理服务器,即其有已经存储的网,也要请求传递给目的服务器?/p> <p>19.Proxy-AuthorizationQ代理服务器使用q个属性,Servlet一般用不到?/p> <p>20.RangeQ如果客h部分|页Q这个属性可以请求剩余部分?/p> <p>21.RefererQ表明生请求的|页URL。如比从|页/icconcept/index.jsp中点M个链接到|页/icwork/searchQ在向服务器发送的GET/icwork/search中的h中,Referer?a href="http://hostname:8080/icconcept/index.php">http://hostname:8080/icconcept/index.php</a>。这个属性可以用来跟tWebh是从什么网站来的?/p> <p>22.UpgrageQ客户通过q个属性设定可以用与HTTP/1.1不同的协议?/p> <p>23.User-AgentQ是客户览器名U?/p> <p>24.ViaQ用来记录Webhl过的代理服务器或Web通道?/p> <p>25.WarningQ用来由客户声明传递或存储(cache)错误?/p> <img src ="http://www.shnenglu.com/woaidongmao/aggbug/51405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-28 16:58 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/05/28/51405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOAP, HTTP GET, HTTP POSThttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51389.html肥仔肥仔Wed, 28 May 2008 07:32:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51389.htmlhttp://www.shnenglu.com/woaidongmao/comments/51389.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/28/51389.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/51389.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/51389.html

SOAP=RPC+HTTP+XML

       SOAP单的理解Q就是这L一个开攑֍议SOAP=RPC+HTTP+XMLQ?font color=#800000>采用HTTP作ؓ底层通讯协议QRPC作ؓ一致性的调用途径QQL作ؓ数据传送的格式Q允许服务提供者和服务客户l过防火墙在INTERNETq行通讯交互?/font>RPC的描叙可能不大准,因ؓSOAP一开始构思就是要实现q_与环境的无关性和独立性,每一个通过|络的远E调用都可以通过SOAP装hQ包括DCEQDistributed Computing Environment Q RPC CALLSQCOM/DCOM CALLS, CORBA CALLS, JAVA CALLSQetc?

       SOAP 使用 HTTP 传?XMLQ尽HTTP 不是有效率的通讯协议Q而且 XML q需要额外的文g解析QparseQ,两者得交易的速度大大低于其它Ҏ。但是XML 是一个开放、健全、有语义的讯息机Ӟ?HTTP 是一个广泛又能避免许多关于防火墙的问题,从而SOAP得到了广泛的应用。但是如果效率对你来说很重要Q那么你应该多考虑其它的方式,而不要用 SOAP?



肥仔 2008-05-28 15:32 发表评论
]]>
ھƷ˾þþþavһ| þԭƷ| ޾ƷŮþþþ99| þþþùƵӰ| þ99Ʒþþ| ޹þþþƷС˵| ޾ƷþëƬ| þþƷһ| þþƷŷպþ| þۺϾɫۺ97_þþ| ƷһþþƷ| þùĻ| ƷһþþƷ | þþ޹| þþƷһ | ޹Ʒ˾þ| þɫۺһ| ˾þۺij| ձþþվ| ŮHҳþþ| Ʒþþþþþ| ƷžžþþƷŮͬŷպۺ | þ99Ļþ| ũ帾ŮëƬƷþ| ŷ޾Ʒ˾þԻӰƬ | 91ƷѾþþþþþþ| þӰԺҹƬ| ޵һƷƷþ| þùƷ| ɫۺϾþ88ɫۺ | 97Ʒ˾þþô߽97| 69ۺϾþþƷ| þþþ| þþþƷ鶹| Ʒþþþþ| һɫþۺϺݺ| 99þó18վ| ŷһþ| ۿƷþ| þùƷ| ҹþƷþþþ|