HTTP协议详解

发端接触协议是分别post和get模式的区别,这是大部分程序员的共同点吧。还记得这时助教让我们死记硬背几点分别,然后径直模模糊糊的用着。前几天写一篇接地气的详解给协调和我们。

  前段时间在该地XP系统上测试了一部分整合javabean的Form例子,想着宣布到劳动器段去看看是否运行正常,一起始以为会和本地XP系统一样,部署到有关的目录下进展一些安排就可以了,但骨子里过程却和想象的相形见绌,部署到服务器上可称得上是反复。下边将Oracle
EBS Form 发布到Server端的若干注意事项解说如下:


首先 需要领悟哪些是说道。

1、确定EBS版本

协和这里指的是网络传输协议,是指统计机通信的共同语言。以上是法定的分解,跟过去同样都是那么“生动形象”。其实呢,怎么说呢,是一种传输形式。大家打一个如若,比如送快递。

出于不同版本EBS配置jar文件和发布javabean
jar包的职务存在一些异样,所以必须要了然EBS版本,这样遭逢题目才好搜索对应的化解方案。可以经过SQLPlus连接EBS数据库来查阅服务器上的EBS版本:

快递员小张开着小蹦蹦带着快递,按照地方找到小刘的地址,遵照客户要求直接送到了商家,快递为商家购买物品:“你好,每一日快递,请问刘女士么?”,然后把包裹递了回复。

 1 SQL*Plus: Release 10.1.0.4.2 - Production on 星期二 11月 17 11:10:46 2015
 2 Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 3 连接到: 
 4 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
 5 With the Partitioning, OLAP, Data Mining and Real Application Testing options
 6 SQL> select RELEASE_NAME from fnd_product_groups;
 7 RELEASE_NAME
 8 --------------------------------------------------------------------------------
 9 12.1.1
10 SQL> 

小刘:“对,谢谢!”然后小刘接过小张的快递包装。

能够看看当地是12.1.1的本子。

下一场自己贴出一个http协议中的post请求实例
(这是浏览器向劳动器端发送的一个简单请求
跟浏览器检查其中Network请求的header不同,是因为浏览器的来得是为着便于开发经过处理将来的映现)

2、确定服务器的操作系统

//请求行信息
POST /hello/index.jsp HTTP/1.1          //小张带着包裹 开着小蹦蹦

//请求头信息
Host: www.google.cn                //找到小刘公司
Content-Type: application/x-www-form         //根据要求送到公司
Content-Length: 14                 //快递数量 1
// 这里是空行                     //以上是准备过程

//POST有请求正文
username=hello                   //将快递包裹递过去

 

据明白,EBS在不同操作系统上,javabean
jar包配置和上传的目录也设有有的区别,例如我的本土环境是XP,服务器是Linux(Redhat),配置环境就不雷同,这也是自家一先河安装本地配置总是找不到对应的javabean
jar包的原因。XP(windows)系统上传jar包的职位为/forms/java/下,配置文件为form/server/formsweb.cfg.但是Linux为appsweb.cfg!!!

 下边我贴出一个http的响应报文跟小刘收快递作相比较

3、确定安排地点

//响应行
HTTP/1.1 200 OK                   //开门 成功见到小张
//消息报头
Date: Sat, 31 Dec 2005 23:59:59 GMT         //记录下快递接收时间
Content-Type: text/html;charset=ISO-8859-1   //接收方式直接柜台接收(大件需要卡车装卸)
Content-Length: 122                //接收数量1
//空行

//响应体 响应正文              
<html><head>                   //回应小张,快递是对了.谢谢!
<title>that's right. think youu!</title>
</head><body>
<!-- body goes here -->
</body></html>

由地方可知待发表的服务器是Linux操作系统,EBS版本为12.1.1。Oracle
EBS 中的appsweb.cfg有多少个地方,分别是:

这就是一个简单易行的post请求和响应的长河。当然这些比喻存在一车的尾巴,请不要只顾这些细节谢谢! 

  1. $OA_HTML/bin and  
    (此安排文件供R11用)
    2.
    $ORA_CONFIG_HOME/10.1.2/forms/server/   (此安排文件供R12用)

以此历程吧,在生活中可以叫作一种永恒的交际格局。在总括机的世界里就叫作协议啦!这让自家想起来google创办人佩奇的那句话,这么些怪怪 的程序员起的这个 怪怪 的名字。 囧…………….

在服务器的顶峰输入一下命令查看$ORA_CONFIG_HOME/10.1.2/forms/server/的实际目录,然后编辑其目录下的appsweb.cfg

下面我大概介绍一下研讨项目,例如网络协议通信协议,如TCP/IP;文件传输协议FTP;超文本传输协议HTTP、HTTPS;用户数据报协议UDP;传输控制协议TCP
等等一大堆不认识的钱物,市面上常用的有四十开外。

1 [appldev@erp ~]$ $ORA_CONFIG_HOME/10.1.2/forms/server/
2 -bash: /u01/oracle/VIS/inst/apps/VIS_erp/ora/10.1.2/forms/server/: is a director
3 [appldev@erp ~]$


HTTP协议

在appsweb.cfg中找到archive节点(需要追加javahost.jar =>/OA_JAVA/oracle/apps/fnd/jar/javahost.jar,注意是逗号分隔):

HTTP协议是Hyper Text Transfer
Protocol(超文本传输协议)的缩写,是用来从万维网(WWW:World Wide Web
)服务器传输超文本到当地浏览器的传递协议。
HTTP是一个遵照TCP/IP通信协议来传递数据(HTML 文件, 图片文件,
查询结果等)。那就可以知晓成和快递公司之间复杂的协作了,包含众五个送快递的长河。

archive=/OA_JAVA/oracle/apps/fnd/jar/fndforms.jar,/OA_JAVA/oracle/apps/fnd/jar/fndformsi18n.jar,/OA_JAVA/oracle/apps/fnd/jar/fndewt.jar,/OA_JAVA/oracle/apps/fnd/jar/fndswing.jar,/OA_JAVA/oracle/apps/fnd/jar/fndbalishare.jar,/OA_JAVA/oracle/apps/fnd/jar/fndaol.jar,/OA_JAVA/oracle/apps/fnd/jar/fndctx.jar,/OA_JAVA/oracle/apps/fnd/jar/javahost.jar
这里看看OA_JAVA为虚拟目录,到终点查看其实际目录为:

HTTP请求音信

一个HTTP请求报文由请求行(request
line)、请求头(header)、空行和呼吁数据4个部分组成,下图给出了请求报文的相似格式。

图片 1

 

1 [appldev@erp ~]$ $OA_JAVA/oracle/apps/fnd/jar/
2 -bash: /u01/oracle/VIS/apps/apps_st/comn/java/classes/oracle/apps/fnd/jar/: is a
3  directory
4 [appldev@erp ~]$

1.请求行

恳请行:请求方法   URL字段   HTTP协议版本
  组成,它们用空格分隔。
例如, GET     /index.html  HTTP/1.1。

遵照HTTP标准,HTTP请求可以行使多种呼吁方法。
HTTP1.0概念了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1骤增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

 

图片 2

而广泛的有如下两种:

1).GET

最常见的一种请求模式,当客户端要从服务器中读取文档时,当点击网页上的链接或者经过在浏览器的地方栏输入网址来浏览网页的,使用的都是GET形式。GET方法要求服务器将URL定位的资源放在响应报文的数量部分,回送给客户端。使用GET方法时,请求参数和呼应的值增大在URL前面,利用一个问号(“?”)代表URL的尾声与请求参数的先导,传递参数长度受限制。例如,/index.jsp?id=100&op=bind,这样经过GET情势传送的多寡直接表示在地点中,所以我们可以把请求结果以链接的样式发送给好友。以用google搜索domety为例,请求链接为 

http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq= 

Request格式如下:

//请求行
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1    
//请求头
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,  application/msword, application/x-silverlight, application/x-shockwave-flash, */*    
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>    
Accept-Language: zh-cn    
Accept-Encoding: gzip, deflate    
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)    
Host: <a href="http://www.google.cn">www.google.cn</a>    
Connection: Keep-Alive    
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;NID=31=ojj8d-IygaEtSxLgaJmqSjVhC...
//空行(作用是告诉计算机下面要来数据体啦)

//因为没有数据后面请求体为空

 

地方中黑色部分就是经过GET发送的乞请数据,我们可以在地方栏中透亮的收看,各样数据里面用”&”符号隔开。所以就有了多少个性状

1 那种办法不适合传送私密数据。

2
由于不同的浏览器对地方的字符限制也截然不同,一般最两只好识别1024个字符,所以只要急需传送大量数码的时候,也不适合利用GET格局。

 

2).POST

对于地点提到的不适合利用GET模式的情事,可以考虑采纳POST格局,因为使用POST方法可以允许客户端给服务器提供音讯较多。POST方法将呼吁参数封装在HTTP请求数据中,以名称/值的花样现身,可以传输大量数目,这样POST情势对传送的数目大小没有限制,而且也不会显得在URL中。还以上边的查找domety为例,固然运用POST格局的话,格式如下:

//请求行
POST /search HTTP/1.1    
//请求头
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,   
application/msword, application/x-silverlight, application/x-shockwave-flash, */*    
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>    
Accept-Language: zh-cn    
Accept-Encoding: gzip, deflate    
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)    
Host: <a href="http://www.google.cn">www.google.cn</a>    
Connection: Keep-Alive    
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-  
//空行(作用是告诉计算机下面要来数据体啦)

 hl=zh-CN&source=hp&q=domety  //请求体 传输数据在请求体中

 

可以看出,POST情势请求行中不带有数据字符串,这一个数据保存在”请求内容”部分,各数据里面也是运用”&”符号隔开。POST形式大多用于页面的表单中。因为POST也能不负众望GET的效率,因而大部分人在规划表单的时候一律都拔取POST情势,其实这是一个误区。GET模式也有友好的特点和优势,我们应有按照不同的场地来挑选是拔取GET如故接纳POST。

 如若想打听请求头音讯方可点击
请求头及响应头消息 
详细信息点击这里 请求头参数解释

因此将javahost.jar上传到/u01/oracle/VIS/apps/apps_st/comn/java/classes/oracle/apps/fnd/jar/下,这个和$COMMON_TOP/java/classes/oracle/apps/fnd/jar一致。

HTTP响应信息

HTTP响应也由五个部分构成,分别是:状态行、响应头、空行、响应正文。
正如您所见,在响应中唯一真正的分别在于第一行中用状态新闻代替了请求新闻。状态行(status
line)通过提供一个意况码来表达所请求的资源气象。 

图片 3

意况行: 协议及版本号  HTTP响应状态码  原因及描述

1 [appldev@erp ~]$  $COMMON_TOP/java/classes/oracle/apps/fnd/jar
2 -bash: /u01/oracle/VIS/apps/apps_st/comn/java/classes/oracle/apps/fnd/jar: is a
3 directory
4 [appldev@erp ~]$

HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会回来一个带有HTTP状态码的信息头(server
header)用以响应浏览器的乞请。
HTTP状态码的英文为HTTP Status
Code。状态代码由三位数字组成,第一个数字定义了响应的品种,且有五种可能取值。

  • 1xx:提醒音信–表示请求已吸收,继续处理。
  • 2xx:成功–表示请求已被成功接收、精通、接受。
  • 3xx:重定向–要水到渠成请求必须举办更进一步的操作。
  • 4xx:客户端错误–请求有语法错误或请求无法落实。
  • 5xx:服务器端错误–服务器未能落实合法的呼吁。

广大景色代码、状态描述的证实如下。

  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,无法被服务器所知晓。
  • 401
    Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起利用。
  • 403 Forbidden:服务器收到请求,可是拒绝提供劳动。
  • 404 Not Found:请求资源不存在,举个例证:输入了不当的URL。
  • 500 Internal Server Error:服务器爆发不可预期的一无是处。
  • 503 Server
    Unavailable:服务器当前无法处理客户端的乞请,一段时间后恐怕恢复生机正常,举个例证:HTTP/1.1
    200 OK(CRLF)。

从这之后,部署到服务器的文本上传和布局工作成功,然后上传Form到相应的目录,配置菜单即可(客户端和服务器的SSH工具为Bitvise
SSH Client)。

HTTP工作规律

HTTP三点注意事项:

  • HTTP是无连接:无连接的含义是限量每一次连续只处理一个呼吁。服务器处理完客户的哀告,并接收客户的回应后,即断开连接。采取这种措施得以节省传输时间。
  • HTTP是传媒独立的:这表示,只要客户端和服务器知道怎么处理的数目内容,任何项目标数码都足以因此HTTP发送。客户端以及服务器指定使用符合的MIME-type内容类型。
  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有回忆能力。缺乏状态意味着一旦后续处理需要前面的音讯,则它必须重传,这样也许导致每一遍连续传送的数据量增大。另一方面,在服务器不需要先前信息时它的应对就较快。

三 关于HTTP请求GET和POST的区别

1.GET交由,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,四个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0
%E5%A5%BD。若是数据是英文字母/数字,原样发送,要是是空格,转换为+,假如是华语/其他字符,则直接把字符串用BASE64加密,得出如:
%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

  POST提交:把提交的数额放置在是HTTP包的包体<request-body>中。上文示例中红色字体标明的就是实际上的传输数据

  因而,GET提交的数据会在地点栏中体现出来,而POST提交,地址栏不会改变

2.传输数据的深浅:

   首先注脚,HTTP协议没有对传输的数据大小举办界定,HTTP协议正式也没有对URL长度举办限制。
而在骨子里开支中留存的界定重点有:

   GET:特定浏览器和服务器对URL长度有限定,例如IE对URL长度的范围是2083字节(2K+35)。对于任何浏览器,如Netscape、Fire福克斯(Fox)等,理论上尚无长度限制,其范围在于操作系统的支持。

   因而对此GET提交时,传输数据就会境遇URL长度的界定。

   POST:由于不是经过URL传值,理论上数据不受限。但骨子里各样WEB服务器会规定对post提交数据大小进行限定,Apache、IIS6都有独家的布置。

3.安全性:

    POST的安全性要比GET的安全性高。注意:那里所说的安全性和地点GET提到的“安全”不是同个概念。下面“安全”的意思仅仅是不作数据修改,而这边安全的含义是真的的Security的含义,比如:通过GET提交数据,用户名和密码将公开出现在URL上,因为(1)登录页面有可能被浏览器缓存,
(2)其外人查看浏览器的历史纪录,那么人家就足以得到您的账号和密码了,

参考文献:
百度百科 https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE/332131

CSDN博客 http://blog.csdn.net/javandroid/article/details/29884033

4、其他

   想在开辟javabean窗体时,启用一个历程,打开网址:(苹果系统用open) cmd
/c  start www.baidu.com?uid=username^&pwd=pwd (此处^可以转义&符号)

 执行按钮WHEN-BUTTON-PRESSED触发器代码为:

1 :BL.RESULT := '' ;
2 --Set_Custom_Property( 'BL.BEAN', 1, 'SET_PROG', :BL.CMD ) ;
3 -- use ^ to escape & in teh command line like this:
4 Set_Custom_Property( 'BL.BEAN',1, 'SET_PROG','cmd /c start www.microstarsoft.com?uid=username__pwd^&pwd=2') ;

 
然后用代码模拟用户单击,在窗体激活时(WHEN-WINDOW-ACTIVATED)触发按钮事件:

1 --自动执行单击事件
2 --GO_ITEM('<block_name>.<button_name>');
3 --EXECUTE_TRIGGER('WHEN-BUTTON-PRESSED');
4 GO_ITEM('BL.EXECUTE');
5 EXECUTE_TRIGGER('WHEN-BUTTON-PRESSED');

默认情状下,Oracle窗体加载后单击关闭按钮无效,在窗体的KEY-EXIT下:

1 exit_form(no_validate); 

 图片 4