1. HTTP 请求(最常见的方式)
后端通过 HTTP 请求来获取前端传递的数据,最常见的协议是 HTTP 和 HTTPS。前端通常使用 GET
或 POST
方法向后端发送请求,后端根据请求内容进行处理。
常见方式:
- GET 请求:通常用于获取数据,例如查询列表、获取单个资源的信息等。
- POST 请求:通常用于提交数据,例如创建资源、更新数据等。
- PUT 请求:用于更新资源。
- DELETE 请求:用于删除资源。
示例:
前端使用 axios
发送 HTTP 请求:
// 前端(Vue.js)
import axios from 'axios';
axios.post('http://localhost:8080/api/endpoint', {
username: 'user123',
password: 'password123'
})
.then(response => {
console.log('Response:', response.data);
})
.catch(error => {
console.error('Error:', error);
});
后端(Java):
// 后端(Spring Boot)
@RestController
@RequestMapping("/api")
public class MyController {
@PostMapping("/endpoint")
public ResponseEntity<String> handlePostRequest(@RequestBody User user) {
System.out.println("Received data: " + user.getUsername());
return ResponseEntity.ok("Data received successfully");
}
}
2. URL 参数
前端可以通过在 URL 中传递查询参数的方式,后端通过解析 URL 来获取数据。适用于较简单的数据传递,如搜索查询、筛选条件等。
示例:
前端发送请求:
// 前端(Vue.js)
axios.get('http://localhost:8080/api/endpoint', {
params: {
username: 'user123',
password: 'password123'
}
})
.then(response => {
console.log('Response:', response.data);
})
.catch(error => {
console.error('Error:', error);
});
后端(Java):
// 后端(Spring Boot)
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/endpoint")
public ResponseEntity<String> handleGetRequest(
@RequestParam String username,
@RequestParam String password) {
System.out.println("Received data: " + username + ", " + password);
return ResponseEntity.ok("Data received successfully");
}
}
3. 请求头(Headers)
有些数据可以通过请求头来传递。例如,授权信息、认证令牌等。常见的就是在请求头中传递 Authorization
或 X-Token
等字段。
示例:
前端发送带有请求头的请求:
// 前端(Vue.js)
axios.get('http://localhost:8080/api/endpoint', {
headers: {
'Authorization': 'Bearer token123',
'Custom-Header': 'some value'
}
})
.then(response => {
console.log('Response:', response.data);
})
.catch(error => {
console.error('Error:', error);
});
后端(Java):
// 后端(Spring Boot)
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/endpoint")
public ResponseEntity<String> handleGetRequest(@RequestHeader("Authorization") String authorization) {
System.out.println("Received token: " + authorization);
return ResponseEntity.ok("Token received");
}
}
4. Cookies
前端通过 Cookies
传递一些小的数据,常用于用户会话、认证信息等。后端可以读取请求中的 cookies,获取相应的数据。
示例:
前端发送带有 Cookie 的请求:
// 前端(Vue.js)
axios.get('http://localhost:8080/api/endpoint', {
withCredentials: true // 确保发送 cookie
})
.then(response => {
console.log('Response:', response.data);
})
.catch(error => {
console.error('Error:', error);
});
后端(Java):
// 后端(Spring Boot)
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/endpoint")
public ResponseEntity<String> handleGetRequest(@CookieValue("SESSIONID") String sessionId) {
System.out.println("Received session ID: " + sessionId);
return ResponseEntity.ok("Session ID received");
}
}
5. WebSocket
WebSocket 是一种双向通信协议,适用于实时数据交互场景。前端通过 WebSocket 与后端建立长连接,可以实时地交换数据。通常用于聊天、实时通知等应用。
示例:
前端通过 WebSocket 发送请求:
// 前端(Vue.js)
const socket = new WebSocket('ws://localhost:8080/socket');
socket.onopen = () => {
socket.send(JSON.stringify({ action: 'getData', userId: 123 }));
};
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Received data:', data);
};
后端(Java):
// 后端(Spring Boot)
import org.springframework.web.bind.annotation.*;
import org.springframework.web.socket.*;
@Controller
public class WebSocketController {
@MessageMapping("/data")
@SendTo("/topic/data")
public String handleMessage(String message) {
System.out.println("Received message: " + message);
return "Response: " + message;
}
}
6. Form Data (表单提交)
在一些传统的表单提交中,前端通过提交表单的方式,将数据发送到后端。这个方式常用于上传文件和表单数据。
示例:
前端提交表单:
<!-- 前端(HTML) -->
<form id="loginForm" action="http://localhost:8080/api/login" method="POST">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>
后端(Java):
// 后端(Spring Boot)
@RestController
@RequestMapping("/api")
public class MyController {
@PostMapping("/login")
public ResponseEntity<String> handleFormSubmit(@RequestParam String username, @RequestParam String password) {
System.out.println("Received data: " + username + ", " + password);
return ResponseEntity.ok("Login successful");
}
}
总结:
- HTTP 请求(如
GET
,POST
)是最常见的与后端交互的方式,适用于大多数场景。 - URL 参数:适合查询和简单数据传递。
- 请求头:通常用于传递授权信息等。
- Cookies:适合会话管理和认证信息的传递。
- WebSocket:适用于实时双向通信的场景。
- Form Data:适合传统表单提交,常用于文件上传和表单数据提交。