java后台程序怎么java 调用httpss协议

Java实现http与https切换
我的图书馆
Java实现http与https切换
Java支持Https需要配置相关步骤如下:&1.从Http跳转到Https添加jar包1.加入struts2-ssl-plugin.jar这个包,2.升级Struts2,struts必须是2.1.18版本以上&&&&&&&&&&1.生成证书首先用jdk自带的工具keytool生成一个"服务器证书"。C:/Program Files/Java/jre1.5.0_04/bin& keytool -genkey -alias safetomcat -keyalg RSA -keystore c:/leadsec -validity 2000输入keystore密码: leadsec您的名字与姓氏是什么?[Unknown]: 10.50.10.188您的组织单位名称是什么?[Unknown]: Lenovo您的组织名称是什么?[Unknown]: Lenovo您所在的城市或区域名称是什么?[Unknown]: Beijing您所在的州或省份名称是什么?[Unknown]: Beijing该单位的两字母国家代码是什么[Unknown]: CNCN=10.50.10.188, OU= Lenovo, O= Lenovo, L=Beijing, ST=Beijing, C=CN正确吗?[否]: y输入&safetomcat&的主密码(如果和 keystore 密码相同,按回车):经过上述操作后,获得文件c:/Leadsec。注意:提示名字和姓氏时,应输入服务器的DNS域名或者IP地址,否则,客户端会弹出警告窗口。"站点不符"另外,因为是自签名的证书,客户端会弹出“非信任的机构颁发”,这时可以点击“继续”,或者安装该证书,确认自己的信任。建立服务器证书2.配置Tomcat找到tomcat的server配置文件,位置是Tomcat 5.5/conf/server.xml。修改server.xml文件中增加类似这样的语句:&Connector className="org.apache.coyote.tomcat5.CoyoteConnector"port="8443" minProcessors="5" maxProcessors="75"enableLookups="true" disableUploadTimeout="true"acceptCount="100" debug="0" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS"&keystoreFile="C:/leadsec" keystorePass="leadsec"&/&&&&&&&&&&&&&&&注意:&&&&&&&&&&&&&&&&&&&& 端口可以自行设置,但不能和已有的设置冲突。一般默认为8443。&&&&&&&&&&&&&&&&&&&&&keystoreFile和keystorePass必须与上一步建立的证书一致。&3.配置web.xml配置文件,位置是Tomcat 5.5/conf/web.xml&&在&/welcome-file-list& 添加如下配置信息&security-constraint&&&&&&& &&web-resource-collection&&&&&&& &&&&&& &web-resource-name &SSL&/web-resource-name&&&&&&& &&&&&&&& &url-pattern&/user/login.do&/url-pattern&&&&&&& &&/web-resource-collection&&&&&&& &user-data-constraint&&&&&&& &&& &transport-guarantee&CONFIDENTIAL&/transport-guarantee&&&&&&& &&/user-data-constraint&&/security-constraint&&&struts.xml配置及代码设置& 1. 在struts.xml中设置:&&& &constant name="struts2.sslplugin.httpPort"&value="8080"/&&&& &constant name="struts2.sslplugin.httpsPort"&value="8443"/&&constant name="struts2.sslplugin.annotations"&value="true"/&&&package name="default" namespace="/" extends="ssl-default,json-default"&(注:不要添加ssl自带的拦截器,否则无法获取request的信息(cookie,参数))…..&2. 之后在你要某个SSL的方法前,用注释,就行了:@Secured&&&&public&String login()&throws&Exception {&&&&&&&&return&SUCCESS;}如果要整个类都要SSL,则&@Securedpublic&class&UserAction&extends&ActionSupport&implements&ServletRequestAware,&&& ServletResponseAware {&2.从Https跳转到Http&&&&&&&& 此处使用重定向进行跳转,具体配置如下在类中添加属性//重定向urlprivate&String redirectU//Tomcat配置的http端口号private&static&final&String&&HTTP_PORT="http.port";然后再对应的方法末尾添加如下代码&&&&&&&& redirectUrl="http://"+request.getServerName()+":"+ConfigUtils.getValue(HTTP_PORT)+request.getContextPath()+"/common/bizNav.do";其中HTTP_PORT在环境文件中配置http.port=8080,此端口号为tomcat中http的端口号(tomcat/conf/server.xml)&xml文件配置由于使用重定向进行跳转,所以使用外部注入的方式,在action配置文件中配置如下&&&&&&&&&&& &action name="userLogin"&class="UserAction"&method="userLoginForStruts"&&&&&&&&&&&&& &result name="success"&type="redirect"&${redirectUrl} &/result&&&&& &/action&人有两条路要走, 一条是必须走的,一条是想走的,你必须把必须走的路走漂亮,才可以走想走的路。
TA的最新馆藏
喜欢该文的人也喜欢JavaWeb 后端 &一& 之 Tomcat服务器 - Http协议 学习笔记
1、Web开发概述
1.1服务器上的资源分类:
a、静态资源:指web页面中供人们浏览的数据始终是不变。html css js 图片 多媒体
b、动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
1、Web开发概述
1.1服务器上的资源分类:
a、静态资源:指web页面中供人们浏览的数据始终是不变。html css js 图片 多媒体
b、动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。JSP/Servlet、php、asp
下面为简单的java程序 模拟服务器提供资源 访问 本地端口1111即可得到服务器的资源
public class Myserver {
public static void main(String[] args) throws IOException{
ServerSocket server = new ServerSocket(1111);
//有可能 会被占用 抛出异常
Socket client = server.accept();
//构建输入流;读html
InputStream
in = new FileInputStream("f:/1.html");
//用客户端的输出流输出出去
OutputStream out = client.getOutputStream();
int len = -1;
byte b[] = new byte[1024];//缓存
while((len= in.read(b))!=-1){
out.write(b, 0, len);
in.close();
client.close();
2、Tomcat服务器
0、JavaEE规范:
JavaEE规范由JCP组织(www.jcp.org)制定和维护的。很多Java开发技术的总称。都是由抽象类和接口组成的(jar)。
常用的技术:JSP/Servlet、JPA、JTA、JNID、JDBC、JMX、JAXP、EJB等
1、常用的服务器:
WebLogic:实现了JavaEE规范,重量级的服务器,JavaEE容器。
WebSphereAS:实现了JavaEE规范,重量级的服务器,JavaEE容器。
JbossAS:实现了JavaEE规范,重量级的服务器,JavaEE容器。
Tomcat:实现了JSP/Servlet规范,轻量级的服务器,Servlet容器。
2、JSP/Servelt规范:Servlet2.5版
Tomcat的版本
Servlet/JSP版本
默认编码UTF-8
ISO-8859-1
用这个ISO-8859-1
3、安装Tomcat
解压压缩包
默认端口:8080
*webapps目录:该目录中有几个文件夹就说明有几个应用
4、启动:Tomcat\bin\startup.bat
找到 startup.bat双击运行 或者dom里运行 cd \
→ cd Apache → cd bin →
startup.bat
没有异常,最终说明用时,证明启动成功!
5、启动时遇到的常见问题
a、一闪而过:原因,没有配置环境变量JAVA_HOME=C:\jdk1.7.0_45
b、启动过程中出现很多异常:因为端口被占用了
端口被占用了:dom 使用 netstat -a -o
检查端口的使用情况
干掉占用8080端口的进程;
更改Tomcat的默认端口:
修改 Tomcat\conf\server.xml
5、http协议使用的默认端口是80(上线运行)
不用加端口访问
注意80端口可能被占用。(Window如果装了IIS--web服务器,默认用80)
3、JavaWeb应用的目录结构(很重要,记住)
MyApp 应用名称
css\main.css
必须有,大小写一致。该目录中的资源客户端无法访问的
存放本应用用到的jar包。(Tomcat\lib中的jar为所有应用共享的)
classes: 存放本应用的class字节码。(优先级:classes--自己的jar---Tomcat中的jar,优先级依次降低)
web.xml 当前应用的配置文件。
4、部署JavaWeb应用到Tomcat服务器上
方式一:直接把应用拷贝到Tomcat\webapps目录中
方式二:把应用打成war包。
就可以通过服务器访问
5、利用MyEclipse建立JavaWeb应用并部署
1、在MyEclipse中配置Tomcat
2、开发目录结构和运行目录结构
5、Tomcat的组成(Tomcat独有)
通过Tomcat\conf\server.xml配置进行配置(Tomcat的核心配置文件)
配置虚拟目录(Context)
可以把磁盘上任意位置的文件夹当做一个应用交给Tomcat管理。
方式一:直接修改server.xml配置文件(需要重新启动Tomcat,不推荐)
方式二:在Tomcat\conf\[引擎名称]\[主机名称]\目录中,建立一个xml的配置文件,文件名就是应用的访问虚拟目录:PPP.xml
http://localhost/PPP/1.html
配置虚拟主机(Host)
一台硬件服务器上运行多个网站
域名解析:
配置默认端口(Connector)、默认应用、默认主页
默认端口:80。修改Tomcat\conf\server.xml,把一个Connector的端口改为80
默认应用:
TOmcat中默认的应用webapps\ROOT
方法一:把作为默认应用的应用改为ROOT即可。
方式二:在Tomcat\conf\引擎名称\主机名称\ROOT.xml的配置文件
应用的默认主页:
修改web.xml
二、HTTP协议:必须记住(很重要)
1、HTTP协议概述
HTTP是什么?超文本传输协议。
描述客户端和服务器端的数据标准,该协议由W3C维护和管理。
HTTP1.0:每次发出请求都需要建立网络连接
HTTP1.1:(主流)在一次网络连接上发出多次请求和得到多次响应。多了一些头。
浏览器遇到以下标记时,会自动发出请求
2、HTTP协议的组成
2.1请求部分
2.2响应部分
3、请求部分详解
3.1请求行:
GET /app1/1.html HTTP/1.1
GET:请求方式。
常用的请求方式:GET(默认的)、POST、HEAD、OPTIONS等
GET:默认的
提交的数据显示出来了,相对不安全,协议的第一行有长度限制,&1kb.
(有请求数据时推荐)POST:可以通过&form method=”post”/&
username=abc&password=123
提交的数据在请求正文中的,相对安全,长度没有限制。
/app1/1.html :请求的资源地址。(URI)
URL:协议+主机:端口+资源地址
http://localhost:8080/app1/1.html
HTTP/1.1:客户端浏览器使用的协议的版本。
3.2请求消息头:
作用:向服务器端传递附加信息(暗号指令)
Accept:告知服务器,客户端可以接受的数据类型(MIME类型)
文件系统:通过文件的扩展名区分不同的文件的。txt jpeg
MIME类型:大类型/小类型。
txt---&text/plain
html----&text/html js----&text/javascript (具体对应关系:可参考 Tomcat\conf\web.xml)
Accept-Encoding:告知服务器,客户端可以接受的压缩编码。比如gzip
Accept-Language:告知服务器,客户端支持的语言。
Referer:告知服务器,从哪个页面过来的。(作用:统计广告的投放效果;防止盗链。)
Content-Type:告知服务器,请求正文的MIME类型
默认类型:application/x-www-form-urlencoded(表单enctype属性的默认取值)
具体体现:username=abc&password=123
其他类型:multipart/form-data(文件上传时用的)
If-Modified-Since:告知服务器,当前访问的资源,缓存中的文件的最后修改时间。
User-Agent:告知服务器,浏览器的类型
Content-Length:请求正文的数据长度
Cookie:(*****重要)会话管理有关
3.3请求正文:
数据能提交到服务器,表单中的输入域必须有name属性值
POST请求是才有正文
username=abc&password=123
4、响应部分详解
4.1响应行:
HTTP/1.1 200 OK
HTTP/1.1 :说明服务器端用的协议版本
200 :响应状态码
1XX 2XX 3XX 4XX 5XX
2XX:处理完毕
4XX:请求有误
5XX:服务器有误
记住常用的响应码:
200:一切正常
302/307:请求重定向
304:服务器上的资源没有发生改变
404:访问的地址不存在
500:服务器端错误
OK:响应码描述
4.2响应消息头:
作用:服务器端向客户端传递的附加信息(暗号指令)
Location:告知客户端,你去访问的地址。
和302/307实现请求重定向
Content-Encoding:告知客户端,响应正文使用的压缩编码(gzip)
Content-Length:告知客户端,响应正文的长度
Content-Type:告知客户端,响应文正的MIME类型。默认text/html
Refresh:告知客户端,定时刷新
Content-Disposition:告知客户端,用下载的方式打开filename=23.jpg
Set-Cookie:(*****)会话有关
-------------
Expires: -1 控制时间的
Cache-Control: no-cache (1.1)
Pragma: no-cache
三头一块用,用于告知浏览器,不要缓存。
----------------------
4.3响应正文:
浏览器解析的正文内容,右键查看源码一样的。
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
阿里云机器学习是基于阿里云分布式计算引擎的一款机器学习算法平台。用户通过拖拉拽的方式可视化的操作组件来进行试验,...
一款阿里巴巴自主研发的高性能、分布式的关系型数据库,支持完整的ACID特性。它高度兼容MySQL协议与语法,让用...
阿里云消息服务(Message Service,原MQS)是阿里云商用的消息中间件服务。与传统的消息中间件不同,...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
MaxCompute75折抢购
Loading...java、web、https使用详解
& & &&HTTPS通信的具体原理,这里不做介绍。作为一个C/S的通信协议,HTTPS是分为Client和Server的,这里会介绍当Tomcat WEB Server分别作为HTTPS的客户端和服务器端时候的配置和实现。& & &&WEB容器作为HTTPS的服务器端& & &&Tomcat提供HTTPS Server的功能和浏览器等其他HTTPS客户端进行交互是很常见的使用方式。Tomcat配置实现了HTTPS Server之后,浏览器就可以通过访问Tomcat提供的WEB服务了。& & &&具体配置步骤如下:& & &&生成证书& & &&可以用java自动的工具生成证书,如果已经有可信的第三方签发的证书或者其他工具生成的服务器证书,此步骤可以忽略,直接进行后面的步骤。& & &&服务器证书用于后续发生SSL协商时,发给SSL Client用来验证服务器的。在HTTPS应用场景中,默认SSL Client一般是浏览器,因为浏览器出厂的时候会内置一些可信的第三方CA作为验证的CA链。所以此处如果使用了这些第三方CA签发的证书作为服务器的证书,则浏览器不用做任何设置就可以对服务器端进行有效的验证。否则,因为验证证书需要一直到Root CA建立信任关系链,这里对于自己生成的证书有两种处理的方式:& & &&在本地建立CA,签发服务器证书给Tomcat使用,将本地CA证书链导入浏览器作为可信的CA,后续用来在浏览器端验证Tomcat的服务器证书。& & &&Tomcat的浏览器证书使用自签名证书,这样客户端就不用再做任何配置了。& & &&上述两种方式在WEB开发的测试过程中使用都是没有问题,一般用第二种方法,更简洁一些。但是在实际的生产环境,是行不通的。& & &&方法一:因为WEB服务面向的访问群体不确定,我们没有办法将自己生成的CA证书链导入到所有的浏览器中。& & &&方法二:自签名证书可以协商安全的SSL通道,保证HTTP通信的通道安全,但是因为是自签名的,客户端无法确认服务器端的身份,无法阻止基于中间人的钓鱼攻击。所以最好的方式还是使用可信的第三方签发的证书,当然这种服务是收费的。& & &&我们下面只说明一下测试环境中证书的使用,这里使用自签名证书做示例:& & &&生成证书& & &&这里使用了网上的图片做说明,大致步骤是相同的,注意,这里的common-name,也就是名字和姓氏那一栏需要和WEB域名一致。在实际应用过程中,浏览器判断WEB Server的身份是否可行的通用做法是比较证书字段中的common-name和WEB的域名是否相同,如果不相同会提示WEB Server不可信。& & &&导出证书& & &&上一步中只是在keystore中生成了一个证书,这个keystore中可以有很多证书,这里我们把需要的证书文件导出,导出的时候请指定别名。记下导出的证书的路径,后面需要用到。& & &&至此,证书的操作就已经完成了。& & &&配置Tomcat服务器& & &&Tomcat服务器默认提供了HTTP服务,如果需要用HTTPS服务,需要打开相应的端口,和做一些必要的配置。& & &&如上图所示,protocol中使用的是coyote方式,如果是其他的方式,如APR方式,可能配置方法会不同,具体的如果有需求,可以到网上搜索相关资料。& & &&注意:这里keystoreFile选择当时生成的证书库,keystorePass填写自己的密码即可。& & &&使用HTTPS服务登录& & &&将配置好的tomcat服务器重启之后,会自动加载证书库中的证书,根据请求的域名发送相关的证书。如图:& & &&这里因为用的是自签名证书,所以提示是无效的证书认证,我们可以选择继续访问,可以正常进入首页。WEB容器作为HTTPS的客户端& & &&Tomcat因为是WEB服务的提供者,所以作为HTTPS的服务器端是很好理解的。但是在实际应用中WEB服务器也是很有可能作为HTTPS的客户端的。解决跨域访问就是一个这样的应用场景。考虑下面的情况:& & &&在的网站中,需要获取中的某一个资源,正常的想法是,通过B提供的API直接在A的页面中发送HTTP Get/Post请求到B的服务器中获取,这样是否可以呢?实际是不行的,因为浏览器有同源策略,是会默认禁止在一个域中向另外一个域中直接发起请求的,如果这样做了,会出现一个access-control-allow-origin的错误,这里不仔细介绍,如果有兴趣的可以搜索一下相关的内容。& & &&我们可以看到,在浏览器中,直接在A的页面中获取B的资源是不可行的,但是实际上我们又确实有这样的需求,怎么办呢?可以通过A的后台做代理去B获取资源,然后再将获取的资源返回给A。这时候WEB 服务器(tomcat)就有可能作为HTTPS的客户端了。& & &&准备证书& & &&在HTTPS的使用场景中,一般只会要求对服务器进行认证,目前不会也不太可能对客户端进行认证。所以,作为HTTPS Client的时候,本身是不需要有证明自己身份的证书的。但是因为要验证服务器,所以需要有可信任的证书链。寻找可信任的证书链的具体的原则如下:& & &&客户端的TrustStore文件中保存着被客户端所信任的服务器的证书信息。客户端在进行SSL连接时,JSSE将根据这个文件中的证书决定是否信任服务器端的证书。在SunJSSE中,有一个信任管理器类负责决定是否信任远端的证书,这个类有如下的处理规则:& & &&若系统属性javax.net.sll.trustStore指定了TrustStore文件,那么信任管理器就去jre安装路径下的lib/security/目录中寻找并使用这个文件来检查证书。& & &&若该系统属性没有指定TrustStore文件,它就会去jre安装路径下寻找默认的TrustStore文件,这个文件的相对路径为:lib/security/jssecacerts。& & &&若jssecacerts不存在,但是cacerts存在(它随J2SDK一起发行,含有数量有限的可信任的基本证书),那么这个默认的TrustStore文件就是lib/security/cacerts。& & &&所以我们在实际使用中,要看看具体证书放在哪里,java1.8中,证书是放在lib/security/cacerts中的。& & & & &&这里就包含了默认的一些第三方证书机构的可信的CA证书链。只要我们要连接的HTTPS服务器端的证书是这些第三方证书机构颁发的,则不需要做任何处理。如果服务器端没有使用自己的CA签发的证书或者自签名证书怎么办呢?有两个解决办法:& & &&按照以上信任管理器的规则,将服务端的公钥导入到jssecacerts,或者是在系统属性中设置要加载的trustStore文件的路径;证书导入可以用如下命令:keytool -import -file src_cer_file –keystore dest_cer_store;至于证书可以通过浏览器导出获得;& & &&实现自己的证书信任管理器类,比如MyX509TrustManager,该类必须实现X509TrustManager接口中的三个method;然后在HttpsURLConnection中加载自定义的类。& & &&第一种方法稍嫌繁琐,第二种方法可能会更方便一些,但是有可能导致安全问题。因为我们这里主要是和阿里的HTTPS服务器连接,阿里用的是可信第三方CA颁发的证书,所以不存在上述说的证书无法验证的问题。& & &&至此,证书已经准备好了,可以进行编码验证了。& & &&连接HTTPS服务器端& & &&这部分工作比较简单,在Java中要访问Https链接时,会用到一个关键类HttpsURLConnection, 参见如下实现代码:& & &&创建一个URL的实例,然后打开链接,就可以进行一次Request操作了,通过InputStreamReader类可以获取返回的信息。实际测试过,可以从阿里的认证服务器获取回应信息。具体的请求的参数和返回数据的处理可以在实际的操作过程中进行完善。
&&& &&最新资讯
&&&&关键词分类
&&& &&联系我们
杭州吾诺瀚卓网络科技有限公司
400-008-0088
地址:杭州市西湖区文三路478号华星时代广场 21 层
&&& &&我要评论
已有条评论,共人参与
&&&最新评论
Began to make an appointment\ java如何请求BASIC认证的https协议
java如何请求BASIC认证的https协议
JAVA开发工程师
努力的意义在于遇到自己喜欢的东西可以大大方方的买下来(大家可以叫我雷锋)
作者的热门手记
我的开源中国博客地址:\
* BASIC认证的https
* @param urlStr https请求的地址
public static String get(String urlStr) {
("url--&" + urlStr);
String rs = "";
StringBuffer buffer = new StringBuffer();
DefaultHttpClient client =
HttpGet get = new HttpGet(urlStr);
InputStream instream =
BufferedReader in =
//处理HTTPS请求
new SSLClient();
//BASIC认证
client.getCredentialsProvider().setCredentials(AuthScope.ANY,new
UsernamePasswordCredentials("用户名","密码"));
//获取响应
response =
client.execute(get);
instream = response.getEntity().getContent();
in = new BufferedReader(new InputStreamReader(instream, "utf-8"));
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
rs = buffer.toString();
System.out.println(rs);
} catch (Exception e) {
e.printStackTrace();
//释放资源,自己处理一下,不在赘述
public class SSLClient extends DefaultHttpClient{
//证书处理
private static Logger log = Logger.getLogger(getClass().class);
public SSLClient() throws Exception{
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
public X509Certificate[] getAcceptedIssuers() {
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = new
SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 443, ssf));
相关标签:
请登录后,发表评论
评论(Enter+Ctrl)
评论加载中...
评论加载中...
Copyright (C)
All Rights Reserved | 京ICP备 号-2最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正。
&HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本&&HTTP 1.1。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
1.1 http请求模型
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端.
1.2&工作流程
一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
2 利用java代码测试各个协议头
一个完整的http协议包括请求和响应,下面我们一一介绍:
2.1 &请求篇
http请求由三部分组成,分别是:请求行、消息报头、请求正文
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF&&其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:GET&&&& 请求获取Request-URI所标识的资源POST&&& 在Request-URI所标识的资源后附加新的数据HEAD&&& 请求获取由Request-URI所标识的资源的响应消息报头PUT&&&& 请求服务器存储一个资源,并用Request-URI作为其标识DELETE& 请求服务器删除Request-URI所标识的资源TRACE&& 请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT 保留将来使用OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求应用举例:GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF)
POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。eg:POST /reg.jsp HTTP/ (CRLF)Accept:image/gif,image/x-xbit,... (CRLF)...HOST:www. (CRLF)Content-Length:22 (CRLF)Connection:Keep-Alive (CRLF)Cache-Control:no-cache (CRLF)(CRLF)&&&&&&&& //该CRLF表示消息报头已经结束,在此之前为消息报头user=jeffrey&pwd=1234& //此行以下为提交的数据
HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
我们运用命令行命令Telnet进行测试:
1. 使用telnet连接到HTTP服务器,如要从google上请求index.html页面,首先要连接到服务器的80端口&
2. 现在已经连接上了服务器,发送http请求消息:
GET /index.html HTTP/1.1
connection: close
输入上面内容后,连续敲入两个回车,哈哈,是不是看到返回结果了。
这个请求的意思是:通过1.1版本协议请求index.html页面;connection: close是实用短连接,即服务器返回后就断开连接;Host字段知名页面所在的主机名。
返回结果应该是这样的:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Date: Fri, 02 Jan :17 GMT
Expires: -1
Content-Type: text/ charset=GB2312
Set-Cookie: PREF=ID=7bbe374f53b6c6a8:NW=1:TM=:LM=:S=2EGHuZJnrtdQUB_A; expires=Sun, 02-Jan-:17 GMT; path=/; domain=.
Server: gws
Transfer-Encoding: chunked
Connection: Close
这里有一个额外的CRLF
2、请求报头后述3、请求正文(略)&
2.2 响应篇
响应消息包括状态行、若干头部行和附属体(html数据实体)。
状态行包括:HTTP协议版本号、状态码、状态码的文本描述信息。如:HTTP/1.1 200 OK
状态码由一个三位数组成,状态码大体有5种含义:
1. 1xx。信息,请求收到,继续处理。
2. 2xx。成功。200请求成功;206断点续传。
3. 3xx。重定向。一般跳转到新的地址。
4. 4xx。客户端错误。404文件不存在
5. 5xx。服务器错误。500内部错误。
常见状态代码、状态描述、说明:200 OK&&&&& //客户端请求成功400 Bad Request& //客户端请求有语法错误,不能被服务器所理解401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用&403 Forbidden& //服务器收到请求,但是拒绝提供服务404 Not Found& //请求资源不存在,eg:输入了错误的URL500 Internal Server Error //服务器发生不可预期的错误503 Server Unavailable& //服务器当前不能处理客户端的请求,一段时间后可能恢复正常eg:HTTP/1.1 200 OK (CRLF)
Set-Cookie:服务器设置客户端Cookie。设置格式是name=value,设置多个参数时中间用分号隔开。Set-Cookie时还会用到几个参数:PATH设置有效的路径,DOMAIN设置cookie生效的域名,Expire设置cookie的有效时间,0表示关闭浏览器就失效。
Location:当服务器返回3xx重定向时,该参数实现重定向。广告链接的跳转就使用这种协议。
Content-Length:附属体(数据实体)的长度
2.3 测试协议头 ----响应头
通过在服务器端设置响应头,我们可以控制浏览器,在myeclipse搭建tomcat服务器我们简单地对几个进行了测试:
1,通知浏览器采用压缩数据方式发送,测试content-encoding和content-length
String data="aaaaaaaaaaa";
System.out.print("原始数据大小:"+data.getBytes().length);
ByteArrayOutputStream bout=new ByteArrayOutputStream();
GZIPOutputStream gout=new GZIPOutputStream(bout);
gout.write(data.getBytes());
gout.close();
byte gzip[]=bout.toByteArray();
System.out.print("压缩后数据大小:"+gzip.length);
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Length", gzip.length+"");
response.getOutputStream().write(gzip);
2,重定向 测试location
response.setStatus(302);
response.setHeader("Location","/web1/1.html");
3,通知浏览器以哪种方式打开数据 测试content-type
response.setHeader("content-type", "image/bmp");
InputStream in=this.getServletContext().getResourceAsStream("/1.bmp");
int len=0;
byte buffer[]=new byte[1024];
OutputStream out=response.getOutputStream();
while((len=in.read(buffer))&0){
out.write(buffer,0,len);
4,定时刷新 跳转 测试refresh &3秒后刷新 然后跳到百度首页
response.setHeader("refresh", "3;url=''");
String data="aaaaaaaaaaaaaa";
response.getOutputStream().write(data.getBytes());
5,下载方面的测试 &&content-disposition
response.setHeader("content-disposition","filename=2.bmp");
InputStream in=this.getServletContext().getResourceAsStream("/2.bmp");
int len=0;
byte buffer[]=new byte[1024];
OutputStream out=response.getOutputStream();
while((len=in.read(buffer))&0){
out.write(buffer,0,len);
上面只是我的浅见,刚看完想写个博客,有错误欢迎指正!谢谢!
阅读(...) 评论()

我要回帖

更多关于 java https协议 的文章

 

随机推荐