??xml version="1.0" encoding="utf-8" standalone="yes"?>
7.1 状态代码概q?/p>
Web服务器响应浏览器或其他客L序的hӞ其应{一般由以下几个部分l成Q一个状态行Q几个应{头Q一个空行,内容文档。下面是一个最单的应答Q?br />HTTP/1.1 200 OK
Content-Type: text/plain
Hello World
JAVA手机|[www.cnjm.net]
状态行包含HTTP版本、状态代码、与状态代码对应的短说明信息。在大多数情况下Q除了Content-Type之外的所有应{头都是可选的。但 Content-Type是必需的,它描q的是后面文档的MIMEcd。虽然大多数应答都包含一个文档,但也有一些不包含Q例如对HEADh的应{永q不会附带文档。有许多状态代码实际上用来标识一ơ失败的hQ这些应{也不包含文档(或只包含一个简短的错误信息说明Q?br /> Servlet可以利用状态代码来实现许多功能。例如,可以把用户重定向到另一个网站;可以指示出后面的文档是图片、PDF文g或HTML文gQ可以告诉用户必L供密码才能访问文档;{等。这一部分我们具体讨论各U状态代码的含义以及利用q些代码可以做些什么?br /> 7.2 讄状态代?br /> 如前所qͼHTTP应答状态行包含HTTP版本、状态代码和对应的状态信息。由于状态信息直接和状态代码相养I而HTTP版本又由服务器确定,因此需要Servlet讄的只有一个状态代码?br /> Servlet讄状态代码一般用HttpServletResponse的setStatusҎ。setStatusҎ的参数是一个整敎ͼ即状态代码)Q不qؓ了得代码具有更好的可读性,可以用HttpServletResponse中定义的帔R来避免直接用整数。这些常量根据HTTP 1.1中的标准状态信息命名,所有的名字都加上了SC前缀QStatus Code的羃写)q大写,同时把空D{换成了下划线。也是_与状态代?04对应的状态信息是“Not Found”,则HttpServletResponse中的对应帔R名字为SC_NOT_FOUND。但有两个例外:和状态代?02对应的常量根?HTTP 1.0命名Q?07没有对应的常量?br /> 讄状态代码ƈ非L意味着不要再返回文档。例如,虽然大多数服务器q回404应答时会输出单的“File Not Found”信息,但Servlet也可以定制这个应{。不q,定制应答时应当在通过PrintWriter发送Q何内容之前先调用 response.setStatus?br /> 虽然讄状态代码一般用的是response.setStauts(int)ҎQ但Z单v见,HttpServletResponseZU常见的情Ş提供了专用方法:sendErrorҎ生成一?04应答Q同时生成一个简短的HTML错误信息文档QsendRedirectҎ生成一?302应答Q同时在Location头中指示新文档的URL?br /> 7.3 HTTP 1.1状态代码及其含?br /> 下表昄了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义?br /> 应当谨慎C用那些只有HTTP 1.1支持的状态代码,因ؓ许多览器还只能够支持HTTP 1.0。如果你使用了HTTP 1.1Ҏ的状态代码,最好能够检查一下请求的HTTP版本P通过HttpServletRequest的getProtocolҎQ?状态代码状态信?含义
JAVA手机|[www.cnjm.net]
100 Continue 初始的请求已l接受,客户应当l箋发送请求的其余部分。(HTTP 1.1斎ͼ
101 Switching Protocols 服务器将遵从客户的请求{换到另外一U协议(HTTP 1.1斎ͼ
200 OK 一切正常,对GET和POSTh的应{文档跟在后面。如果不用setStatus讄状态代码,Servlet默认使用202状态代码?br />201 Created 服务器已l创Z文档QLocation头给Z它的URL?br />202 Accepted 已经接受hQ但处理未完成?br />203 Non-Authoritative Information 文档已经正常地返回,但一些应{头可能不正,因ؓ使用的是文档的拷贝(HTTP 1.1斎ͼ?br />204 No Content 没有新文档,览器应该l显C原来的文档。如果用户定期地h面Q而Servlet可以定用户文档_斎ͼq个状态代码是很有用的?br />205 Reset Content 没有新的内容Q但览器应该重|它所昄的内宏V用来强制浏览器清除表单输入内容QHTTP 1.1斎ͼ?br />206 Partial Content 客户发送了一个带有Range头的GEThQ服务器完成了它QHTTP 1.1斎ͼ?br />300 Multiple Choices 客户h的文档可以在多个位置扑ֈQ这些位|已l在q回的文档内列出。如果服务器要提Z先选择Q则应该在Location应答头指明?br />301 Moved Permanently 客户h的文档在其他地方Q新的URL在Location头中l出Q浏览器应该自动地访问新的URL?br />302 Found cM?01Q但新的URL应该被视Z时性的替代Q而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,而HttpServletResponse中相应的帔R是SC_MOVED_TEMPORARILYQ而不?SC_FOUND?br />出现该状态代码时Q浏览器能够自动讉K新的URLQ因此它是一个很有用的状态代码。ؓ此,Servlet提供了一个专用的ҎQ即 sendRedirect。用response.sendRedirect(url)比用response.setStatus (response.SC_MOVED_TEMPORARILY)和response.setHeader("Location",url)更好。这是因为:
首先Q代码更加简z?br />W二Q用sendRedirectQServlet会自动构造一个包含新链接的页面(用于那些不能自动重定向的老式览器)?br />最后,sendRedirect能够处理相对URLQ自动把它们转换成绝对URL?br />注意q个状态代码有时候可以和301替换使用。例如,如果览器错误地hhttp://www.cnjm.net/resfetch/CyZ26ekjrPr6dlzL6fo_~userQ缺了后面的斜杠)Q有的服务器q回301Q有的则q回302?br />严格地说Q我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307?br />303 See Other cM?01/302Q不同之处在于,如果原来的请求是POSTQLocation头指定的重定向目标文档应该通过GET提取QHTTP 1.1斎ͼ?br />304 Not Modified 客户端有~冲的文档ƈ发出了一个条件性的hQ一般是提供If-Modified-Since头表C客户只x指定日期更新的文档)。服务器告诉客户Q原来缓冲的文档q可以l用?br />305 Use Proxy 客户h的文档应该通过Location头所指明的代理服务器提取QHTTP 1.1斎ͼ?br />307 Temporary Redirect ?02QFoundQ相同。许多浏览器会错误地响应302应答q行重定向,即原来的请求是POSTQ即使它实际上只能在POSTh的应{是303时才能重定向。由于这个原因,HTTP 1.1新增?07Q以便更加清除地区分几个状态代码:当出?03应答Ӟ览器可以跟随重定向的GET和POSThQ如果是307应答Q则览器只能跟随对GETh的重定向?br />注意QHttpServletResponse中没有ؓ该状态代码提供相应的帔R。(HTTP 1.1斎ͼ
400 Bad Request h出现语法错误?br />401 Unauthorized 客户试图未经授权讉K受密码保护的面。应{中会包含一个WWW-Authenticate_览器据此显C用户名?密码对话框,然后在填写合适的Authorization头后再次发出h?br />403 Forbidden 资源不可用。服务器理解客户的请求,但拒l处理它。通常׃服务器上文g或目录的权限讄D?br />404 Not Found 无法扑ֈ指定位置的资源。这也是一个常用的应答QHttpServletResponse专门提供了相应的ҎQsendError(message)?br />405 Method Not Allowed hҎQGET、POST、HEAD、DELETE、PUT、TRACE{)Ҏ定的资源不适用。(HTTP 1.1斎ͼ
406 Not Acceptable 指定的资源已l找刎ͼ但它的MIMEcd和客户在Accpet头中所指定的不兼容QHTTP 1.1斎ͼ?
JAVA手机|[www.cnjm.net]
407 Proxy Authentication Required cM?01Q表C客户必dl过代理服务器的授权。(HTTP 1.1斎ͼ
408 Request Timeout 在服务器许可的等待时间内Q客户一直没有发ZQ何请求。客户可以在以后重复同一h。(HTTP 1.1斎ͼ
409 Conflict 通常和PUTh有关。由于请求和资源的当前状态相冲突Q因此请求不能成功。(HTTP 1.1斎ͼ
JAVA手机|[www.cnjm.net]
410 Gone 所h的文档已l不再可用,而且服务器不知道应该重定向到哪一个地址。它?04的不同在于,q回407表示文档怹地离开了指定的位置Q?04表示׃未知的原因文档不可用。(HTTP 1.1斎ͼ
JAVA手机|[www.cnjm.net]
411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1斎ͼ
JAVA手机|[www.cnjm.net]
412 Precondition Failed h头中指定的一些前提条件失败(HTTP 1.1斎ͼ?br />413 Request Entity Too Large 目标文档的大超q服务器当前愿意处理的大。如果服务器认ؓ自己能够E后再处理该hQ则应该提供一个Retry-After_HTTP 1.1斎ͼ?
JAVA手机|[www.cnjm.net]
414 Request URI Too Long URI太长QHTTP 1.1斎ͼ?br />416 Requested Range Not Satisfiable 服务器不能满_户在h中指定的Range头。(HTTP 1.1斎ͼ
500 Internal Server Error 服务器遇C意料不到的情况,不能完成客户的请求?br />501 Not Implemented 服务器不支持实现h所需要的功能。例如,客户发出了一个服务器不支持的PUTh?br />502 Bad Gateway 服务器作为网x者代理时Qؓ了完成请求访问下一个服务器Q但该服务器q回了非法的应答?br />503 Service Unavailable 服务器由于维护或者负载过重未能应{。例如,Servlet可能在数据库q接池已满的情况下返?03。服务器q回503时可以提供一个Retry-After头?br />504 Gateway Timeout ׃Z理或|关的服务器使用Q表CZ能及时地从远E服务器获得应答。(HTTP 1.1斎ͼ
505 HTTP Version Not Supported 服务器不支持h中所指明的HTTP版本。(HTTP 1.1斎ͼ
7.4 实例Q访问多个搜索引?
JAVA手机|[www.cnjm.net]
下面q个例子用到了除200之外的另外两个常见状态代码:302?04?02通过sendRedirectҎ讄Q?04通过sendErrorҎ讄?br /> 在这个例子中Q首先出现的HTML表单用来选择搜烦引擎、搜索字W串、每|C的搜烦l果数量。表单提交后QServlet提取q三个变量,按照所选择的搜索引擎的要求构造出包含q些变量的URLQ然后把用户重定向到q个URL。如果用户不能正地选择搜烦引擎Q或者利用其他表单发送了一个不认识的搜索引擎名字,则返回一个提C搜索引擎找不到?04面?
JAVA手机|[www.cnjm.net]
SearchEngines.java
注意Q这个Servlet要用到后面给出的SearchSpecc,SearchSpec的功能是构造适合不同搜烦引擎的URL?br />package hall;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
public class SearchEngines extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// getParameter自动解码URL~码的查询字W串。由于我?br />// 要把查询字符串发送给另一个服务器Q因此再ơ?br />// URLEncoderq行URL~码
String searchString =
URLEncoder.encode(request.getParameter("searchString"));
String numResults =
request.getParameter("numResults");
String searchEngine =
JAVA手机|[www.cnjm.net]
request.getParameter("searchEngine");
SearchSpec[] commonSpecs = SearchSpec.getCommonSpecs();
JAVA手机|[www.cnjm.net]
for(int i=0; i<commonSpecs.length; i++) {
SearchSpec searchSpec = commonSpecs[i];
if (searchSpec.getName().equals(searchEngine)) {
String url =
response.encodeURL(searchSpec.makeURL(searchString,
numResults));
response.sendRedirect(url);
return;
}
}
response.sendError(response.SC_NOT_FOUND,
"No recognized search engine specified.");
}
public void doPost(HttpServletRequest request,
JAVA手机|[www.cnjm.net]
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
SearchSpec.java
package hall;
class SearchSpec {
private String name, baseURL, numResultsSuffix;
JAVA手机|[www.cnjm.net]
private static SearchSpec[] commonSpecs = JAVA手机|[www.cnjm.net] "&nh="), JAVA手机|[www.cnjm.net] String baseURL, JAVA手机|[www.cnjm.net] this.name = name; JAVA手机|[www.cnjm.net] } JAVA手机|[www.cnjm.net] public String makeURL(String searchString, String numResults) { JAVA手机|[www.cnjm.net] <FORM ACTION="/servlet/hall.SearchEngines"> JAVA手机|[www.cnjm.net] <INPUT TYPE="TEXT" NAME="numResults" JAVA手机|[www.cnjm.net] Lycos | JAVA手机|[www.cnjm.net] <INPUT TYPE="RADIO" NAME="searchEngine"
{ new SearchSpec("google",
""&num="),
new SearchSpec("infoseek",
"
new SearchSpec("lycos",
""&maxhits="),
new SearchSpec("hotbot",
""&DC=")
};
public SearchSpec(String name,
String numResultsSuffix) {
this.baseURL = baseURL;
this.numResultsSuffix = numResultsSuffix;
return(baseURL + searchString + numResultsSuffix + numResults);
}
public String getName() {
return(name);
}
public static SearchSpec[] getCommonSpecs() {
return(commonSpecs);
}
}
SearchEngines.html
下面是调用上qServlet的HTML表单?br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>讉K多个搜烦引擎</TITLE>
</HEAD>
<BODY BGCOLOR="#FDF5E6">
<CENTER>
搜烦关键?
<INPUT TYPE="TEXT" NAME="searchString"><BR>
每页昄几个查询l果:
VALUE=10 SIZE=3><BR>
<INPUT TYPE="RADIO" NAME="searchEngine"
VALUE="google">
Google |
<INPUT TYPE="RADIO" NAME="searchEngine"
VALUE="infoseek">
Infoseek |
<INPUT TYPE="RADIO" NAME="searchEngine"
VALUE="lycos">
VALUE="hotbot">
HotBot
<BR>
<INPUT TYPE="SUBMIT" VALUE="Search">
</CENTER>
</FORM>
</BODY>
</HTML>
]]>
Q{_找了好久扑ֈ的关于请求头的文章,对联|程序很有帮助)
HTTPh头概q?
JAVA手机|[www.cnjm.net]
HTTP客户E序Q例如浏览器Q,向服务器发送请求的时候必L明请求类型(一般是GET或者POSTQ。如有必要,客户E序q可以选择发送其他的h头。大多数h头ƈ不是必需的,但Content-Length除外。对于POSTh来说Content-Length必须出现?br /> 下面是一些最常见的请求头Q?br />AcceptQ浏览器可接受的MIMEcd?
JAVA手机|[www.cnjm.net]
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表C是否需要持久连接。如果Servlet看到q里的gؓ“Keep-Alive”,或者看到请求用的是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指定“no-cache”DC服务器必须q回一个刷新后的文档,即它是代理服务器而且已经有了面的本地拷贝?br />RefererQ包含一个URLQ用户从该URL代表的页面出发访问当前请求的面?br />User-AgentQ浏览器cdQ如果Servletq回的内容与览器类型有兛_该值非常有用?br />UA-PixelsQUA-ColorQUA-OSQUA-CPUQ由某些版本的IE览器所发送的非标准的h_表示屏幕大小、颜色深度、操作系l和CPUcd?br /> 有关HTTP头完整、详l的说明Q请参见http://www.cnjm.net/resfetch/CnUnZGQjjsPDHBwclByBlFRh7MORYVRkVG9UdNjD 的HTTP规范?br /> 5.2 在Servlet中读取请求头
在Servlet中读取HTTP头是非常方便的,只需要调用一下HttpServletRequest的getHeaderҎ卛_。如果客戯求中提供了指定的头信息,getHeaderq回对应的字W串Q否则,q回null。部分头信息l常要用刎ͼ它们有专用的讉KҎQgetCookiesҎq回 Cookie头的内容Q经解析后存攑֜Cookie对象的数l中Q请参见后面有关Cookie章节的讨论;getAuthType?getRemoteUserҎ分别dAuthorization头中的一部分内容QgetDateHeader和getIntHeaderҎd指定的头Q然后返回日期值或整数倹{?br /> 除了d指定的头之外Q利用getHeaderNamesq可以得到请求中所有头名字的一个Enumeration对象?br /> 最后,除了查看h头信息之外,我们q可以从hd令行获得一些信息。getMethodҎq回hҎQ请求方法通常是GET或者POSTQ但也有可能是HEAD、PUT或者DELETE。getRequestURIҎq回URIQURI是URL的从L和端口之后到表单数据之前的那一部分Q?getRequestProtocolq回h命o的第三部分,一般是“HTTP/1.0”或者“HTTP/1.1”?br /> 5.3 实例Q输出所有的h?br /> 下面的Servlet实例把所有接收到的请求头和它的g表格的Ş式输出。另外,该Servletq会输出主请求命令的三个部分Q请求方法,URIQ协?版本?
JAVA手机|[www.cnjm.net]
ShowRequestHeaders.java
package hall;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ShowRequestHeaders extends HttpServlet {
public void doGet(HttpServletRequest request,
JAVA手机|[www.cnjm.net]
HttpServletResponse response)
JAVA手机|[www.cnjm.net]
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "昄所有请求头";
out.println(ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
JAVA手机|[www.cnjm.net]
"<B>Request Method: </B>" +
request.getMethod() + "<BR>\n" +
"<B>Request URI: </B>" +
request.getRequestURI() + "<BR>\n" +
"<B>Request Protocol: </B>" +
request.getProtocol() + "<BR><BR>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Header Name<TH>Header Value");
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
out.println("<TR><TD>" + headerName);
out.println(" <TD>" + request.getHeader(headerName));
}
out.println("</TABLE>\n</BODY></HTML>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
JAVA手机|[www.cnjm.net]
}
}
出处http://blog.csdn.net/heiyeshuwu/archive/2006/06/28...
HTTPQ超文本传输协议
更详l的HTTP协议头信息参考我blog之前的文章?
HTTPQ超文本传输协议
HTTPQHypertext Transfer Protocol
文本传输协议(HTTPQ是应用层协议,׃其简捗快速的方式Q适用于分布式和合作式媒体信息系l。自 1990 qvQ?HTTP 已l被应用?WWW 全球信息服务pȝ?
HTTP 允许使用自由{复的方法表明请求目的,它徏立在l一资源识别器(URIQ提供的参考原则下Q作Z个地址QURLQ或名字QURNQ,用以标志采用哪种ҎQ它用类g|络邮g和多用途网际邮件扩充协议(MIMEQ的格式传递消息?
HTTP 也可用作普通协议,实现用户代理与连接其?Internet 服务Q如 SMTP ?NNTP ?FTP ?GOPHER ?WAIS Q的代理服务器或|关之间的通信Q允许基本的媒体访问各U应用提供的资源Q同时简化了用户代理pȝ的实施?
HTTP 是一U请?/ 响应式的协议。一个客h与服务器建立q接后,发送一个请求给服务器,h的格式是Q统一资源标识W(URIQ、协议版本号Q后面是cM MIME 的信息,包括h修饰W、客h信息和可能的内容。服务器接到h后,l予相应的响应信息,其格式是Q一个状态行包括信息的协议版本号、一个成功或错误的代码,后面也是cM MIME 的信息,包括服务器信息、实体信息和可能的内宏V?
HTTP 的第一版本 HTTP/0.9 是一U简单的用于|络间原始数据传输的协议。而由 RFC 1945 定义?HTTP/1.0 Q在?HTTP/0.9 的基上,有了q一步的改进Q允许消息以c?MIME 信息格式存在Q包括请?/ 响应范式中的已传输数据和修饰W等斚w的信息。但是, HTTP/1.0 没有充分考虑到分层代理服务器、高速缓冲存储器、持久连接需求或虚拟L{方面的效能。相比之下, HTTP/1.1 要求更加严格以确保服务的可靠性。关于安全增强版?HTTP Q即S-HTTPQ,在相关文g中再作介l?
协议l构
HTTP报文׃客户机到服务器的h和从服务器到客户机的响应构成。 请求报文格式如下:
h?br />通用信息?br />h?br />实体?br />报文M
h行以Ҏ字段开始,后面分别?URL 字段?HTTP 协议版本字段Qƈ?CRLF l尾。SP 是分隔符。除了在最后的 CRLF 序列?CF ?LF 是必需的之外,其他都可以不要。有关通用信息_h头和实体头方面的具体内容可以参照相关文g?
应报文格式如下:
状态行
通用信息?br />响应?br />实体?br />报文M
状态码元由3位数字组成,表示h是否被理解或被满뀂原因分析是对原文的状态码作简短的描述Q状态码用来支持自动操作Q而原因分析用来供用户使用。客h无需用来查或昄语法。有关通用信息_响应头和实体头方面的具体内容可以参照相关文g?
相关协议
WWW?a >FTP、STMP?a >NNTP、Gopher、WAIS?a >DNS?a >S-HTTP
l织来源
HTTP 定义?IETF (http://www.ietf.org/) ?RFC 1945?616中?
相关链接
http://www.javvin.com/protocol/rfc1945.pdf QHypertext Transfer Protocol ?HTTP 1.0
http://www.javvin.com/protocol/rfc2616.pdf QHypertext Transfer Protocol ?HTTP 1.1
FTPQ文件传输协?/strong>
FTPQ文件传输协?
QFTPQFile Transfer ProtocolQ?
文g传输协议QFTPQ得主机间可以׃n文g?FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP q接用于数据传输。控制连接用类?TELNET 协议在主机间交换命o和消息?
FTP 的主要功能如下:
FTP Q尽可以直接被l端用户使用Q但其应用主要还是通过E序实现?
FTP 控制帧即?TELNET 交换信息Q包?TELNET 命o和选项。然而,大多?FTP 控制帧是单的 ASCII 文本Q可以分?FTP 命o?FTP 消息?FTP 消息是对 FTP 命o的响应,它由带有解释文本的应{代码构成?
协议l构
命o
描述
ABOR
中断数据q接E序
ACCT <account>
pȝҎ帐号
ALLO <bytes>
为服务器上的文g存储器分配字?
APPE <filename>
d文g到服务器同名文g
CDUP <dir path>
改变服务器上的父目录
CWD <dir path>
改变服务器上的工作目?
DELE <filename>
删除服务器上的指定文?
HELP <command>
q回指定命o信息
LIST <name>
如果是文件名列出文g信息Q如果是目录则列出文件列?
MODE <mode>
传输模式QS=模式,B=块模式,C=压羃模式Q?
MKD <directory>
在服务器上徏立指定目?
NLST <directory>
列出指定目录内容
NOOP
无动作,除了来自服务器上的承?
PASS <password>
pȝd密码
PASV
h服务器等待数据连?
PORT <address>
IP 地址和两字节的端?ID
PWD
昄当前工作目录
QUIT
?FTP 服务器上退出登?
REIN
重新初始化登录状态连?
REST <offset>
q定偏U量重启文g传?
RETR <filename>
从服务器上找回(复制Q文?
RMD <directory>
在服务器上删除指定目?
RNFR <old path>
Ҏ路径重命?
RNTO <new path>
Ҏ路径重命?
SITE <params>
由服务器提供的站点特D参?
SMNT <pathname>
挂蝲指定文gl构
STAT <directory>
在当前程序或目录上返回信?
STOR <filename>
储存Q复Ӟ文g到服务器?
STOU <filename>
储存文g到服务器名称?
STRU <type>
数据l构QF=文gQR=记录QP=面Q?
SYST
q回服务器用的操作pȝ
TYPE <data type>
数据cdQA=ASCIIQE=EBCDICQI=binaryQ?
USER <username>>
pȝd的用户名
标准 FTP 信息如下Q?
响应代码
解释说明
110
新文件指C器上的重启标记
120
服务器准备就l的旉Q分钟数Q?
125
打开数据q接Q开始传?
150
打开q接
200
成功
202
命o没有执行
211
pȝ状态回?
212
目录状态回?
213
文g状态回?
214
帮助信息回复
215
pȝcd回复
220
服务qA
221
退出网l?
225
打开数据q接
226
l束数据q接
227
q入被动模式QIP 地址、ID 端口Q?
230
d因特|?
250
文g行ؓ完成
257
路径名徏?
331
要求密码
332
要求帐号
350
文g行ؓ暂停
421
服务关闭
425
无法打开数据q接
426
l束q接
450
文g不可?
451
遇到本地错误
452
盘I间不
500
无效命o
501
错误参数
502
命o没有执行
503
错误指o序列
504
无效命o参数
530
未登录网l?
532
存储文g需要帐?
550
文g不可?
551
不知道的늱?
552
过存储分配
553
文g名不允许
相关协议
TELNET
l织来源
FTP ?IETFQ?a >http://www.ietf.org/Q在 RFC 959 中,q由2228?640 ?2773 重新更新?
相关链接
http://www.javvin.com/protocol/rfc959.pdf QFile Transfer ProtocolQFTPQ?
POP & POP3Q邮局协议(邮局协议W??
POP & POP3Q邮局协议(邮局协议W??
POP & POP3QPost Office Protocol
POP 协议允许工作站动态访问服务器上的邮gQ目前已发展到第三版Q称?POP3 ?POP3 允许工作站检索邮件服务器上的邮g?POP3 传输的是数据消息Q这些消息可以是指oQ也可以是应{?
创徏一个分布式电子邮gpȝ有多U不同的技术支持和途径Q?POP Q邮局协议Q?DMSP Q分层式电子邮gpȝ协议Q和 IMAP Q因特网信息讉K协议Q。其中, POP 协议创徏最早因此也最Zh们了解; DMSP h较好的支持“无q接”操作的性能Q但其很大程度上仅限于单个应用程序(PCMAIL Q; IMAP 提供?POP ?DMSP 的扩展集q提供对q程邮g讉K的三U支持方式:ȝ、在U和无连接?
POP 协议支持“离U쀝邮件处理。其具体q程是:邮g发送到服务器上Q电子邮件客L调用邮g客户机程序以q接服务器,q下载所有未阅读的电子邮件。这U离U访问模式是一U存储{发服务,邮件从邮g服务器端送到个hl端机器上,一般是 PC 机或 MAC 。一旦邮件发送到 PC 机或 MAC 上,邮g服务器上的邮件将会被删除?
POP3 q不支持Ҏ务器上邮件进行扩展操作,此过E由更高U的 IMAP4 完成?POP3 使用 TCP 作ؓ传输协议?
协议l构
POP3 是发送在客户机和服务器间?ASCII 信息。POP3 命o摘要Q?
命o
描述
USER
用户?
PASS
用户密码
STAT
服务器上的邮件信?
RETR
获取的信息数
DELE
删除的信息数
LIST
昄的信息数
TOP <messageID> <nombredelignes>
从头开始(包含协议_打印X行信?
QUIT
退出POP3服务?
可选POP3命oQ?
APOP name digest AUTHORIZATION 状态有效;
TOP msg n TRANSACTION 状态有效;
UIDL [msg]
POP3 RepliesQ?
+ OK
- ERR?
相关协议
SMTP?a >IMAP4?a >TCP?a >POP
l织来源
POP3 ?IETFQ?a >http://www.ietf.org/定义?RFC 1939中?
相关链接
http://www.javvin.com/protocol/rfc1939.pdfQPost Office Protocol ?Version 3
SMTPQ简单邮件传输协?/strong>
SMTPQ简单邮件传输协?
QSMTPQSimple Mail Transfer ProtocolQ?
SMTP 是一U提供可靠且有效电子邮g传输的协议?SMTP 是徏模在 FTP 文g传输服务上的一U邮件服务,主要用于传输pȝ之间的邮件信息ƈ提供来信有关的通知?
SMTP 独立于特定的传输子系l,且只需要可靠有序的数据信道支持?SMTP 重要Ҏ之一是其能跨网l传输邮Ӟ即?SMTP 邮g中”。通常Q一个网l可以由公用互联|上 TCP 可相互访问的L、防火墙分隔?TCP/IP |络?TCP 可相互访问的LQ及其它 LAN/WAN 中的L利用?TCP 传输层协议组成。?SMTP Q可实现相同|络上处理机之间的邮件传输,也可通过中器或|关实现某处理机与其它网l之间的邮g传输?
在这U方式下Q邮件的发送可能经q从发送端到接收端路径上的大量中间中器或|关L。域名服务系l(DNSQ的邮g交换服务器可以用来识别出传输邮g的下一?IP 地址?
协议l构
SMTP 命o是发送于 SMTP L之间?ASCII 信息Q可能命令如下所C:
命o
描述
DATA
开始信息写?
EXPN <string>
在指定邮件表中返回名U?
HELO <domain>
q回邮g服务器n?
HELP <command>
q回指定命o中的信息
MAIL FROM <host>
在主Z初始化一个邮件会?
NOOP
除服务器响应认以外Q没有引起Q何反?
QUIT
l止邮g会话
RCPT TO <user>
指明谁收到邮?
RSET
重设邮gq接
SAML FROM <host>
发送邮件到用户l端和邮?
SEND FROM <host>
发送邮件到用户l端
SOML FROM <host>
发送邮件到用户l端或邮?
TURN
接收端和发送端交换角色
VRFY <user>
校验用户w䆾
相关协议
POP3?a >IMAP4?a >TCP?a >POP?a >FTP
l织来源
SMTP ?IETFQ?a >http://www.ietf.org/Q定义在 RFC2821中?
相关链接
http://www.javvin.com/protocol/rfc2821.pdfQSimple Mail Transfer Protocol