GET请求和POST请求的表现形式、区别和如何选择

 怎么向服务器发送GET请求,怎么向服务器发送POST请求?

  - 到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method="post"。
  - 其他所有情况一律都是get请求:
    - 在浏览器地址栏上直接输入URL,敲回车,属于get请求。
    - 在浏览器上直接点击超链接,属于get请求。
    - 使用form表单提交数据时,form标签中没有写method属性,默认就是get
    - 或者使用form的时候,form标签中method属性值为:method="get"
    - ....

- GET请求和POST请求有什么区别?

  - get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,"?"后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在“请求行”上发送数据)
    - http://localhost:8080/servlet05/getServlet?username=zhangsan&userpwd=1111
  - post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体”当中发送数据)
  - get请求只能发送普通的字符串。并且发送的字符串长度有限制,不同的浏览器限制不同。这个没有明确的规范。
  - get请求无法发送大数据量。
  - post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。
  - post请求可以发送大数据量,理论上没有长度限制。
  - get请求在W3C中是这样说的:get请求比较适合从服务器端获取数据。
  - post请求在W3C中是这样说的:post请求比较适合向服务器端传送数据。
  - get请求是安全的。get请求是绝对安全的。为什么?因为get请求只是为了从服务器上获取数据。不会对服务器造成威胁。(get本身是安全的,你不要用错了。用错了之后又冤枉人家get不安全,你这样不好(太坏了),那是你自己的问题,不是get请求的问题。)
  - post请求是危险的。为什么?因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的。另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post请求。
  - get请求支持缓存。
    - https://n.sinaimg.cn/finance/590/w240h350/20211101/b40c-b425eb67cabc342ff5b9dc018b4b00cc.jpg
    - 任何一个get请求最终的“响应结果”都会被浏览器缓存起来。在浏览器缓存当中:
      - 一个get请求的路径a  对应  一个资源。
      - 一个get请求的路径b  对应  一个资源。
      - 一个get请求的路径c  对应  一个资源。
      - ......
    - 实际上,你只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。
    - 有没有这样一个需求:我们不希望get请求走缓存,怎么办?怎么避免走缓存?我希望每一次这个get请求都去服务器上找资源,我不想从本地浏览器的缓存中取。
      - 只要每一次get请求的请求路径不同即可。
      - https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=789789787897898
      - https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=789789787897899
      - https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=系统毫秒数
      - 怎么解决?可以在路径的后面添加一个每时每刻都在变化的“时间戳”,这样,每一次的请求路径都不一样,浏览器就不走缓存了。
  - post请求不支持缓存。(POST是用来修改服务器端的资源的。)
    - post请求之后,服务器“响应的结果”不会被浏览器缓存起来。因为这个缓存没有意义。

- GET请求和POST请求如何选择,什么时候使用GET请求,什么时候使用POST请求?

  - 怎么选择GET请求和POST请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想向服务器发送数据。如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。
  - 大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据是收集用户的信息,一般是需要传给服务器,服务器将这些数据保存/修改等。
  - 如果表单中有敏感信息,还是建议适用post请求,因为get请求会回显敏感信息到浏览器地址栏上。(例如:密码信息)
  - 做文件上传,一定是post请求。要传的数据不是普通文本。
  - 其他情况都可以使用get请求。

- 不管你是get请求还是post请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的:

  - name=value&name=value&name=value&name=value
  - name是什么?
    - 以form表单为例:form表单中input标签的name。
  - value是什么?
    - 以form表单为例:form表单中input标签的value。
 

### GETPOST请求返回数据给前端的格式区别 无论是GET还是POST请求,其返回数据的形式主要取决于服务器端如何设置响应头中的`Content-Type`字段以及实际返回的内容结构。通常情况下,这两种请求方式本身并不会直接影响返回数据的格式,而是由开发者决定采用何种形式来表示数据。 #### 响应数据格式 常见的返回数据格式包括JSON、XML、HTML以及其他自定义格式等。具体来说: - **JSON (JavaScript Object Notation)** 是目前最常用的轻量级数据交换格式之一,在前后端分离架构下尤为普遍。无论使用GET还是POST方法获取资源,只要服务端配置了正确的 `Content-Type: application/json` 头部信息,则客户端接收到的就是 JSON 数据[^1]。 - **XML (eXtensible Markup Language)** 曾经广泛应用于Web Services领域作为消息载体。当API接口设定为提供 XML 类型的结果时(`Content-Type:text/xml`) ,不管调用了哪种 HTTP 方法都会得到相应类型的文档对象模型树形结构[^2]。 - **HTML** 页面内容也可以通过上述两种手段加载到网页中去展示出来。比如点击超链接触发的是GET操作从而渲染新的视图页面;而提交表单可能涉及到了更多复杂逻辑处理之后再重定向至目标地址完成整个流程控制过程[^3]。 #### 实际应用案例分析 下面给出一段基于Node.js Express框架实现简单RESTful API 的例子用于说明不同场景下的实践情况: ```javascript const express = require('express'); const app = express(); // Middleware to parse incoming request bodies app.use(express.json()); // For parsing application/json app.use(express.urlencoded({ extended: true })); // For parsing application/x-www-form-urlencoded // Example of a GET endpoint returning JSON data app.get('/api/data', (req, res) => { const responseData = { message: 'This is the response from GET method.', value: 42 }; res.status(200).json(responseData); }); // Example of a POST endpoint accepting and responding with JSON data app.post('/api/submit', (req, res) => { let postData = req.body; console.log(postData); const resultMessage = { status: 'success', receivedData: postData }; res.status(201).json(resultMessage); }); app.listen(3000, () => { console.log('Server running on http://localhost:3000/'); }); ``` 在这个示例程序里分别展示了如何创建支持接收查询字符串参数并反馈固定模式化结果集的服务端点(GET),还有另一个允许用户上传任意键值对组合并通过相同的媒介类型描述成功状态通知对方已妥善保存所传入资料记录下来(Post)[^4]. 综上所述,虽然GET POST 请求之间存在诸多特性上的差异点,但在最终向消费者呈现出来的表现形态方面并无本质区别——皆可依据实际情况灵活选用适合当前业务需求的最佳解决方案即可达成预期效果.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值