浅析get和post在HTTP编程中的使用方式

开发 前端
我们这里将要介绍的是get和post在HTTP编程中的使用方式,希望本文能对大家有所帮助。

本文将要介绍如何在HTTP编程中,get和post两个关键字的混合用法,希望通过本文,能对关键字的最大长度以及功能有所了解。

问题来源于get和post的特点和限制。对于get请求,我们可以很方便的使用window.opener的方式与父页面进行通讯,但是根据http协议的规定,url最大长度是2083个字节,可以用于GET传递数据的长度是2048个字节。对于post请求,虽然没有最大长度的限制,却不能方便的使用window.opener与父页面进行通讯。

关于如何使用javascript自动将一段get请求转变成一个post请求,网上有很多的方法,其主要思想就是动态构造一个iframe,并将get请求中的url参数值赋给input控件,最后设置form的action地址并调用submit方法。

园子里有人已经给出一个解决方法,http://www.cnblogs.com/ppchen/archive/2008/03/18/1109607.html
这里转载如下:

  1. Code  
  2. var PostNewWin = function(url){  
  3. var urlurlArr = url.split("?");  
  4. var postUrl = urlArr[0];  
  5. var postData = urlArr[1];  
  6. var iframe = document.getElementById("postData_iframe");  
  7. if(!iframe){  
  8. iframe = document.createElement("iframe");  
  9. iframe.id = "postData_iframe";  
  10. iframe.scr"about:blank";  
  11. iframe.frameborder = "0";  
  12. iframe.style.width = "0px";  
  13. iframe.style.height = "0px";  
  14.  
  15. var form = document.createElement("form");  
  16. form.id = "postData_form";  
  17. form.method = "post";  
  18. form.target = "_blank";  
  19.  
  20. document.body.appendChild(iframe);  
  21. iframe.contentWindow.document.write("<body>" + form.outerHTML + "</body>");  
  22. }  
  23. iframe.contentWindow.document.getElementById("postData_form").innerHTML = "<input name='postData' id='postData' type='text' value='" + postData + "'/>";  
  24. iframe.contentWindow.document.getElementById("postData_form").action = postUrl;  
  25. iframe.contentWindow.document.getElementById("postData_form").submit();  
  26. }; 

例如原来有一个函数,使用get请求打开新页面

  1. function openNewWindow()  
  2. {  
  3. var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;  
  4. var win =window.open(url);   

因为ur的长度问题,现在改为使用post方式提交,如下所示:

  1. function openNewWindow()  
  2. {  
  3. var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;  
  4. //var win =window.open(url);   
  5. PostNewWin(url);  

这里有一个问题就是,使用这种方式后,就无法使用window.opener与父页面进行交互了,因为通过这个函数,已经将get请求变成一个post请求了。为了可以使用post的方式提较大数据,同时也可以使用window.open(url)方式的window.opener与父页面通讯,在这里做一点小的改版,首先使用window.open(url)时候,增加一个参数,指定打开窗口的名称,,如下所示:

  1. function openNewWindow()  
  2. {  
  3. var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;  
  4. var winName  = "";  
  5. var win =window.open("about:blank",winName );   
  6. PostNewWin(url,winName);  
  7. }  
  8. 同时修改PostNewWin函数,将这个新窗口的句柄传递给这个函数,将post请求的target设置为这个参数,如下所示:  
  9. var PostNewWin = function(url,winName){  
  10. .........  
  11. form.target = winName;   
  12. .......  
  13. }; 

这样就可以同时使用post和get两种方式的优点了。

原文标题:http编程中的get和post混合使用方式

链接:http://www.cnblogs.com/chegan/archive/2009/09/28/1575536.html

【编辑推荐】

  1. 学习C#实现HTTP协议:多线程文件传输
  2. 用来访问HTTP服务器的仿java.net功能类
  3. Python HTTP服务快速搭建
  4. 有关客户端浏览器缓存的HTTP头介绍
  5. JBoss Netty 3.1发布 新增HTTP隧道功能
责任编辑:彭凡 来源: 博客园
相关推荐

2014-07-24 10:00:21

2015-01-05 10:07:24

HTTPGETPOST

2011-08-02 13:35:41

iOS开发 Get Post

2011-06-08 11:02:14

GetPost

2016-09-23 15:10:10

HTTPGETPOST

2009-07-29 16:53:52

ASP.NET Get

2019-05-15 16:15:08

HTTPGETPOST

2019-08-08 16:00:08

HTTPGETPOST

2023-08-07 09:25:06

GETPOSTHTTP请求

2011-06-08 11:05:38

getpost

2009-06-16 15:20:48

ApplicationJSP程序

2017-05-24 09:43:42

2009-08-03 13:12:34

ASP.NET编程模型

2009-09-10 16:38:43

C# get set用

2011-08-29 17:27:47

HTML 5交互移动应用

2010-03-03 17:44:07

Python多线程

2021-03-06 14:22:39

池化对象类库

2020-12-09 09:22:53

GETPOSTWeb

2019-02-14 19:00:13

2009-08-03 11:21:47

ASP.NET编程模型
点赞
收藏

51CTO技术栈公众号