首页 > 编程语言 >【博学谷学习记录】超强总结,用心分享|Java基础分享-GET 与 POST

【博学谷学习记录】超强总结,用心分享|Java基础分享-GET 与 POST

时间:2022-09-25 17:23:24浏览次数:58  
标签:body Java 请求 GET URL 浏览器 POST 分享

目录

1.GET 和 POST 有什么区别?

2.GET 和 POST 方法都是安全和幂等的吗?

3.GET 请求可以带 body 吗?

 

 

GET 与 POST

1.GET 和 POST 有什么区别?

根据 RFC 规范,GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(HTTP协议本身对 URL长度并没有做任何规定)。

比如,你打开我的文章,浏览器就会发送 GET 请求给服务器,服务器就会返回文章的所有文字及资源。

GET 请求

根据 RFC 规范,POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中, body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

比如,你在我文章底部,敲入了留言后点击「提交」(暗示你们留言),浏览器就会执行一次 POST 请求,把你的留言文字放进了报文 body 里,然后拼接好 POST 请求头,通过 TCP 协议发送给服务器。

POST 请求

2.GET 和 POST 方法都是安全和幂等的吗?

先说明下安全和幂等的概念:

  • 在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源。
  • 所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的。

如果从 RFC 规范定义的语义来看:

  • GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签。
  • POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签。

做个简要的小结。

GET 的语义是请求获取指定的资源。GET 方法是安全、幂等、可被缓存的。

POST 的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 不安全,不幂等,(大部分实现)不可缓存。

注意, 上面是从 RFC 规范定义的语义来分析的。

但是实际过程中,开发者不一定会按照 RFC 规范定义的语义来实现 GET 和 POST 方法。比如:

  • 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
  • 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。

曾经有个笑话,有人写了个博客,删除博客用的是GET请求,他觉得没人访问就连鉴权都没做。然后Google服务器爬虫爬了一遍,他所有博文就没了。。。

如果「安全」放入概念是指信息是否会被泄漏的话,虽然 POST 用 body 传输数据,而 GET 用 URL 传输,这样数据会在浏览器地址拦容易看到,但是并不能说 GET 不如 POST 安全的。

因为 HTTP 传输的内容都是明文的,虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。

所以,要避免传输过程中数据被窃取,就要使用 HTTPS 协议,这样所有 HTTP 的数据都会被加密传输。

3.GET 请求可以带 body 吗?

RFC 规范并没有规定 GET 请求不能带 body 的。理论上,任何请求都可以带 body 的。只是因为 RFC 规范定义的 GET 请求是获取资源,所以根据这个语义不需要用到 body。

另外,URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的。

标签:body,Java,请求,GET,URL,浏览器,POST,分享
From: https://www.cnblogs.com/elon-l/p/16728261.html

相关文章

  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-TCP/IP 网络模型有哪几层?
    目录1.应用层2.传输层3.网络层4.网络接口层5.总结TCP/IP网络模型有哪几层?问大家,为什么要有TCP/IP网络模型?对于同一台设备上的进程间通信,有很多种方式,比如有管道......
  • Java-方法
    什么是方法System.out.println(),那么它是什么呢?-->类.对象.方法()Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包......
  • javaScript-1 数据类型
    javaScript数据类型<!DOCTYPEhtml><html><head><title>javaScript数据类型</title></head><body><pid="typeof"></p><script>docu......
  • java循环结构
    java循环结构多数情况下,要让循环给停下来,不要死循环while循环while(布尔表达式){  //循环内容}dowhile循环do{  //循环内容}while(布尔表达式)fo......
  • Java基础语法 不同进制之间的转换
    二进制定义二进制转十进制(原码、反码、补码)十进制转二进制二进制与十六进制和八进制之间的转换packageBasicGrammar;/*计算机中不同进制的使用说明对于整数......
  • java语言中关于static的作用以及说明
    1,。static修饰的成员变量和方法从属于类。并且静态方法不能用非静态成员,否则编译会出现错误。2.静态变量和实例变量的区别   静态变量:        1.......
  • Java代码开发规范
    详细需要找阿里的不错类、方法的注释,要以Javadoc的方式来写非javaDoc的注释,往往是给代码的维护者看,着重告述读者为什么这么写,如何修改,注意什么问题等代码整体右移用tab......
  • java选择结构-switch
    java选择结构-switchjava的另一个多选择结构switch-casecase中的value为常数值。不加break,会一直执行到最后,包括default(case穿透)switch(expression){  cas......
  • java选择结构-if
    java选择结构-ifif单选泽结构if双选择结构if多选择结构if嵌套结构packagecharpter2;​importcom.sun.xml.internal.ws.addressing.WsaActionUtil;​publ......
  • java顺序结构
    java顺序结构java的基本结构就是顺序结构,一句一句执行packagecharpter2;​publicclassShunXu{  publicstaticvoidmain(String[]args){    System.o......