【JavaEE初阶】HTTP协议|HTTP请求方法|GET|POST|GET和POST的区别|问题辨析

2024-05-28 18:20

本文主要是介绍【JavaEE初阶】HTTP协议|HTTP请求方法|GET|POST|GET和POST的区别|问题辨析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

认识"⽅法"(method)

1.GET⽅法

GET请求的特点

2.POST⽅法

POST请求的特点

💡经典⾯试题:谈谈GET和POST的区别

💡问题辨析:

3.其他⽅法


💡推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】


认识"⽅法"(method)

HTTP请求首行里,包含了方法,eg:GTET,POST它们描述了这次请求要干啥

虽然HTTP中的方法由很多种,但是我们主要需要掌握两个GET和POST

1.GET⽅法

语义:从服务器获取某个数据(实际开发中,GET也可用来提交某个数据)

网络上大部分请求都是GET,通过query string告诉服务器搜索啥,服务器返回搜索结果完整网页

GET请求的特点

(1)首行的第一部分为GET

(2)URL的query string可以为空,可以不为空

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

(4)body部分为空

💡拓展:关于GET请求的URL⻓度问题

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

没有对URL的⻓度有任何的限制.

实际URL的⻓度取决于浏览器的实现和HTTP服务器端的实现.在浏览器端,不同的浏览器最⼤⻓度是不同的,但是现代浏览器⽀持的⻓度⼀般都很⻓;在服务器端,⼀般这个⻓度是可以配置的


2.POST⽅法

语义:往服务器发送/提交某个数据(实际开发中,POST也可用来获取某个数据)

POST请求的特点

(1)首行的第一部分为POST

(2)URL的query string 一般为空(也可以不为空)

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

(4)body部分一般不为空,body内的数据格式通过header中的Content-Type指定,body的长度由header中的Content-Length指定

💡经典⾯试题:谈谈GET和POST的区别

本质上来讲,没啥区别

使用习惯上来讲,还是有区别的:

(1)语义:GET从语义上来说,通常用来“获取数据”;POST从语义上来说,通常用来“提交数据”

(2)传递数据:GET传递数据的时候,通常使用query string;POST传递数据的时候,通常使用body

(3)幂等:服务器对于GET请求设计,经常是设计成“幂等”的;而POST请求的设计,则不要求“幂等”(幂等:简单理解就是每次访问结果都一样,不会变化)

这个要求是HTTP协议标准文档中给出的建议

eg:搜狗的广告系统,虽然是GET请求,但是是不幂等的,同一个人,不同的时间搜索,结果不一样,不同的人,进行搜索,结果也不一样(千人千面)

(4)缓存:GET请求的结果可以被缓存,可以被浏览器收藏夹收藏;但是POST一般不行

eg:一些网站,通过GET获取一些图片,浏览器就可以缓存这些图片,下次访问这个网站就不必从网络获取,直接从之前缓存的数据获取(缓存在硬盘上)

💡问题辨析:

 (1)关于安全性:POST比GET更安全 (错误)

论据:就拿登录来说,提交登录请求这一下,如果使用GET,GET把参数放到URL中,URL会显示到浏览器地址栏

辨析:POST请求也一样不安全,不是说密码显示到浏览器地址栏就不安全,也不是说放到body中就安全,安不安全,取决于加密,放到body中,一旦被抓包,也是会被看干净的

解决:在前端js代码中进行加密,点击登录按钮,就是触发一个js代码,这个代码里,获取到密码框的内容,对内容进行加密,构造http请求,发送出去等待响应,响应就会告诉浏览器,是登录成功还是失败,如果失败,给出提示;如果成功,跳转到网站主页

(2)关于传输数据量:GET传输数据量比较有限,比较短,POST传输的数据量比较长,没有限制(错误)

辨析:HTTP标准中,明确说了,针对GET的URL的长度是不做任何限制的,实践中,是可以构造一个很长的URL的,对于POST也没有规定body的长度,两者传输量多少,完全取决于不同浏览器和不同服务器之间的实现区别

(3)关于传输数据类型:GET只能传输文本数据,POST可以传输文本,也可传输二进制(错误)

辨析:对于GET方法,URL的query string中提供了urlencode机制,所以二进制数据,也是可以进行encode得到转义,并进行传输的

对于POST方法可以直接传输二进制,很多时候,也是转义了之后通过文本的方式来传的(gitee上传图片就是这样)


3.其他⽅法

• PUT与POST相似,只是具有幂等特性,⼀般⽤于更新

• DELETE删除服务器指定资源

• OPTIONS返回服务器所⽀持的请求⽅法

• HEAD类似于GET,只不过响应体不返回,只返回响应头

• TRACE回显服务器端收到的请求,测试的时候会⽤到这个

• CONNECT预留,暂⽆使⽤

上述这些HTTP请求,都是如何构造的呢?

这些⽅法的HTTP请求可以使⽤ajax来构造.(也可以通过⼀些第三⽅⼯具)

任何⼀个能进⾏⽹络编程的语⾔都可以构造HTTP请求.本质上就是通过TCP socket写⼊⼀个符合 HTTP协议规则的字符串.

而对于GET请求

(1)在浏览器地址栏直接输入URL,此时就是GET请求,点击收藏夹,同理的效果

(2)网页html中可能有一些特殊的标签,img/a/link...这些标签,会带有一个URL作为属性,页面被浏览器加载后,解析到这些标签,就会根据URL构造出新的HTTP请求

(3)表单 html中的特殊标签form

(4)通过js构造:比如使用原生的ajax api/ jquery的ajax api / 一些第三方库axios,fetch等(这些都属于前端技能)

对于POST请求:

(1)表单

(2)js

这篇关于【JavaEE初阶】HTTP协议|HTTP请求方法|GET|POST|GET和POST的区别|问题辨析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011336

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu