찾다

 >  Q&A  >  본문

javascript - POST/GET在协议层的区别是什么?

POST/GET在协议层的区别是什么?

大家讲道理大家讲道理2819일 전582

모든 응답(4)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-10 12:50:23

    如果想深入了解,建议阅读http://www.ietf.org/rfc/rfc2616.txt文档相关章节,以下简单罗列部分主要的区别:

    GET:字面理解就是获取资源

    • GET请求标准上是幂等的(用户应该认为请求是安全的-资源不会被修改,这里所以说应该是服务器端并不保证资源不会被修改)
    • GET请求可以被浏览器缓存;响应也可以被缓存(根据缓存头信息来处理)
    • GET请求可以保存在浏览器历史记录中,也可以作为链接分发或分享
    • GET请求的数据都在URL中,可以方便都从浏览器中获取数据(因此不能携带诸如密码的明文数据)
    • GET请求的长度会有限制(比如IE的路径总长度需小于2048个字符)
    • GET请求的数据只能包含ASCII字符

    POST:字面理解就是发布新资源

    • POST请求标准上不是幂等的(用户应该认为请求是有副作用的-可能会导致资源修改)
    • POST请求URL可以被浏览器缓存,但是POST数据不会被缓存;响应可以被缓存(根据缓存头信息来处理)
    • POST请求不便于分发或分享,因为POST数据会丢失
    • POST请求没有长度限制,可以用来处理“请求数据”很大的场景(只要不超过服务器端的处理能力)
    • POST请求的数据不限于ASCII字符,可以包含二进制数据

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-10 12:50:23

    一个以 GET xxx 开头,一个以 POST xxx 开头。一个不能带请求体,另一个可以。具体自己看 HTTP 协议,或者玩玩 telnet / wget / curl / Firebug / Wireshark 之类。

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-10 12:50:23

    前端乱炖上收集到的一个答案,感觉有点眉目了 @ 羽音篠之

    GET 请求所带的 query 是在 HTTP 头里面的,POST 请求所带的 data 是在正文里面的。
    
    哪里是 HTTP 头,哪里又是 HTTP 正文呢?
    
    传输层上遇到的第一个 \r\n\r\n 之前的序列是 HTTP 头部,之后的序列就是 HTTP 正文了。
    
    可以稍微去看看 Wikipedia 上的 HTTP 节。
    
    更仔细的协议细节请参考 RFC 文档,那里面有最基本、详细的协议表述(虽然文字是有点乏味啦)
    
    语义上的细微差别……就是个比较哲♂学的问题了……
    

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-10 12:50:23

    建议书籍,HTTP权威指南 ISBN:9787115281487

    회신하다
    0
  • 취소회신하다