当前位置: 首页 > news >正文

【JavaEE】_HTTP请求首行详情

目录

1. URL

2. 方法

2.1 GET方法

2.2 POST方法

2.3 GET与POST的区别

2.4 低频使用方法


1. URL

在mysql JDBC中已经提到过URL的相关概念:

如需查看有关JDBC更多内容,原文链接如下:

【MySQL】_JDBC编程-CSDN博客

URL用于描述某个资源在网络上的所属位置,数据库也是一种资源故而在JDBC中使用URL描述具体的一个数据库;

而在HTTP请求中的URL详情如下:

注:

1. 特殊字符的urlencode:

对于query string,如果value部分需要包含一些特殊字符,往往需要urlencode操作;

+ ? : / ......等符号在url中已有特殊用途,如果在value中也包含特殊符号,可能会使用浏览器/http服务器,对于url的解析就会出现bug,urlencode本质上就是一种转义字符

比如搜索c++,查看地址栏:

对应ASCII表:

_+的ASCII就是2B(053),加上前面的%表示这是转义的结果;

2. 中文汉字的uelencode:

如使用urlencode工具输入你好:

对应汉字“你”和“好”的ASCII表:

后面使用url时,需要针对query string的内容进行好urlcode工作,如果没有处理好,可能会导致浏览器解析失败,导致请求无法正常进行;

2. 方法

常见的HTTP请求如下:

方法说明
GET获取资源
POST传输实体主体
PUT传输文件
HEAD获得报文首部
DELETE删除文件
OPTIONS询问支持的方法
TRACE追踪路径
CONNECT要求用隧道协议连接代理
LINK建立和资源之间的联系
UNLINE断开连接关系

注:(1)方法描述了这次请求的语义,即要进行的操作

(2)GET方法最常用,其次是POST方法,其余方法使用频率都远小于这两种方法;

2.1 GET方法

触发GET请求的情况:

1. 在浏览器地址栏里直接输入URL或点击收藏夹;

2. HTML中的link标签,script标签,img标签以及a标签等;

3. 通过JS也可以构造GET请求;

2.2 POST方法

触发POST请求的情况:

(1)登录操作:以登录网页版QQ邮箱为例:

(2)上传文件

2.3 GET与POST的区别

其实GET和POST就没有本质区别,在大部分场景下彼此之间都可以彼此替代,但在使用习惯上会有差异:

1.信息存放差异

对于传给服务器的数据,GET请求一般都是把数据放在query string中,POST请求一般是把数据放在body中

2. 语义差异(数据流动方向差异)

GET请求一般用于从服务器获取数据,POST请求一般用于给服务器提交数据

注:① 以上区别只是习惯用法,GET也可以有body,POST也可以有query string,GET也可以给服务器提交数据,POST也可以从服务器获取数据等等;

②  幂等可以理解为相同的输入得到的结果是稳定的,一些资料上也会提及GET请求是幂等的,POST请求不是幂等的。这种说法也并不准确,GET与POST具体是否幂等取决于代码的实现,GET是否幂等也并不绝对,只是RFC标准文档建议GET设置为幂等的,典型的GET不幂等情况比如搜狗的广告搜索,广告的投放顺序与范围背后都有复杂的逻辑;

③ 缓存即保存请求的结果,方便下次请求直接取缓存结果从而节省时间,一些资料也会提及GET请求是可以被浏览器缓存的,POST是不可以被缓存的。这种说法也不准确,是否能够缓存是幂等性的延续,如果请求是幂等,自然就可以缓存;

④  一些资料会提及GET请求可以被浏览器收藏夹收藏,POST则不能,收藏时可能会丢失body。这个说法也不准确,具体取决于浏览器的设计,建议不作为主要的内容进行讨论。

⑤  有关于两种方法的传输数据量的上限、传递数据的安全性、传输数据类型问题的一些说法都是错误的。

2.4 低频使用方法

(1)PUT和POST相似,几乎可以互相替代。PUT只是具有幂等特性,一般用于更新;

(2)DELETE删除服务器指定资源;

(3)OPTIONS返回服务器所支持的请求方法;

(4)HEAD类似于GET,只不过响应体不返回,只返回响应头;

(5)TRACE回显服务器端收到的请求,测试的时候会使用到该方法;

http://www.lryc.cn/news/300870.html

相关文章:

  • Linux第48步_编译正点原子的出厂Linux内核源码
  • 程序员为什么不喜欢关电脑?
  • 【初始RabbitMQ】了解和安装RabbitMQ
  • Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC
  • Linux进程间通信(三)-----System V消息队列
  • Elasticsearch:混合搜索是 GenAI 应用的未来
  • 态、势、感、知的偏序、全序与无序
  • 【从Python基础到深度学习】 8. VIM两种状态
  • java微服务面试篇
  • OpenAI 生成视频模型 Sora 论文翻译
  • 2.13日学习打卡----初学RocketMQ(四)
  • ZigBee学习——BDB
  • 使用Docker快速部署MySQL
  • 力扣热题100_滑动窗口_3_无重复字符的最长子串
  • RM电控工程讲义
  • 论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE
  • C语言——oj刷题——杨氏矩阵
  • C++ 50道面试题
  • 寒假学习记录14:JS字符串
  • 【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】
  • 无人驾驶LQR控制算法 c++ 实现
  • Karnaugh map (卡诺图)
  • C# CAD 框选pdf输出
  • 【Linux】 Linux 小项目—— 进度条
  • Sora和Pika,RunwayMl,Stable Video对比!网友:Sora真王者,其他都是弟
  • Go内存优化与垃圾收集
  • 【Spring】Bean 的生命周期
  • 云计算基础-存储基础
  • 问题:人的安全知识和技能是天生的。() #媒体#知识分享#学习方法
  • 【数据分享】2001~2020年青藏高原植被净初级生产力数据集