【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请求的参数主要放在请求正文当中。


相关文章
|
14天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
22天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
1月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
28 2
|
1月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
23 1
|
25天前
|
Java
Java代码解释静态代理和动态代理的区别
### 静态代理与动态代理简介 **静态代理**:代理类在编译时已确定,目标对象和代理对象都实现同一接口。代理类包含对目标对象的引用,并在调用方法时添加额外操作。 **动态代理**:利用Java反射机制在运行时生成代理类,更加灵活。通过`Proxy`类和`InvocationHandler`接口实现,无需提前知道接口的具体实现细节。 示例代码展示了两种代理方式的实现,静态代理需要手动创建代理对象,而动态代理通过反射机制自动创建。
|
27天前
|
缓存 算法 Java
Java 中线程和纤程Fiber的区别是什么?
【10月更文挑战第14天】
59 0
|
8天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
17天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
4天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
22 9
|
7天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####