精华内容
参与话题
问答
  • get请求和post请求的详细区别

    万次阅读 多人点赞 2019-06-06 16:29:40
    GET和POST是HTTP请求的...你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻...

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。

     

    最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

     

    你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。

     

    当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

     

    你轻轻松松的给出了一个“标准答案”:
     

    • GET在浏览器回退时是无害的,而POST会再次提交请求。

       

    • GET产生的URL地址可以被Bookmark,而POST不可以。

       

    • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

       

    • GET请求只能进行url编码,而POST支持多种编码方式。

       

    • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

       

    • GET请求在URL中传送的参数是有长度限制的,而POST么有。

       

    • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

       

    • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

       

    • GET参数通过URL传递,POST放在Request body中。

    (本标准答案参考自w3schools)

     

    “很遗憾,这不是我们要的回答!”

     

    请告诉我真相。。。

     

    如果我告诉你GET和POST本质上没有区别你信吗? 


    让我们扒下GET和POST的外衣,坦诚相见吧!


    GET和POST是什么?HTTP协议中的两种发送请求的方法。

     

    HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

     

    HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 

     

    那么,“标准答案”里的那些区别是怎么回事?

     

     

     

    在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

     

    但是,我们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里关于参数大小的限制又是从哪来的呢?

     


     

    在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

     

    好了,现在你知道,GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 

     

    你以为本文就这么结束了?

     

    我们的大BOSS还等着出场呢。。。

     

    这位BOSS有多神秘?当你试图在网上找“GET和POST的区别”的时候,那些你会看到的搜索结果里,从没有提到他。他究竟是什么呢。。。

     

    GET和POST还有一个重大区别,简单的说:

    GET产生一个TCP数据包;POST产生两个TCP数据包。

     

    长的说:

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

     

    也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

     

    因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

    1. GET与POST都有自己的语义,不能随便混用。

    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

     

    现在,当面试官再问你“GET与POST的区别”的时候,你的内心是不是这样的?

     

    结束!!!

    原文:https://www.cnblogs.com/logsharing/p/8448446.html

    想了解更多java基础知识,关注个人微信公众号:小周只会基础

    (公众号是新申请的,有问题留言就行,后期有时间会完善公众号)

    展开全文
  • 交换机设置定时脚本发送get请求

    万次阅读 2020-01-14 15:00:28
    { localserver"http://192.168.1.58:8999/dynamicdns" :localipaddr[/ipaddressget[/ipaddressfindinterface="pppoe-out1"]address] :setipaddr[:pick$ipaddr0([len$ipaddr]-3)] localpar"\?&...

    {
    local server "http://192.168.1.58:8999/dynamicdns"
    :local ipaddr [/ip address get [/ip address find interface="pppoe-out1"] address]
    :set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)]
    local par "\?&ip=$ipaddr"
    /tool fetch url=($server . $par) mode=http 
    /ip firewall address-list add address=$ipaddr disabled=no list=pppoe
    }

    展开全文
  • springboot项目 绑定了https协议 但是http的post请求后自动转换成https请求get请求 请问大佬如和将https的get请求转换为post请求 ``` @Bean public EmbeddedServletContainerFactory servletContainer()...
  • php 网络请求 get请求和post请求

    千次阅读 2018-10-28 19:02:04
    微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 代码记录 <?php header('content-type:application:json;charset=utf8');...//header('Access-Control-Allow-Method...

    微信小程序开发交流qq群   173683895

       承接微信小程序开发。扫码加微信。

     

    代码记录

    <?php
    header('content-type:application:json;charset=utf8'); 
    header('Access-Control-Allow-Origin:*'); 
    //header('Access-Control-Allow-Methods:POST'); 
    header('Access-Control-Allow-Headers:x-requested-with,content-type');
    	//访问小程序获取二维码图片试试,听说是二进制图片
    	qd_code_dsh();
    	//多店铺二维码  一店一码
    	function qd_code_dsh(){
    		$arr = array(
    			 'path' => '/pages/index/index?dsh_id=1',
    			 'width' => 430,
    			 'scene' => 0
    			);
    		
    		$path = json_encode($arr);
    		
    	 $post_data=$path;
    	   $url="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".get_accessToken();
    	   //$url="https://api.weixin.qq.com/wxa/getwxacode?access_token=".get_accessToken();
    	  
    	   $result=api_notice_increment($url,$post_data);
    		
    	   echo $result;
    	 
    	}
    
    
    	function api_notice_increment($url, $data){
    		$ch = curl_init();
    		$header = "Accept-Charset: utf-8";
    		curl_setopt($ch, CURLOPT_URL, $url);
    		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    		curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    		$tmpInfo = curl_exec($ch);
    		//     var_dump($tmpInfo);
    		//    exit;
    		if (curl_errno($ch)) {
    		  return false;
    		}else{
    		  // var_dump($tmpInfo);
    		  return $tmpInfo;
    		}
    	  }
    
    
        /* 调用微信api,获取access_token,有效期7200s -xzz0704 */
        function get_accessToken(){
            /* 直接返回access_token */
            $result = curl_get_https("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxdcdbc3696ede3ec5&secret=b57a681d90f5d8552c1486831241c950");
    		   $res = json_decode($result,true);   //json字符串转数组
                if($res){
                    return $res['access_token'];
                }else{
                    return 'api return error';
                }
        }
        
        function curl_get_https($url){
    		$curl = curl_init(); // 启动一个CURL会话
    		curl_setopt($curl, CURLOPT_URL, $url);
    		curl_setopt($curl, CURLOPT_HEADER, 0);
    		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    		//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
    		$tmpInfo = curl_exec($curl);     //返回api的json对象
    		//关闭URL请求
    		curl_close($curl);
    		return $tmpInfo;    //返回json对象
    	}
    ?>

     

    展开全文
  • java调用HTTP接口(Get请求和Post请求)

    万次阅读 多人点赞 2018-09-14 16:43:27
    前提: 一个Http接口:...name=99999999 id和name是传入的参数 浏览器访问接口: ...java代码调用Http接口代码如下(代码中注释分为两部分:处理get请求和post请求): package com.inspur.OKHTTP...

    前提:

    一个Http接口:http://172.83.38.209:7001/NSRTRegistration/test/add.do?id=8888888&name=99999999

    id和name是传入的参数

    浏览器访问接口:

    java代码调用Http接口代码如下(代码中注释分为两部分:处理get请求和post请求):

    package com.inspur.OKHTTP;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class TESTOKHttp {
    
    	 /**
         * 调用对方接口方法
         * @param path 对方或第三方提供的路径
         * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析
         */
        public static void interfaceUtil(String path,String data) {
            try {
                URL url = new URL(path);
                //打开和url之间的连接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                PrintWriter out = null;
                
                /**设置URLConnection的参数和普通的请求属性****start***/
               
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); 
                
                /**设置URLConnection的参数和普通的请求属性****end***/
                
                //设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
                //最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
                //post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
                conn.setDoOutput(true);
                conn.setDoInput(true);
                
                conn.setRequestMethod("GET");//GET和POST必须全大写
                /**GET方法请求*****start*/
                /**
                 * 如果只是发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可;
                 * 如果发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。
                 * */
                conn.connect(); 
                
                /**GET方法请求*****end*/
                
                /***POST方法请求****start*/
                
                /*out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流 
                
                out.print(data);//发送请求参数即数据
                
                out.flush();//缓冲数据
                */            
                /***POST方法请求****end*/
                
                //获取URLConnection对象对应的输入流
                InputStream is = conn.getInputStream();
                //构造一个字符流缓存
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String str = "";
                while ((str = br.readLine()) != null) {
                	str=new String(str.getBytes(),"UTF-8");//解决中文乱码问题
                    System.out.println(str);
                }
                //关闭流
                is.close();
                //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
                //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
                conn.disconnect();
                System.out.println("完整结束");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {
        	
        	interfaceUtil("http://172.83.28.221:7001/NSRTRegistration/test/add.do?id=8888888&name=99999999", "");//get请求
           
            /*interfaceUtil("http://172.83.28.221:7001/NSRTRegistration/test/add.do",
                 "id=8888888&name=99999999");*///post请求
        }
    
    }
    

    运行java代码:

    一个朋友新做的公众号,帮忙宣传一下,会不定时推送一些开发中碰到的问题的解决方法,以及会分享一些开发视频。资料等。请大家关注一下谢谢:

    展开全文
  • 如何将一个json数组拼接到http Get请求的url后面? 我是在后台程序中模拟请求,用httpClient实现。有如下几种尝试: ... 处理报错 url格式不规范 ... 请大神们帮忙解答一下 如何将一个数组添加到get请求的url后面
  • Ajax get请求示例

    万次阅读 2019-07-03 08:27:39
    正好早上有时间,代码: $.ajax({ type:'GET', url:'proinfo', data:data, success:function(result){ //返回成功进行响应操作 //把获取信息填...
  • java拼接get请求的url请求地址

    万次阅读 2017-10-01 09:52:47
    java拼接get请求的url请求地址 /** * 拼接get请求的url请求地址 */ public static String getRqstUrl(String url, Map, String> params) { StringBuilder builder = new StringBuilder(url); b
  • iOS-GET请求详细操作-GET设置请求头

    千次阅读 2016-03-04 12:12:15
    难得一次备注相当详细的原生GET网络请求操作,强迫症一样记录下来和大家分享… 也备复制用-(void)getResult{ _MB = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; //接口路径 ...
  • thinkjs接收get请求、post请求

    万次阅读 2020-07-03 17:38:35
    文章目录笔者使用环境:服务端对前端请求进行校验服务端接收前端的请求参数GET请求POST请求 笔者使用环境: 服务端:thinkjs 前端:react 请求:umi-request 服务端对前端请求进行校验 文件目录: src/logic/user.js...
  • get请求中url传参中文乱码问题--集锦

    万次阅读 多人点赞 2015-11-24 14:07:27
    ================================================= 分享一个好友的人工智能教程。零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助!... ================================================= ...
  • c#发送get请求

    千次阅读 2016-09-13 00:34:38
    c#发送get请求
  • java进行一次get请求,少说都要洋洋洒洒一两百行代码,创建流,发请求,解析数据,关闭流等等 而python就四行 业务代码 import requests #请求地址 url = ...
  • 项目是用ssh1写的,但是有个form表单已经写好了用的是get请求提交的,现在想改成post请求提交,不知该从哪儿下手。。。求高手赐教
  • URLEncodedUtils.format(params, "UTF-8")是不是只能用于get请求 还有能不能帮我写一个get请求的例子。 里面有涉及有设置参数的。 如:httpget get = new httpget(); get.setXXX(); httpresponse response = ...
  • http get请求和post请求的格式区别

    万次阅读 2017-05-05 00:28:06
    写了一个cgi, 支持get请求, 在fiddler中重放get请求, 一切正常, 参数格式如下: GET /cgi-bin/my_cgi?uin=12345&appID=20&content=xxx HTTP/1.1 Host: x.y.z.com  现在要支持post请求, 如果想当然地改成 POST...
  • 其中有一个 get 请求的接口,最开始时使用 json 传递参数并用 @RequestBody 进行参数接收。但是使用这种方式是 FeignClient 调用会在服务提供端产生 Required request body is missing 的错误。 在将请求参数改为...
  • golang带cookie post get请求 例子

    万次阅读 2016-07-04 14:41:43
    golang带cookie post get请求 例子// test project main.go package mainimport ( "fmt" "io/ioutil" "net/http" "net/url" )type Jar struct { cookies []*http.Cookie }func (jar *Jar) SetCooki
  • nodejs接收get请求参数

    万次阅读 2017-11-30 23:20:23
    nodejs接收get请求参数 1.1-浏览器向服务器发送get请求参数的两种方式 1.2-服务端使用url模块解析get请求参数 在http协议中,一个完整的url路径如下图通过下图我们可以得知,get请求的参数是直接在url路径中显示。 ...
  • 使用curl 命令模拟POST/GET请求

    万次阅读 多人点赞 2017-05-09 11:43:06
    curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载。... 在进行web后台程序开发测试过程中,常常会需要发送url进行测试,使用curl可以方便地模拟出符合需求的url命令 ...
  • 我使用的是HttpGet请求,将留言内容直接拼接在url上面的。 可是,当留言内容中间出现空格时,执行HttpGet get = new HttpGet(url)语句时会抛异常:IllegalArgumentException 请教各位大神,这个怎么办啊?
  • GET请求和POST请求

    千次阅读 2016-08-06 11:13:31
    在 HTTP/1.1 协议中,定义了 9 种发送 http 请求的方法 GETPOSTHEADPUTDELETEOPTIONSTRACECONNECTPATCH(新引入) 以上几种方法仅供参考了解,http 请求的方法里面该如何实现交由服务器处理,客户端只...GET和PO
  • #get请求: #第一个方法 import urllib import urllib2 def getUrllibFun(url): headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'} req = urllib2....
  • 看图   普通浏览器请求   Ajax请求
  • get请求改post请求

    千次阅读 2018-01-09 16:47:44
    get请求不安全,还有长度受限制。在项目中url参数过长超出浏览器限制,点击查询失败,页面时白色的。修改思路是:写一个隐藏form。结果:修改后查询正常。 原来get请求: window.location.href = “/obm/...
  • Feign消费服务时POST/GET请求方式

    万次阅读 热门讨论 2018-06-23 18:59:14
    feign消费服务时,以GET方式请求的条件: 如果想让服务消费者采用GET方式调用服务提供者,那么需要: 服务消费者这边feign调用时,在所有参数前加上@RequestParam注解。 服务消费者这边feign调用时,指明为GET...
  • Python爬虫:Scrapy的get请求和post请求

    千次阅读 2018-11-08 12:09:19
    get请求 from scrapy import Spider, Request, cmdline class SpiderRequest(Spider): name = &amp;quot;spider_request&amp;quot; def start_requests(self): url = &amp;quot;http...
  • Unity3d Http Get请求

    千次阅读 2014-04-22 11:13:24
    public static IEnumerator LoginRequest(string userid, string passwd, Action action) { xDebug.Log("GetRequest 1"); string url = "http://sdk.m.duoku.com/openapi/client/login?";
  • java发起get请求

    万次阅读 2019-07-18 10:35:49
    java后台发起get请求 学习记录: 话不多说直接上代码: package com.jl.chromeTest; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; ...

空空如也

1 2 3 4 5 ... 20
收藏数 95,674
精华内容 38,269
关键字:

get请求