目录
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回显服务器端收到的请求,测试的时候会使用到该方法;