GET 请求设计的目的在于查询服务器,而 POST 请求用于提交数据。但是,除了技术目的之外,攻击查询参数比攻击主体参数更容易,因为向原始站点发送链接或在博客或注释中发布链接更容易,而且得到的结果比另一种方法更好,为了攻击带有主体参数的请求,攻击者需要创建其中包含表单的页面,当受害者访问表单时就会提交表单。说服受害者访问他不了解的页面比让受害者访问原始站点要难很多。因此,不建议支持可到达查询字符串的主体参数
时间: 2023-04-04 22:00:30 浏览: 61
C 知道:GET 请求和 POST 请求的设计目的确实是不同的,GET 请求主要用于查询服务器,而 POST 请求则用于提交数据。但是,攻击查询参数比攻击主体参数更容易,因为攻击者可以通过向原始站点发送链接或在博客或注释中发布链接来攻击查询参数,这种方法得到的结果比攻击主体参数更好。因此,建议不要支持可到达查询字符串的主体参数。
相关问题
Get和post请求的区别
### 回答1:
GET 和 POST 是 HTTP 请求方法,它们用于向 Web 服务器发送数据。GET 请求通过 URL 发送数据,而 POST 请求通过请求主体发送数据。GET 请求用于从服务器检索数据,而 POST 请求用于向服务器发送数据,以便执行某些操作,如表单提交。GET 请求通常用于幂等操作,如搜索,而 POST 请求通常用于非幂等操作,如创建、更新或删除数据。
### 回答2:
GET和POST是HTTP协议中常用的两种请求方法,它们在传输数据时有以下区别:
1. GET请求:GET请求用于从服务器获取数据,通过将数据附加在URL的查询字符串中发送给服务器。GET请求的特点是可以被缓存、书签化和历史记录保存,但由于数据是附加在URL中的,因此对于敏感数据来说安全性较低。GET请求的数据量通常有限制,因此适用于请求少量数据。
2. POST请求:POST请求用于向服务器提交数据,通过将数据放在请求体中发送给服务器。POST请求的特点是安全性较高,因为数据不会显示在URL中,而是隐藏在请求体中传输,适用于传输敏感数据。POST请求没有数据量限制,适用于请求大量数据。POST请求不会被缓存、书签化和历史记录保存。
除了以上区别,GET和POST还有其他方面的差异:
- GET请求会将请求参数放在URL中,而POST请求将请求参数放在请求体中。
- GET请求的参数通过问号传参,POST请求的参数通过请求体传参。
- GET请求的数据在URL中可见,POST请求的数据在请求体中不可见。
- GET请求的数据可以通过浏览器的回退按钮重新提交,POST请求不会。
- GET请求适合获取数据,POST请求适合提交数据。
综上所述,GET和POST的区别在于数据传输的方式和安全性,根据具体需求选择合适的请求方法可以提高系统性能和安全性。
### 回答3:
GET和POST是HTTP协议中最常见的两种请求方式。
GET请求用于从服务器获取资源。当浏览器发送GET请求时,请求参数会被附加在URL的末尾,因此GET请求的参数可见且有长度限制。GET请求是幂等的,即多次请求同一个URL返回的结果是一样的。由于GET请求参数附加在URL中,所以GET请求可以被缓存,也可以被用户书签保存下来。常见的使用场景是获取网页、图片等静态资源。
POST请求用于向服务器提交数据。当浏览器发送POST请求时,请求参数会被放置在HTTP请求的消息体中,而非URL中。由于POST请求的参数不会出现在URL中,所以POST请求的参数不可见,并且没有长度限制。POST请求是非幂等的,即多次请求同一个URL返回的结果可能不同。由于POST请求的参数没有附加在URL中,所以POST请求不能被缓存,也不能被用户书签保存。常见的使用场景是提交表单、上传文件等需要发送大量数据的操作。
总结来说,GET请求适用于获取资源,而POST请求适用于提交数据。GET请求的参数可见且有长度限制,可以被缓存和书签保存;POST请求的参数不可见且无长度限制,不能被缓存和书签保存。根据请求的不同特点,我们可以根据需要选择合适的请求方式。
nodejs怎么接收post请求参数
在 Node.js 中,可以使用内置的 `http` 模块来创建一个 HTTP 服务器,然后使用 `request` 事件来监听客户端的请求。当客户端发送 POST 请求时,请求数据通常会作为请求的主体体传递。因此,你需要使用 `data` 事件来监听请求主体。
以下是一个简单的示例代码,演示如何在 Node.js 中接收 POST 请求参数:
```javascript
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString(); // 将数据流转换为字符串
});
req.on('end', () => {
console.log(`Received body: ${body}`);
res.end('OK');
});
} else {
res.end('Hello World!');
}
});
server.listen(8080, () => {
console.log('Server listening on port 8080');
});
```
在上面的代码中,我们首先创建了一个 HTTP 服务器,并监听 `request` 事件。当客户端发送 POST 请求时,我们检查请求方法是否为 POST,并使用 `req.on('data', callback)` 方法来监听请求主体。每次接收到数据时,回调函数会被调用,我们将数据流转换为字符串,并拼接到 `body` 变量中。当请求主体传输完成时,`req.on('end', callback)` 方法会被调用,我们在回调函数中输出接收到的请求主体,并通过 `res.end` 方法返回响应。
当客户端发送 GET 请求时,我们直接返回一个 `Hello World!` 字符串作为响应。
注意,上面的代码仅仅演示了如何接收 POST 请求参数,并没有进行任何安全性检查和数据验证。在实际开发中,你需要对接收到的数据进行严格的验证和过滤,以防止安全漏洞和错误数据的出现。