【Java】GET 和 POST 请求的区别

简介: 【Java】GET 和 POST 请求的区别

1. GET 和 POST 请求的区别

GETPOST请求是最常用的两种请求方法,写了几个Servlet项目,发现这两种请求用的实在是多,给我的感觉就是这两个请求仿佛只有一个名字不同而已。但是通过查询资料发现,里面大有文章。HTTP协议定义的方法类型一共有以下10种:

目前大部分网站都使用的是HTTP 1.1 协议

在平常我们使用的最多的就是GETPOST协议

1.1 相同点和最本质的区别

1.1.1 相同点

GETPOST请求底层都是基于TCP/IP协议实现的,使用其中任何一个都可以实现客户端和服务器端的双向交互。

1.1.2 最本质的区别

GETPOST最本质的区别就是“约定和规范”上的区别,在规范当中,定义GET请求是用来获取资源,也就是查询操作,而POST是用来传输实体对象的,因此会使用POST来进行添加、删除、和修改等操作。而删除操作应该是DELETE请求来完成,但是在实际当中使用POST来完成删除操作的更多一些。按照约定来说,GETPOST的参数也是不同的,GET请求是将参数拼加到URL进行参数传递的,而POST是将参数写入到请求正文当中进行传递的。

GET请求:

POST请求:

1.2 非本质区别

1.2.1 缓存不同

GET请求一般会被缓存,比如常见的CSS、JS、HTML请求都会被缓存;而POST请求默认是不进行缓存的。

1.2.2 参数长度限制不同

GET请求的参数是通过URL传递的,而URL的长度是有限的,一般为2k,浏览器厂商不同、版本不同限制的大小可能也不同,但是它们一定会对URL的大小进行限制;而POST请求参数是存放在请求正文当中的,所以大小没有限制。

1.2.3 回退和刷新不同

GET请求可以直接进行回退和刷新,不会对用户产生任何影响;而POST请求如果直接进行回退和刷新,将会把数据再次提交。

1.2.4 历史记录不同

GET请求的参数会保存在历史记录当中,而POST请求的参数不会保存在历史记录当中。

1.2.5 书签不同

GET请求的参数可以被收藏为书签,而POST请求不行。

1.3 总结

GETPOST请求是HTTP请求中最常用的两种请求方式,它们的底层都是基于TCP/IP实现的。它们主要有五个方面的区别:缓存不同、参数长度不同、回退和刷新不同、历史记录是否保存不同、书签不同。但是两者最大的区别就是约定和规范的不同,规定中GET是用来获取信息的,而POST是用来传递实体的,并且GET请求的参数主要放在URL当中,而POST请求的参数主要放在请求正文当中。


相关文章
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
85 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
22天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
46 6
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
84 14
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
66 8
|
2月前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
JSON Java 数据格式
JAVA获取GET和POST请求参数
JAVA获取GET和POST请求参数
2120 0
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
13天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
13天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。