??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品在线电影,极品视频在线,欧美亚洲综合网http://www.aygfsteel.com/lukewange-hit1983/category/34539.htmlpresentzh-cnTue, 11 Nov 2008 02:52:02 GMTTue, 11 Nov 2008 02:52:02 GMT60j2me 联网技术分析ȝhttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/11/04/238629.htmlLukeWLukeWTue, 04 Nov 2008 08:22:00 GMThttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/11/04/238629.htmlhttp://www.aygfsteel.com/lukewange-hit1983/comments/238629.htmlhttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/11/04/238629.html#Feedback0http://www.aygfsteel.com/lukewange-hit1983/comments/commentRss/238629.htmlhttp://www.aygfsteel.com/lukewange-hit1983/services/trackbacks/238629.html基本?

Generic Connections

In the CLDC Generic Connection framework, all connections are created using the open static method from the Connector class. If successful, this method returns an object that implements one of the generic connection interfaces. Figure 1 shows how these interfaces form an is-a hierarchy. The Connection interface is the base interface such that StreamConnectionNotifier is a Connection and InputConnection is a Connection too.

fig1.gif
Figure 1: Connection interface hierarchy
  • The Connection interface is the most basic connection type. It can only be opened and closed.
  • The InputConnection interface represents a device from which data can be read. Its openInputStream method returns an input stream for the connection.
  • The OuputConnection interface represents a device to which data can be written. Its openOutputStream method returns an output stream for the connection.
  • The StreamConnection interface combines the input and output connections.
  • The ContentConnection is a subinterface of StreamConnection. It provides access to some of the basic meta data information provided by HTTP connections.
  • The StreamConnectionNotified waits for a connection to be established. It returns a StreamConnection on which a communication link has ben established.
  • The DatagramConnection represents a datagram endpoint.

The open method of the Connector class has the following syntax, where the String parameter has the format "protocol:address;parameters".

Connector.open(String);

Here are a few examples:

HTTP Connection

Connector.open("http://java.sun.com/developer");

Datagram Connection

Connector.open("datagram://address:port#");

Communicate with a Port

Connector.open("comm:0;baudrate=9600');

Open Files

Connector.open("file:/myFile.txt");


The HttpConnection Interface:

The HTTP protocol is a request-response application protocol in which the parameters of the request must be set before the request is sent. The connection could be in one of the three following states:
  • Setup: No connection yet
  • Connected: Connection has been made, the request has been sent, and some response is expected
  • Closed: Connection is closed

In the setup state the following methods can be invoked:

  • setRequestMethod
  • setRequestProperty

For example, suppose you have this connection:

HttpConnection c = (HttpConnection)
Connector.open(
"http://java.sun.com/developer");

Then, you can set the request method to be of type POST as follows:

c.setRequestMethod(HttpConnection.POST);

And likewise, you can set some of the HTTP properties. For example, you can set the User-Agent as follows:

c.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");

If there is a method that requires data to be sent or received from the server, there is a state transition from Setup to Connected. Examples of methods that cause the transition include:

openInputStream
openOutputStream
openDataInputStream
openDataOutputStream
getLength
getType
getDate
getExpiration

And while the connection is open, some of these methods that may be invoked:

getURL
getProtocol
getHost
getPort


------------------------------------------------------------
要注意的问题:
开发中遇到个很头疼的问? 与服务器通信write()数据时报java.io.IOException: Couldn't write to socket.
但是服务器抓不到M? 一开始怀疑是q徏立连接出的问? 实际上服务器抓不到包也有可能是流在没有close的时候就已经报错?
?
conn.open("url");
out = conn.openDataOutputStream();//此时进行与服务器的三次握手;
                                  //但是如果在out.close()之前出现异常服务器是抓不CQ何包?br /> out.write(byte[] bb);

关于q个的解释应该是的~冲机制.
所以正的写法应该是捕捉到异常之后在catch块中把流close?strong>.
服务器端开发h员一般会说收不到包所以连接有问题,会把责Q推给客户?抓住q个证据在跟服务器端的同事扯皮时处于有利的位置,嘎嘎.
q有是要多做小实验, 注意代码要规范严?

发现的几个问?

1. java.io.IOException: Couldn't write to socket

2. java.io.IOException: Couldn't read from socket

CMNET联网Ҏ:

CMWAP联网Ҏ:

Ud资费늚处理:

一个通用的HTTPq接装:



LukeW 2008-11-04 16:22 发表评论
]]>
HTTP协议中的Tranfer-EncodingQchunked~码解析http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230952.htmlLukeWLukeWWed, 24 Sep 2008 10:03:00 GMThttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230952.htmlhttp://www.aygfsteel.com/lukewange-hit1983/comments/230952.htmlhttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230952.html#Feedback0http://www.aygfsteel.com/lukewange-hit1983/comments/commentRss/230952.htmlhttp://www.aygfsteel.com/lukewange-hit1983/services/trackbacks/230952.html     通常情况下,Transfer-Encoding域的值应当ؓchunked,表明采用chunked~码方式来进行报文体的传输。chunked~码是HTTP/1.1 RFC里定义的一U编码方式,因此所有的HTTP/1.1应用都应当支持此方式?br />     chunked~码的基本方法是大块数据分解成多块数据,每块都可以自指定长度Q其具体格式如下QBNF文法Q?
    Chunked-Body   = *chunk            //0臛_个chunk
                     last-chunk         //最后一个chunk
                     trailer            //N
                     CRLF               //l束标记W?br />
   chunk          = chunk-size [ chunk-extension ] CRLF  
                        chunk-data CRLF
   chunk-size     = 1*HEX
   last-chunk     = 1*("0") [ chunk-extension ] CRLF

   chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
   chunk-ext-name = token
   chunk-ext-val  = token | quoted-string
   chunk-data     = chunk-size(OCTET)
   trailer        = *(entity-header CRLF)     
   
    解释Q?br />     Chunked-Body表示l过chunked~码后的报文体。报文体可以分ؓchunk, last-chunkQtrailer和结束符四部分。chunk的数量在报文体中最可以ؓ0Q无上限Q每个chunk的长度是自指定的Q即Qv始的? 据必然是16q制数字的字W串Q代表后面chunk-data的长度(字节敎ͼ。这?6q制的字W串W一个字W如果是“0”Q则表示chunk- size?Q该chunk为last-chunk,无chunk-data部分。可选的chunk-extension由通信双方自行定Q如果接收? 不理解它的意义,可以忽略?br />     trailer是附加的在尾部的额外头域Q通常包含一些元数据Qmetadata, meta means "about information"Q,q些头域可以在解码后附加在现有头域之后?br />     实例分析Q?br />     下面分析用ethereal抓包使用Firefox与某|站通信的结果(从头域结束符后开始)Q?br /> Address  0..........................  f
000c0                                31
000d0    66 66 63 0d 0a ...............   // ASCII?1ffc"r"n, chunk-data数据起始地址?00d5
         很明显,“1ffc”为第一个chunk的chunk-size,转换为int?188.׃1ffc后马上就?br />          CRLF,因此没有chunk-extension.chunk-data的v始地址?00d5, 计算可知下一块chunk的v?br />          地址?00d5+1ffc + 2=020d3,如下Q?br /> 020d0    .. 0d 0a 31 66 66 63 0d 0a .... // ASCII?"r"n1ffc"r"n
         前一?d0a是上一个chunk的结束标记符Q后一?d0a则是chunk-size和chunk-data的分隔符?br />          此块chunk的长度同样ؓ8188, 依次cLQ直到最后一?br /> 100e0                          0d 0a 31
100f0    65 61 39 0d 0a......            //ASII码:"r"n"1ea9"r"n
         此块长度?x1ea9 = 7849, 下一块v始ؓ100f5 + 1ea9 + 2 = 11fa0,如下Q?br /> 100a0    30 0d 0a 0d 0a                  //ASCII码:0"r"n"r"n
         “0”说明当前chunk为last-chunk, W一?d 0a为chunkl束W。第二个0d0a说明没有trailer部分Q整个Chunk-bodyl束?br />     解码程Q?br />     对chunked~码q行解码的目的是分块的chunk-data整合恢复成一块作为报文体Q同时记录此块体的长度?br />     RFC2616中附带的解码程如下Q?伪代码)
    length := 0         //长度计数器置0
    read chunk-size, chunk-extension (if any) and CRLF      //dchunk-size, chunk-extension
                                                          //和CRLF
    while(chunk-size > 0 )   {            //表明不是last-chunk
          read chunk-data and CRLF            //读chunk-size大小的chunk-data,skip CRLF
          append chunk-data to entity-body     //此块chunk-dataq加到entity-body?br />           read chunk-size and CRLF          //d新chunk的chunk-size ?CRLF
    }
    read entity-header      //entity-header的格式ؓname:valueCRLF,如果为空卛_有CRLF
    while Qentity-header not empty)   //卻I不是只有CRLF的空?br />     {
       append entity-header to existing header fields
       read entity-header
    }
    Content-Length:=length      //整个解码流E结束后计算得到的新报文体length
                                 //作ؓContent-Length域的值写入报文中
    Remove "chunked" from Transfer-Encoding  //同时从Transfer-Encoding中域值去除chunkedq个标记
    length最后的值实际ؓ所有chunk的chunk-size之和Q在上面的抓包实例中Q一共有八块chunk-size?x1ffc(8188)的chunk,剩下一块ؓ0x1ea9(7849),加v来一?3353字节?br />     注:对于上面例子中前几个chunk的大都?188,可能是因?"1ffc" 4字节Q?"r"n"2字节Q加上块一?"r"n"2字节一?字节Q因此一个chunk整体?196,正好可能是发送端一ơTCP发送的~存大小?

LukeW 2008-09-24 18:03 发表评论
]]>
HTTP Connectionshttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230951.htmlLukeWLukeWWed, 24 Sep 2008 10:01:00 GMThttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230951.htmlhttp://www.aygfsteel.com/lukewange-hit1983/comments/230951.htmlhttp://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230951.html#Feedback1http://www.aygfsteel.com/lukewange-hit1983/comments/commentRss/230951.htmlhttp://www.aygfsteel.com/lukewange-hit1983/services/trackbacks/230951.htmlHTTP Connections
最q初涉网l编E,分析了下HTTP协议Q下面ؓW一关于HTTPq接控制斚w的学习日志,主要参考RFC2616Q肯定有疏漏之处Q还望指出?br /> HTTP协议是位于传输层之上的应用层协议Q其|络层基通常是TCP协议。TCP协议是面向连接和的Q因此连接的状态和控制对于HTTP协议而言相当重要。同ӞHTTP是基于报文的Q因此如何确定报文长度也是协议中比较重要的一炏V?br /> Persistent Connections持久q接
目的
    在用持久连接前QHTTP协议规定取每个URL资源都需要用单独的一个TCPq接Q这增加了HTTP服务端的负蝲Q引起互联网拥塞。例如内嵌图片以及其他类似数据的使用要求一个客L在很短时间内向同一个服务端发v多个h?br /> 使用持久q接的优?
减少TCPq接数量
在一个连接上实现HTTPh和应{的水Q即允许客户端发出多个请求,而不必在接收到前一h的应{后才发Z一hQ极大减时间消?br /> 后箋h延迟减少Q无需再在TCP握手上耗时
可以更加优雅地实现HTTP协议Q由于持l连接的存在无需报告错误后无需关闭q接Q因此客L可用最新的协议Ҏ发求,如果接收到表C错误的应答Q则换用更旧的语义?br />
M描述
HTTP/1.1和之前版本的显著区别是HTTP/1.1默认使用持久q接。即Q除非服务端在应{中明确指出Q客L应当假定服务端会l持一个持久连接,即从服务端收到的应{是报告错误?br /> ? 久连接对关闭TCPq接的行为提供信号量机制支持。这个信号量是在HTTP头中的Connection域设|,注意Client向Proxy发出h时该 域可能被Proxy-Connection域替换。一旦close信号被表明,客户端绝不能再通过该连接发送更多的h?br />
协商(Negotiation)
HTTP/1.1 服务端可以假定HTTP/1.1客户端会l持持久q接Q除非请求中Connection域的值是"close".同样的,如果服务端打在送出应答后立? 关闭q接Q它应当在应{中包含同样的Connection域?TCPq接关闭是双向的,此时TCPq入半关闭状?
同样的,HTTP/1.1客户端可以期望连接是持久的,除非如前所q收到表C接关闭的应答。当Ӟ也可以主动发Z个包含Connection:close的请求以表明l止q接?br /> 无论客户端还是服务端发出的报文包含Connection:closeQ则该请求均接上的最后一个请?服务端发出此应答后关闭,因此不可能接收更多的h)
报文传输长度
    Z证持久性,q接上的报文都必L一个自定义的报文传输长?否则必须通过q接的关闭表C报文结束,因ؓTCPq接是面向流?Q确定的规则按优先由高C排列如下Q?br />     报文传输长度指报文中出现的报文体的长?卻I不包括头长度Q因为报文头的结束可通过q箋两个CRLF定Q?br /> 1.Ml不能包含报文体(?xx,204,304)的应{消息L以头域后的第一个空行结?无视头中所有的entitycd域的讄Q包括Content-Length域?br /> 2.Transfer-Encoding域出玎ͼ其gؓ?identify"以外的其他|则用"chunked"传输~码方式定传输长度Q具体方式留待下分析?br /> 3.Content- Length域出玎ͼ且Transfer-Encoding域未出现(出现则忽略Content-Length?。Content-Length域的? 为十q制数的字节序,如Content-LengthQ?234Q则1???是分别作Z个octet传输的,因此需要atoi转换成数倹{?br /> 4.如果报文使用?multipart/byteranges"的媒体类型,且没对传输长度做前面的指明,则这U自分割的媒体类型定义了传输长度。具体参见Range头域的说明?br /> 5.服务端关闭连?此方法不可用于客L发出的请求报文,因ؓ客户端关闭连接则使得服务端无法发送应{?.
    Z持和HTTP/1.0的兼Ҏ? 包含报文体的HTTP/1.1h必须包含合法的Content-Length头域,除非明确知道服务端是HTTP/1.1兼容?如果h包含消息? 而没有Content-Length?那么如果服务端无法确定消息长度时,它会q回400(无效h),或者坚持获取合法Content-Length 而返?11(要求包含长度).

    所有接收实体的HTTP/1.1应用E序必须接受"chunked"传输~码, q样允许当报文长度无法预先确定时可以q用此机制获取报文长?
    报文不能同时包含Content-Length头域和非"identity" Transfer-Encoding.如果出现? Content-Length域必被忽略.
    当Content-Length域在允许报文体的报文中存在时, 其域值必M格等于消息体中的8比特字节.HTTP/1.1 user agent 必须在接收ƈ到一个错误的长度时提醒用?
    以上Ҏ中,最常见的还是用Content-Length域表C报文体长度QTransfer-Encoding需要按格式解码才能q原出发送编码前的报文?br />

    支持持久q接的客L可以水发送请求,服务端必L发送的序发送应{?br />     假定持久q接和连接后卛_水的客L应当做好在第一ơ流水失败后重新试此连接。在q样的尝试中Q在定q接是持久的之前Q客L不能再流水?br />     客户端同样必d备好在服务端送回所有相兛_{前关闭连接时重发h?br />     不应水non-idempotentҎ

Proxy Servers
    对于代理服务端而言Q正实现Connection头域指定的属性尤为重要?br />     代理服务端必d立通告它的客户端和q接的原始服务端持久q接的属性,每个持久q接讄仅针对一个传输连接?br />    
实践考量
    时|服务端通常会ؓ每个q接l护一个定时器Q一旦某个连接不z跃过一定时间|服务端会关闭此连接。考虑C个客L可能通过代理服务端发出更多连接,代理服务端通常会将时D|得更高?br />     q有一些关于从异步关闭中恢复的讨论?br />
报文传输要求
    使用TCP控制来解决服务端时负载过高问题,而不是简单的依赖客户端重q而关闭连接?br />     监视q接情况以获取错误状态消?br />     关于使用100(l箋)状态码
    100状态码用于客户端发送请求体之前试是否可以发送该hQ对于ProxyQ有以下要求Q?br /> 1.如果代理服务端接收到包含Expect头域gؓ"100-continue"的请? 而不明确知道下一x务不支持HTTP/1.1以上版本, 则它必须转发q个h, 包括Expect头域.
2.如果代理知道下一x务端为HTTP/1.0或者更低版? 则它不能转发此请? 且必M407应答客户?
3.如果明确知道发出h的客L版本为HTTP/1.0或者更低,则代理服务端l不能{?00应答,q条规则凌驾于{?xx应答的一般准?

Connection头域说明
BNF文法Q?br />     Connection = "Connection" ":" 1#(connection-token)
    connection-token  = token
   
Connection头域中的token用于指定对于特定q接有意义的选项Q因此proxy在{发前要扫描此域,从头中去除和token同名的域。例如Connection:Range,则要LRange域?br />     HTTP/1.1定义了closeq个tokenQ发送者用此token表示在完成这个报文所属请?应答的收发后q接关闭?br />



LukeW 2008-09-24 18:01 发表评论
]]>
关于断点l传的调?/title><link>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230950.html</link><dc:creator>LukeW</dc:creator><author>LukeW</author><pubDate>Wed, 24 Sep 2008 09:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230950.html</guid><wfw:comment>http://www.aygfsteel.com/lukewange-hit1983/comments/230950.html</wfw:comment><comments>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lukewange-hit1983/comments/commentRss/230950.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lukewange-hit1983/services/trackbacks/230950.html</trackback:ping><description><![CDATA[一些讨?<br /> http://topic.csdn.net/t/20061214/22/5231907.html <img src ="http://www.aygfsteel.com/lukewange-hit1983/aggbug/230950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lukewange-hit1983/" target="_blank">LukeW</a> 2008-09-24 17:57 <a href="http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/24/230950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP头信?/title><link>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/10/228111.html</link><dc:creator>LukeW</dc:creator><author>LukeW</author><pubDate>Wed, 10 Sep 2008 04:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/10/228111.html</guid><wfw:comment>http://www.aygfsteel.com/lukewange-hit1983/comments/228111.html</wfw:comment><comments>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/10/228111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lukewange-hit1983/comments/commentRss/228111.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lukewange-hit1983/services/trackbacks/228111.html</trackback:ping><description><![CDATA[<p>HTTPQHyperTextTransferProtocolQ是文本传输协议的~写Q它用于传送WWW方式的数据,关于HTTP 协议的详l内容请? 考RFC2616。HTTP协议采用了请?响应模型。客L向服务器发送一个请求,h头包含请求的Ҏ、URI、协议版本、以及包含请求修饰符、客? 信息和内容的cM于MIME的消息结构。服务器以一个状态行作ؓ响应Q相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息? 及可能的实体内容?<br /> <br /> 通常HTTP消息包括客户机向服务器的h消息和服务器向客h的响应消息。这两种cd的消息由一个v始行Q? 一个或者多个头域,一个只是头域结束的I和可 选的消息体组成?span style="color: #ff9658;">HTTP的头域包括通用_h_响应头和实体头四个部?/span>。每个头域由一个域名,冒号Q?Q和域g部分l成。域名是大小写无关的Q域 值前可以dM数量的空格符Q头域可以被扩展为多行,在每行开始处Q用至一个空格或制表W?<br /> <br /> <strong><span style="font-size: 24pt;"><span style="font-size: 18pt;">通用头域</span> </span><br /> </strong> 通用?域包含请求和响应消息都支持的头域Q通用头域包含Cache-Control? Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此? 展,如果存在不支持的通用头域Q一般将会作为实体头域处理。下面简单介l几个在UPnP消息中用的通用头域?<br /> <br /> <br /> <strong>  Cache-Control头域</strong> <br /> Cache -Control指定h和响应遵循的~存机制。在h消息或响应消息中讄 Cache-Controlq不会修改另一个消息处理过E中的缓存处理过E。请求时的缓存指令包括no-cache、no-store、max-age? max-stale、min-fresh、only-if-cachedQ响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如 下: <br /> <br /> Public指示响应可被M~存区缓存?<br /> Private指示对于单个用户的整个或部分响应消息Q不能被׃n~存处理。这允许服务器仅仅描q当用户的部分响应消息,此响应消息对于其他用Lh无效?<br /> no-cache指示h或响应消息不能缓?<br /> no-store用于防止重要的信息被无意的发布。在h消息中发送将使得h和响应消息都不用缓存?<br /> max-age指示客户机可以接收生存期不大于指定时_以秒为单位)的响应?<br /> min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应?<br /> max-stale指示客户机可以接收超时期间的响应消息。如果指定max-stale消息的|那么客户机可以接收超时期指定g内的响应消息?<br /> <br /> <br /> <strong>  Date头域</strong> <br /> Date头域表示消息发送的旉Q时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表CZ界标准时Q换成本地旉Q需要知道用h在的时区?<br /> <br /> <strong>  Pragma头域 <br /> </strong>  Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同?<br /> <br /> <strong><span style="font-size: 18pt;">h消息</span></strong> <br /> h消息的第一行ؓ下面的格式: <br /> MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示对于Request-URI完成的方法,q个字段是大写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE? TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GETҎ取回由Request-URI标识的信息? HEADҎ也是取回由Request-URI标识的信息,只是可以在响应时Q不q回消息体。POSTҎ可以h服务器接收包含在h中的实体信息Q可 以用于提交表单,向新ȝ、BBS、邮件群l和数据库发送消息?<br /> <br /> SP表示I格。Request-URI遵@URI格式Q在此字D? 为星 P*Q时Q说明请求ƈ不用于某个特定的资源地址Q而是用于服务器本w。HTTP- Version表示支持的HTTP版本Q例如ؓHTTP/1.1。CRLF表示换行回RW。请求头域允许客L向服务器传递关于请求或者关于客h的附? 信息。请求头域可能包含下列字DAccept、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。对h头域的扩展要求通讯双方都支持,如果存在不支持的? 求头域,一般将会作为实体头域处理?<br /> <br /> <strong>  典型的请求消息:</strong> <br /> GET http://download.microtool.de:80/somedata.exe <br /> Host: download.microtool.de <br /> Accept:*/* <br /> Pragma: no-cache <br /> Cache-Control: no-cache <br /> Referer: http://download.microtool.de/ <br /> User-Agent:Mozilla/4.04[en](Win95;I;Nav) <br /> Range:bytes=554554- <br /> <br /> 上例W一行表CHTTP客户端(可能是浏览器、下载程序)通过GETҎ获得指定URL下的文g。棕色的部分表示h头域的信息,l色的部分表C通用头部分?<br /> <br /> <strong>  Host头域 <br /> </strong>  Host头域指定h资源的IntenetL和端口号Q必表C求url的原始服务器或网关的位置。HTTP/1.1h必须包含L头域Q否则系l会?00状态码q回?<br /> <br /> <strong>  Referer头域</strong> <br /> Referer 头域允许客户端指定请求uri的源资源地址Q这可以允许服务器生成回退链表Q可用来登陆、优化cache{。他也允许废除的或错误的q接׃l护的目的被 q踪。如果请求的uri没有自己的uri地址QReferer不能被发送。如果指定的是部分uri地址Q则此地址应该是一个相对地址?<br /> <br /> <strong>  Range头域</strong> <br /> Range头域可以h实体的一个或者多个子范围。例如, <br /> 表示?00个字节:bytes=0-499 <br /> 表示W二?00字节Qbytes=500-999 <br /> 表示最?00个字节:bytes=-500 <br /> 表示500字节以后的范_bytes=500- <br /> W一个和最后一个字节:bytes=0-0,-1 <br /> 同时指定几个范围Qbytes=500-600,601-999 <br /> <br /> 但是服务器可以忽略此h_如果无条件GET包含Rangeh_响应会以状态码206QPartialContentQ返回而不是以200 QOKQ?<br /> <br /> <strong>  User-Agent头域</strong> <br /> User-Agent头域的内容包含发求的用户信息?<br /> <br /> <strong><span style="font-size: 18pt;">响应消息</span></strong> <br /> 响应消息的第一行ؓ下面的格式: <br /> HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF <br /> <br /> HTTP -Version表示支持的HTTP版本Q例如ؓHTTP/1.1。Status- Code是一个三个数字的l果代码。Reason-PhraselStatus-Code提供一个简单的文本描述。Status-Code主要用于机器? 动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的cdQ后两个数字没有分类的作用。第一个数字可 能取5个不同的| <br /> <br /> 1xx:信息响应c,表示接收到请求ƈ且l处?<br /> 2xx:处理成功响应c,表示动作被成功接收、理解和接受 <br /> 3xx:重定向响应类Qؓ了完成指定的动作Q必L受进一步处?<br /> 4xx:客户端错误,客户h包含语法错误或者是不能正确执行 <br /> 5xx:服务端错误,服务器不能正执行一个正的h <br /> <br /> 响应头域允许服务器传递不能放在状态行的附加信息,q些域主要描q服务器的信息和 Request-URIq一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应? 域,一般将会作为实体头域处理?<br /> <br /> 典型的响应消息: <br /> <br /> HTTP/1.0200OK <br /> Date:Mon,31Dec200104:25:57GMT <br /> Server:Apache/1.3.14(Unix) <br /> Content-type:text/html <br /> Last-modified:Tue,17Apr200106:46:28GMT <br /> Etag:"a030f020ac7c01:1e9f" <br /> Content-length:39725426 <br /> Content-range:bytes554554-40279979/40279980 <br /> <br /> 上例W一行表CHTTP服务端响应一个GETҎ。棕色的部分表示响应头域的信息,l色的部分表C通用头部分,U色的部分表C实体头域的信息?<br /> <br /> <strong>  Location响应?/strong> <br /> Location响应头用于重定向接收者到一个新URI地址?<br /> <br /> <strong>  Server响应?/strong> <br /> Server响应头包含处理请求的原始服务器的软g信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序?<br /> <br /> <strong>  实体</strong> <br /> h消息和响应消息都可以包含实体信息Q实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括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允许客户端定义新的实? _但是q些域可能无法未接受方识别。实体可以是一个经q编码的字节,它的~码方式由Content-Encoding或Content-Type? 义,它的长度由Content-Length或Content-Range定义?<br /> <br /> <strong>  Content-Type实体?/strong> <br /> Content-Type实体头用于向接收ҎC实体的介质cdQ指定HEADҎ送到接收方的实体介质cdQ或GETҎ发送的h介质cd Content-Range实体?<br /> Content-Range实体头用于指定整个实体中的一部分的插入位|,他也指示了整个实体的长度。在服务器向客户q回一个部分响应,它必Lq响应覆盖的范围和整个实体长度。一般格式: <br /> Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth </p> <p><br /> 例如Q传送头500个字节次字段的Ş式:Content-Range:bytes0- 499/1234如果一个http消息包含此节Q例如,对范围请求的响应或对一pd范围的重叠请求)QContent-Range表示传送的范围Q? Content-Length表示实际传送的字节数?<br /> <br /> <strong>  Last-modified实体?/strong> <br /> </p> <table align="center" border="1" cellpadding="0" cellspacing="0" width="600"> <tbody> <tr> <td>应答?</td> <td>说明 </td> </tr> <tr> <td>Allow </td> <td>服务器支持哪些请求方法(如GET、POST{)?/td> </tr> <tr> <td>Content-Encoding</td> <td>? 档的~码QEncodeQ方法。只有在解码之后才可以得到Content-Type头指定的内容cd。利用gzip压羃文档能够显著地减HTML文档? 下蝲旉。Java的GZIPOutputStream可以很方便地q行gzip压羃Q但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding_即request.getHeader("Accept- Encoding")Q检查浏览器是否支持gzipQؓ支持gzip的浏览器q回lgzip压羃的HTML面Qؓ其他览器返回普通页面?/td> </tr> <tr> <td>Content-Length </td> <td>? C内定w度。只有当览器用持久HTTPq接时才需要这个数据。如果你惌利用持久q接的优势,可以把输出文档写? ByteArrayOutputStramQ完成后查看其大,然后把该值放入Content-Length_最后通过 byteArrayStream.writeTo(response.getOutputStream()发送内宏V?/td> </tr> <tr> <td>Content-Type</td> <td>表示后面的文档属于什么MIMEcd。Servlet默认为text/plainQ但通常需要显式地指定为text/html。由于经常要讄Content-TypeQ因此HttpServletResponse提供了一个专用的ҎsetContentTyep?<br /> </td> </tr> <tr> <td>Date </td> <td>当前的GMT旉。你可以用setDateHeader来设|这个头以避免{换时间格式的ȝ?</td> </tr> <tr> <td>Expires </td> <td>应该在什么时候认为文档已l过期,从而不再缓存它Q?/td> </tr> <tr> <td>Last-Modified</td> <td>? 档的最后改动时间。客户可以通过If-Modified-Sinceh头提供一个日期,该请求将被视Z个条件GETQ只有改动时间迟于指定时间的文档 才会q回Q否则返回一?04QNot ModifiedQ状态。Last-Modified也可用setDateHeaderҎ来设|?/td> </tr> <tr> <td>Location </td> <td>表示客户应当到哪里去提取文档。Location通常不是直接讄的,而是通过HttpServletResponse的sendRedirectҎQ该Ҏ同时讄状态代码ؓ302?</td> </tr> <tr> <td>Refresh</td> <td>表示览器应该在多少旉之后h文档Q以U计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器d指定的页面?<br /> ? 意这U功能通常是通过讄HTML面HEAD区的QMETA HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path"Q实玎ͼq是因ؓQ自动刷新或重定向对于那些不能用CGI或Servlet? HTML~写者十分重要。但是,对于Servlet来说Q直接设|Refresh头更加方ѝ?<br /> <br /> 注意Refresh的意义是“NU之? h本页面或讉K指定面”Q而不?#8220;每隔NU刷新本面或访问指定页?#8221;。因此,q箋h要求每次都发送一个Refresh_而发?04状态代码则 可以L览器l刷斎ͼ不管是用Refresh头还是<META HTTP-EQUIV="Refresh" ...Q?<br /> <br /> 注意Refresh头不属于HTTP 1.1正式规范的一部分Q而是一个扩展,但Netscape和IE都支持它?/td> </tr> <tr> <td>Server</td> <td>服务器名字。Servlet一般不讄q个|而是由Web服务器自p|?/td> </tr> <tr> <td>Set-Cookie </td> <td>讄和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...)Q而是应用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie讄的讨论?/td> </tr> <tr> <td>WWW-Authenticate</td> <td>? 户应该在Authorization头中提供什么类型的授权信息Q在包含401QUnauthorizedQ状态行的应{中q个头是必需的。例如, response.setHeader("WWW-Authenticate", "BASIC realm=Q?executivesQ?")?<br /> 注意Servlet一般不q行q方面的处理Q而是让Web服务器的专门机制来控制受密码保护面的访问(例如.htaccessQ?/td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/lukewange-hit1983/aggbug/228111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lukewange-hit1983/" target="_blank">LukeW</a> 2008-09-10 12:05 <a href="http://www.aygfsteel.com/lukewange-hit1983/archive/2008/09/10/228111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTPh头信?/title><link>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/08/20/223246.html</link><dc:creator>LukeW</dc:creator><author>LukeW</author><pubDate>Wed, 20 Aug 2008 05:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/08/20/223246.html</guid><wfw:comment>http://www.aygfsteel.com/lukewange-hit1983/comments/223246.html</wfw:comment><comments>http://www.aygfsteel.com/lukewange-hit1983/archive/2008/08/20/223246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lukewange-hit1983/comments/commentRss/223246.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lukewange-hit1983/services/trackbacks/223246.html</trackback:ping><description><![CDATA[HTTP客户E序Q例如浏览器Q,向服务器发送请求的时候必L明请求类型(一般是GET或者POSTQ。如有必要,客户E序q可以选择发送其他的h 头。大多数h头ƈ不是必需的,但Content-Length除外。对于POSTh来说Content-Length必须出现?br /> <br /> 下面是一些最常见的请求头Q?br /> <br /> AcceptQ浏览器可接受的MIMEcd?br /> Accept-CharsetQ浏览器可接受的字符集?br /> Accept-EncodingQ浏览器能够q行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器q回lgzip~码的HTML面。许多情形下q可以减??0倍的下蝲旉?br /> Accept-LanguageQ浏览器所希望的语aU类Q当服务器能够提供一U以上的语言版本时要用到?br /> AuthorizationQ授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中?br /> ConnectionQ? 表示是否需要持久连接。如果Servlet看到q里的gؓ“Keep-Alive”Q或者看到请求用的是HTTP 1.1QHTTP 1.1默认q行持久q接Q,它就可以利用持久q接的优点,当页面包含多个元素时Q例如AppletQ图片)Q显著地减少下蝲所需要的旉。要实现q一点, Servlet需要在应答中发送一个Content-Length_最单的实现Ҏ是:先把内容写入ByteArrayOutputStreamQ然 后在正式写出内容之前计算它的大小?br /> Content-LengthQ表C求消息正文的长度?br /> CookieQ这是最重要的请求头信息之一Q参见后面《Cookie处理》一章中的讨论?br /> FromQ请求发送者的email地址Q由一些特D的Web客户E序使用Q浏览器不会用到它?br /> HostQ初始URL中的L和端口?br /> If-Modified-SinceQ只有当所h的内容在指定的日期之后又l过修改才返回它Q否则返?04“Not Modified”应答?br /> PragmaQ指?#8220;no-cache”DC服务器必须q回一个刷新后的文档,即它是代理服务器而且已经有了面的本地拷贝?br /> <div style="overflow: hidden; visibility: hidden; width: 1px; color: rgb(244, 251, 255); height: 1px;">JAVA手机|[www.cnjm.net]</div> <p>RefererQ包含一个URLQ用户从该URL代表的页面出发访问当前请求的面?br /> User-AgentQ浏览器cdQ如果Servletq回的内容与览器类型有兛_该值非常有用?br /> UA-PixelsQUA-ColorQUA-OSQUA-CPUQ由某些版本的IE览器所发送的非标准的h_表示屏幕大小、颜色深度、操作系l和CPUcd?br /> 有关HTTP头完整、详l的说明Q请参见<a target="_blank">http://www.w3.org/Protocols/</a> 的HTTP规范?br /> </p> <p>java dҎ</p> <p>  Enumeration headerNames = request.getHeaderNames();<br />          while(headerNames.hasMoreElements()) {<br />              String headerName = (String)headerNames.nextElement();<br />              out.println("<p>"+headerName+"  "+request.getHeader(headerName)+"</p>");<br />          } <br /> </p> <img src ="http://www.aygfsteel.com/lukewange-hit1983/aggbug/223246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lukewange-hit1983/" target="_blank">LukeW</a> 2008-08-20 13:58 <a href="http://www.aygfsteel.com/lukewange-hit1983/archive/2008/08/20/223246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ҳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">°</a>| <a href="http://" target="_blank">ɣֲ</a>| <a href="http://" target="_blank">Ͼ</a>| <a href="http://" target="_blank">ѧ</a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank">Ѯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ع</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӱ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>