精华内容
下载资源
问答
  • GET和POST的区别

    千次阅读 2019-03-17 19:31:30
    HTTP协议中GET和POST方法的区别已经是老生常谈了,也是面试热门问题,我之前对此也只有一个粗浅的印象,这里来认真探讨一下。 通常的理解w3schools关于这个问题的解答: HTTP 方法:GET 对比 POST 列出了一般的理解...

    HTTP协议中GET和POST方法的区别已经是老生常谈了,也是面试热门问题,我之前对此也只有一个粗浅的印象,这里来认真探讨一下。

    通常的理解w3schools关于这个问题的解答:
    HTTP 方法:GET 对比 POST 列出了一般的理解,
    比如:

    • GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
    • GET书签可收藏,POST为书签不可收藏。
    • GET能被缓存,POST不能缓存 。
    • GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
    • GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
    • GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
    • GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
    • 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
      ** 在发送密码或其他敏感信息时绝不要使用 GET !**
    • POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。G
    • ET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。

    这个对比整体没什么毛病,但只是给出了一些现象上的区别,但并没有解释为什么,对于这个问题的理解不能就停在这一层。理解错了?有一篇文章99%的人理解错 HTTP 中 GET 与 POST 的区别,否定了上述回答:“很遗憾,这不是我们要的回答!”,
    作者说:GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    都讲到TCP了,感觉很高大上有木有,起码当时看到这篇文章的我是信了的。反转??但是在逛知乎时又看到了这篇文章:听说『99% 的人都理解错了 HTTP 中 GET 与 POST 的区别』??,指出了前文的两个错误:

    • 100 continue 只有在请求里带了Expect: 100-continueheader 的时候才有意义。When the request contains an Expect header field that includes a 100-continue expectation, the 100 response indicates that the server wishes to receive the request payload body, as described in Section 5.1.1. The client ought to continue sending the request and discard the 100 response. If the request did not contain an Expect header field containing the 100-continue expectation, the client can simply discard this interim response.

    我们通常在讨论 GET vs POST 的时候,实际上讨论的是 specification,而不是 implementation。

    什么是 specification?说白了就是相关的 RFC。

    implementation 则是所有实现了 specification 中描述的代码/库/产品,比如 curl,Python 的 requests 库,或者 Chrome。POST 请求怎么发送,根本就不是这段 RFC 在讨论的事情。RFC 中只说明了 100 continue 和 Expect header 的联系,比如你想在 GET 请求里带 body,一样可以发送 Expect: 100-continue 并等待 100 continue,这是符合标准的。也就是说,『XHR 发送两个 TCP packets』是关于 implementation 的知识,而不是关于 specification 的知识。你不能说『Chrome 在 AJAX POST 的时候会发两个 TCP packets,GET 只会发一个』是 GET 和 POST 的区别,正如你不能因为北京 PM 2.5 经常爆表就说国家关于工业废气排放的标准有问题。

    说得似乎更有道理,而且也搬出了RFC,specification,implementation这些高端词汇,这下子我这个吃瓜群众再也坐不住了,决定亲自去研究一下。

    RFC探秘

    首先,什么是RFC呢?Wiki上面的定义是:

    征求意见稿(英语:Request For Comments,缩写为RFC),是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件,以编号排定。目前RFC文件是由互联网协会(ISOC)赞助发行。

    简单理解RFC就是互联网的规范,我们通常所说的「协议」就是以RFC的形式存在,而现行的HTTP/1.1规范的RFC有如下几个: RFC7230, RFC7231, RFC7232, RFC7233, RFC7234,RFC7235。 其中RFC7231里的Section 4. Request Methods涉及到了几个HTTP方法,接下来仔细阅读这一章节。

    The request method token is the primary source of request semantics; it indicates the purpose for which the client has made this request and what is expected by the client as a successful result.

    这里牵涉到一个很重要的词语:semantic 「语义」,那么什么是语义呢?这一篇文章给出了解释:语法和语义的区别。一种语言是合法句子的集合。什么样的句子是合法的呢?可以从两方面来判断:语法和语义。语法是和文法结构有关,然而语义是和按照这个结构所组合的单词符号的意义有关。合理的语法结构并不表明语义是合法的。例如我们常说:我上大学,这个句子是符合语法规则的,也符合语义规则。但是大学上我,虽然符合语法规则,但没有什么意义,所以说是不符合语义的。

    对于HTTP请求来说,语法是指请求响应的格式,比如请求第一行必须是 方法名 URI 协议/版本 这样的格式,具体内容可以参见之前写的《图解HTTP》读书笔记里面的内容,凡是符合这个格式的请求都是合法的。

    语义则定义了这一类型的请求具有什么样的性质。比如GET的语义就是「获取资源」,POST的语义是「处理资源」,那么在具体实现这两个方法时,就必须考虑其语义,做出符合其语义的行为。

    当然在符合语法的前提下实现违背语义的行为也是可以做到的,比如使用GET方法修改用户信息,POST获取资源列表,这样就只能说这个请求是「合法」的,但不是「符合语义」的。 写到这里突然联想到XML里面的两个概念:Well Formed和Valid,似乎也正是语法和语义的理念呢。

    上文说到方法是请求语义的主要来源,也即是还有次要来源,一些请求Header可以进一步修饰请求的语义,比如一个带上了 Range Header的GET请求就变成了部分请求。

    RFC7231里定义了HTTP方法的几个性质:

    1.Safe- 安全

    这里的「安全」和通常理解的「安全」意义不同,如果一个方法的语义在本质上是「只读」的,那么这个方法就是安全的。客户端向服务端的资源发起的请求如果使用了是安全的方法,就不应该引起服务端任何的状态变化,因此也是无害的。 此RFC定义,GET, HEAD, OPTIONS 和 TRACE 这几个方法是安全的。但是这个定义只是规范,并不能保证方法的实现也是安全的,服务端的实现可能会不符合方法语义,正如上文说过的使用GET修改用户信息的情况。引入安全这个概念的目的是为了方便网络爬虫和缓存,以免调用或者缓存某些不安全方法时引起某些意外的后果。User Agent(浏览器)应该在执行安全和不安全方法时做出区分对待,并给用户以提示。

    2. Idempotent - 幂等

    幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同。按照RFC规范,PUT,DELETE和安全方法都是幂等的。同样,这也仅仅是规范,服务端实现是否幂等是无法确保的。引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。

    3.Cacheable - 可缓存性

    顾名思义就是一个方法是否可以被缓存,此RFC里GET,HEAD和某些情况下的POST都是可缓存的,但是绝大多数的浏览器的实现里仅仅支持GET和HEAD。关于缓存的更多内容可以去看RFC7234。

    在这三个特性里一直在强调同一个事情,那就是协议不等于实现:协议规定安全在实现里不一定安全,协议规定幂等在实现里不一定幂等,协议规定可缓存在实现里不一定可缓存。这其实就是上面那个作者提到的specification和implementation的关系。

    语义之争

    走到这一步,其实就明白了要理解这两个方法的区别,本质上是 「语义」的对比而不是「语法」的对比,是「Specification」的对比而不是「Implementation」的对比 。

    关于这两种方法的语义,RFC7231里原文已经写得很好了:

    The GET method requests transfer of a current selected representation for the target resource. GET is the primary mechanism of information retrieval and the focus of almost all performance optimizations. Hence, when people speak of retrieving some identifiable information via HTTP, they are generally referring to making a GET request.A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

    The POST method requests that the target resource process the representation enclosed in the request according to the resource’s own specific semantics.

    勉强渣翻一下,再加上点自己的理解:

    GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-ControlHeader的约束),GET方法的报文主体没有任何语义。

    POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。为了针对其不可缓存性,有一系列的方法来进行优化,以后有机会再研究(FLAG已经立起)。

    还是举一个通俗栗子吧,在微博这个场景里,GET的语义会被用在「看看我的Timeline上最新的20条微博」这样的场景,而POST的语义会被用在「发微博、评论、点赞」这样的场景中。

    转载地址:

    作者:杨光
    链接:https://www.zhihu.com/question/28586791/answer/145424285
    来源:知乎

    展开全文
  • hive安装Failed to get schema version报错

    千次阅读 2019-10-16 20:57:16
    org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. 看了很多 http://www.pianshen.com/article/6770212316/ 这篇最可以 但是不知道为什么,我已经改了而且重...
    schematool -dbType mysql -initSchema

    org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.

     

    看了很多

    http://www.pianshen.com/article/6770212316/

    这篇最可以

    但是不知道为什么,我已经改了而且重复了很多遍,但是不行

    但是有没有别的更好的办法,又按照步骤好好的执行,竟然成功了

    我也不知道

    现在代码的神奇可能在于不知道吧

    配置文件:

    yfl@master:~/apache-hive-1.2.1-bin/conf$ cat hive-site.xml 
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>  
    <property>  
      <name>hive.metastore.warehouse.dir</name>  
      <value>/user/hive_remote/warehouse</value>  
    </property>  
       
    <property>  
      <name>hive.metastore.local</name>  
      <value>false</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionURL</name>  
      <value>jdbc:mysql://172.27.98.108:3306/hive_remote?createDatabaseIfNotExist=true</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionDriverName</name>  
      <value>com.mysql.jdbc.Driver</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionUserName</name>  
      <value>root</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionPassword</name>  
      <value>root</value>  
    </property>  
    
    <property>
            <name>hive.metastore.schema.verification</name>
            <value>false</value>
        </property>
    </configuration>

    注释掉  /etc/mysql/mysql.conf.d/mysqld.cnf   里面的这一句    bind-address    = 127.0.0.1 

    成功

     

    第一次写这篇文章是10.16,现在是12.6

    在第二次搭建hive,我终于知道为什么会这样了,因为我之前改了密码为123,所以是密码的问题,重置密码就对了。

    展开全文
  • CompletableFuture join和get方法的区别

    千次阅读 2019-11-05 20:41:05
    join方法 /** * Returns the result value when complete, or throws an * (unchecked) exception if completed exceptionally. To better * conform with the use of common functional forms, if a ...

    join()和get()方法都是用来获取CompletableFuture异步之后的返回值

    两者的主要区别在于,join()方法产生的是RuntimeException,get()方法抛出的是受检异常(ExecutionException, InterruptedException )需要用户手动处理。

    不同的处理方式。

    join方法

     /**
         * Returns the result value when complete, or throws an
         * (unchecked) exception if completed exceptionally. To better
         * conform with the use of common functional forms, if a
         * computation involved in the completion of this
         * CompletableFuture threw an exception, this method throws an
         * (unchecked) {@link CompletionException} with the underlying
         * exception as its cause.
         *
         * @return the result value
         * @throws CancellationException if the computation was cancelled
         * @throws CompletionException if this future completed
         * exceptionally or a completion computation threw an exception
         */
         public T join() {
            Object r;
            return reportJoin((r = result) == null ? waitingGet(false) : r);
        }
    

    get方法

    
     /**
         * Waits if necessary for this future to complete, and then
         * returns its result.
         *
         * @return the result value
         * @throws CancellationException if this future was cancelled
         * @throws ExecutionException if this future completed exceptionally
         * @throws InterruptedException if the current thread was interrupted
         * while waiting
         */
        public T get() throws InterruptedException, ExecutionException {
            Object r;
            return reportGet((r = result) == null ? waitingGet(true) : r);
        }
    
    

    在这里插入图片描述

    展开全文
  • git config --global http.sslVerify false 直接去掉git的ssl验证

    git config --global http.sslVerify false
    直接去掉git的ssl验证

    展开全文
  • driver.navigate().to()driver.get()区别

    千次阅读 2017-03-16 18:37:25
    这里用到了driver.navigate().to()方法,特此mark下。下面是查询资料的收获:     最近用一个实际的web项目在学习Webdriver,关于新建一个备份任务的过程,先是有一个父页上button弹开一个子页,总共有4...
  • tf.Variable tf.get_variable区别(1)

    千次阅读 2018-04-07 16:52:37
    tensorflow中有两个关于variable的op,tf.Variable()与tf.get_variable()下面介绍这两个创建变量函数的区别 先来看看这两个函数的参数列表,就不打了,直接截图: 首先有一个区别非常明显: (1) tf.Variable() ...
  • Failed to get FIS auth token

    千次阅读 2020-11-04 11:55:51
    Mar[firebase_messaging] Failed to get FIS auth token FirebaseInstanceId(23234): Failed to get FIS auth token E/FirebaseInstanceId(23234): java.util.concurrent.ExecutionException: ...
  • 最近刚入职,想用这里办公的电脑clone自己的GitHub上面的一个代码下来用来练手研究,结果Git死活clone不下来,并且一直报错getaddrinfo() thread failed to start。如下: $ git clone ...
  • 运行卷积神经时出现了问题: tensorflow.python.framework.errors_impl.UnknownError: ... (0) **Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so...
  • 解决 Unable to get provider

    千次阅读 2019-07-18 17:00:32
    java.lang.RuntimeException: Unable to get provider com.vivo.upgrade.library.provider.FileProvider: java.lang.ClassNotFoundException: com.vivo.upgrade.library.provider.FileProvider in loader com....
  • tf.get_variable()tf.Variable()的区别(最清晰的解释)

    千次阅读 多人点赞 2019-04-27 14:27:01
    三、区别 推荐使用tf.get_variable(), 因为: 初始化更方便 比如用xavier_initializer: W = tf.get_variable("W", shape=[784, 256], initializer=tf.contrib.layers.xavier_initializer()) 方便共享变量 因为tf....
  • SSL certificate problem: unable to get local issuer certificate   这个是由于Git默认开启了SSL验证,关闭即可; 解决方式: git config --global http.sslVerify false 执行以上git命令,关闭...
  • cin、cin.get()、cin.getline()、getline()的区别

    万次阅读 多人点赞 2018-05-14 15:51:30
    测试平台g++ 5.4.0VS2015社区版。 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区。每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。...
  • 当本地curl需要访问https时,出现SSL certificate: unable to get local issuer certificate错误信息 解决办法: 到http://curl.haxx.se/ca/cacert.pem下载pem文件,并将文件拷贝到D:\phpStud...
  • 使用file_get_contents()请求链接的时候报错: failed to open stream: HTTP request failed! 原因1:url参数值没有url编码 用 urlencode($val) 来编码参数的值,注意是参数值 原因2:url中有空格 $url = ...
  • Docker: failed to export iamge: failed to create image: failed to get layer 概述 在执行docker多阶构建的时候,偶尔会出现 failed to get layer 的错误 dockerfile ## 仅供参考,不一定触发场景 FROM alpine:...
  • 最近在几周在做手游崩溃信息收集上传,拿到崩溃...本文首先简单介绍了HTTP协议,主要说明了POST方法和GET方法的区别;然后用Python实现了 对POST方法和GET方法的响应;最后用Python模拟了POST方法和GET方法的请求。
  • Error attempting to get column from result set

    万次阅读 2020-08-10 22:12:00
    当使用mybatis plus3.2.0+springboot2.1.1 报错 Error attempting to get column from result set 1.一般出现这种问题,最简单的错误可能是因为数据库的字段类型实体类的类型不一致 2.但我不是,我是因为在实体类...
  • docker中安装完httpd服务后,使用命令systemctl start httpd.service,发现报错,错误信息:Failed to get D-Bus connection: Operation not permitted 解决方法:使用命令docker run -d -name centos7 --...
  • 完美解决问题:Failed to get convolution algorithm

    万次阅读 多人点赞 2019-11-04 21:58:25
    写在前面 用pycharm或jupyter notebook运行...Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above...
  • 今天在项目中碰到一个很棘手的问题,在一款api 19的oppo ... java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "a
  • 最近在用STM8S103开发一个段码屏的项目,首次往CPU里灌写程序的时候发现程序跑飞:Failed to get execution status: SWIM error [30004]: Comm timeout,经过测试发现,是因为仿真口VCC引脚没有供电所致,一开始以为...
  • pytorch报错Unable to get repr for

    千次阅读 2019-05-29 00:43:14
    文章目录pytorch 在调试的时候,变量出现了Unable to get repr for pytorch 在调试的时候,变量出现了Unable to get repr for <class ‘torch.Tensor’>
  • you-get下载神器的安装使用

    千次阅读 2021-02-05 19:15:51
    you-get简介安装方法依赖环境:方法1:通过pip方法2:Git克隆验证视频下载B站视频下载设置下载文件的路径名称在媒体播放器中流式传输在线视频 简介 You-Get是一个很小的命令行程序,可以从网站下载媒体内容(视频...
  • electron-forge ...It looks like you are missing some dependencies you need to get Electron running. Make sure you have git installed and Node.js version 6.0.0+ 在文件夹下右键选择Git Bash He...
  • Failed to get convolution algorithm. This is probably because cuDNN failed to initialize 一开始怀疑是CUDACuDNN配置错误(要求版本匹配)。反复试验后,还是有这个错误。 最后发现可能是GPU内存不足造成的...
  • RuntimeWarning: Enable tracemalloc to get the object allocation traceback
  • 在我对一个网页配置静态文件的时候,我想改变以往那种硬编码的方式,改为动态引用. 于是,我这么引用静态文件 <link rel="stylesheet" type="text/css" href="{% static 'css/D_searchword.css' %}" />...
  • Kotlin之Set和Get

    万次阅读 2018-07-05 21:06:22
    先看下kotlin里的set和get的语法var &lt;propertyName&gt;[: &lt;PropertyType&gt;] [= &lt;property_initializer&gt;] [&lt;getter&gt;] [&lt;setter&gt;]格式就如上所...
  • Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?). 操作系统:CentOS7 执行命令:docker info、docker search、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,689,749
精华内容 1,075,899
关键字:

get和get的区别to