谈谈HTTP协议的方法里,GET和POST的区别?我来教你如何回答~
  TEZNKK3IfmPf 2024年03月30日 80 0

前言

        要想回答好这个问题,咱们先来了解以下什么是GET、POST方法,有哪些细节要注意;


一、什么是GET、POST?

1.1GET

        GET是HTTP请求最常用的方法,本质上就是浏览器通过GET方法,向服务器发起GET请求,从服务器拿到相应的数据;

什么时候会触发这个请求?

1.浏览器的地址栏中输入URL,就会触发GET;

2.HTML里的link、a、img、script会触发GET请求;

3.html中的form标签可以构造出GET请求;

4.使用 JavaScript 的 ajax 也可以构造 POST 请求

很多人的误区:“GET请求长度长度最多是1KB / 2KB ...?”;这个说法真的正确吗?

        HTTP 协议由 RFC 2616 标准定义, 标准原文中明确说明: "Hypertext Transfer Protocol -- HTTP/1.1," does not specify any requirement for URL length.

        也就是说,标准中,并未对URL的长度做出限制;其实虽然没有提到有长度上限,但是浏览器和HTTP服务器在实现的时候,可能有长度上线,也可能没有,具体要看如何实现了;

1.2POST

        POST是用来将用户输入的数据发送给服务器的一种方法;(例如一些网站的登录界面,当你输入账号和密码,提交以后,便会执行这个方法);

什么时候会触发这个请求?

1.通过 HTML 中的 form 标签可以构造 POST 请求

2.使用 JavaScript 的 ajax 也可以构造 POST 请求

POST请求的特点

1.POST请求中,首行第一部分为POST;

2.URL一般没有query string;

3.header 部分有若干个键值对结构.

4.body部分的数据格式有很多种,一般不会为空;


二、如何轻松回答?

第一步、直接盖棺定论:

        GET和POST没有本质区别,使用GET的场景基本都可以使用POST代替,使用POST的场景也可以用GET代替;

第二步、谈细节上的区别:

细节一:(语义上)

        GET语义:从服务器获取一个数据;

        POST语义:往服务器提交一个数据;

        虽然HTTP协议说是这么说,但是很多程序员还是没有遵守这个约定~

细节二:(使用习惯上)

        习惯上,给服务器传递数据,GET通常放在URL的query string中,POST通常是放在body;中;

        GET能放在body中吗?可以滴,HTTP客户端支持,但是浏览器不一定支持;

        POST能放在query string中吗?可以呢!浏览器和客户端都支持~

细节三:(幂等)

        GET请求建议实现成“幂等”的,POST不做要求;(幂等性:比方说一个函数的方法是1 + 1,结果等于2,你调用一次结果是2,你调用n次结果依然是2,不会改变);

        服务器设计时会提供一些api:api传入的参数视为输入,返回的结果视为输出;基于GET的api建议设置成幂等的,POST不做要求;

细节四:(缓存)

        在幂等的基础上,GET请求结果是可以被缓存的,POST一般不缓存;

        这时浏览器默认的,若当前GET时幂等的,就不做处理,让浏览器缓存;若当前GET不是幂等的,就需要通过特殊技避免产生缓存;(技巧就是让GET请求的URL都不同,通过特殊的query string保证URL不同);

细节五:(数据长度限制)

        由于 GET 请求一般放在 URL 中,因此请求的数据长度受到限制,安全 URL 长度限制通常为 2048 个字符,最多可传输 2KB 的数据,但因浏览器和 Web 服务器而异。

        POST 请求无限制。

POST比GET更安全,这个说法正确吗?

        虽然在登录界面GET把参数放到的URL中确实不好,但是放到POST的body中,也一样没有更安全;因为咱们平时谈到的是否安全,是指:你的数据被黑客截获后,会不会对你造成信息泄漏这样的影响,只要你的代码没有进行加密,就谈不上安全;

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年03月30日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月12日   12   0   0 http
  TEZNKK3IfmPf   2023年11月14日   14   0   0 http
  TEZNKK3IfmPf   2024年03月29日   14   0   0 服务器http
  TEZNKK3IfmPf   2024年04月19日   18   0   0 TCPhttp
TEZNKK3IfmPf