Java与Http协议
引言
http(超文本传输协议)是1个基于要求与响应模式的、无状态的、利用层的协议,常基于TCP的连接方式。HTTP协议的主要特点是: http1.0协议默许的是非持久连接, HTTP1.1默许的连接方式为持久连接。 非持久连接:每次服务器发出1个对象后,相应的TCP连接就被关闭,也就是说每一个连接都没有延续到可用于传送其他对象。每一个TCP连接只用于传输1个要求消息和1个响应消息。 持久连接:服务器在发出响应后让TCP连接继续打开着。同1对客户/服务器之间的后续要求和响应可以通过这个连接发送。HTTP/1.1的默许模式使用带流水线的持久连接。
1、HTTP协议详解之要求
//要求行 POST /reg.jsp HTTP/ (CRLF) 消息报头 Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF) Accept-Language:zh-cn (CRLF) Accept-Encoding:gzip,deflate (CRLF) If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF) If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF) User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF) Host:www.guet.edu.cn (CRLF) Connection:Keep-Alive (CRLF) (CRLF) //要求正文 user=jeffrey&pwd=1234 以上是http要求的3部:要求行、消息报头、要求正文。 要求行以1个方法符号开头,以空格分开,后面随着要求的URI和协议的版本,格式以下:
Method Request-URI HTTP-Version CRLF
2、HTTP协议详解之响应篇 状态行
HTTP/1.1 200 OK (CRLF)
Cache-Control: private,max-age=30
Content-Type: text/html; charset=utf⑻
Content-Encoding: gzip
Expires: Mon,25 May 2009 03:20:33 GMT
Last-Modified: Mon,25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon,25 May 2009 03:20:02 GMT
Content-Length: 12173
响应正文
略
HTTP响应也是由3个部份组成,分别是:状态行、消息报头、响应正文
状态行格式以下: 3、HTTP协议详解之消息报头 HTTP消息由客户端到服务器的要求和服务器到客户真个响应组成。要求消息和响应消息都是由开始行(对要求消息,开始行就是要求行;对响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。 HTTP消息报头包括普通报头、要求报头、响应报头、实体报头。每个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。
1、要求报头
Accept要求报头域用于指定客户端接受哪些类型的信息。 Host要求报头域主要用于指定被要求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。User-Agent要求报头域允许客户端将它的操作系统、阅读器和其它属性告知服务器。 2、响应报头 响应报头允许服务器传递不能放在状态行中的附加响应信息,和关于服务器的信息和对Request-URI所标识的资源进行下1步访问的信息。
3. 实体报头 要求和响应消息都可以传送1个实体。
Content-Language实体报头域描写了资源所用的自然语言。
Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的10进制数字来表示。 4、补充
1、HTTP协议Content Lenth限制漏洞致使谢绝服务攻击 5.Java利用HTTP协议实现联网和下载 Url的要求连接(Get方式) String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的内容为HTTP要求的正文 URL url = new URL(currentUrl);
HttpURLConnection httpurlconnection = url.openConnection();
//下面的设置对应HTTP要求中的消息报头 httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent); httpurlconnection.setRequestProperty("Accept",CommonValues.Accept); httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset); httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language); httpurlconnection.setRequestProperty("Connection",CommonValues.Connection); httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive); httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut); httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut); httpurlconnection.connect(); int responsecode = httpurlconnection.getResponseCode(); if(responsecode == HttpURLConnection.HTTP_OK) //对应HTTP响应中状态行的响应码 { //操作要求流,这里对应HTTP响应中的响应正文 } if (httpurlconnection != null) { httpurlconnection.disconnect(); }
学习Java的同学注意了!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |