🧠 How Can a Client Send Data to the Server?
There are several ways a client (like a browser or app) can send data to a server:
🎯 1. Using HTTP GET Parameters
- Data is sent in the URL as query string parameters.
- Format:
?key1=value1&key2=value2
✅ Example:
https://example.com/search?query=shoes&sort=price
- Server reads data via
request.getParameter("query")
andrequest.getParameter("sort")
.
⚡ Limitations:
- URL length is limited (~2KB–8KB depending on browser).
- Data is visible in the address bar (not secure).
✅ Best for:
- Simple searches
- Bookmarkable URLs
🎯 2. Using HTTP POST Body
- Data is sent inside the body of the HTTP request, not in the URL.
- Typically used when submitting forms, login credentials, file uploads, API data.
✅ Example (HTML form):
<form method="POST" action="/submit">
<input name="username">
<input type="password" name="password">
<button type="submit">Login</button>
</form>
✅ Example (JavaScript fetch):
fetch('/submit', {
method: 'POST',
body: JSON.stringify({ username: "Alice", password: "secret" }),
headers: { "Content-Type": "application/json" }
});
⚡ Server reads the body via request.getInputStream()
or request.getReader()
.
Or uses frameworks that parse it automatically.
✅ Best for:
- Sensitive data (e.g., passwords)
- Large amount of data
- Structured data (like JSON)
🎯 3. Using HTTP PUT / PATCH
- Very similar to POST.
- Sends data in the body to update an existing resource.
✅ Example:
fetch('/user/123', {
method: 'PUT',
body: JSON.stringify({ name: "New Name" }),
headers: { "Content-Type": "application/json" }
});
- PUT replaces an entire resource.
- PATCH modifies part of a resource.
✅ Best for:
- REST APIs
- Resource updates
🎯 4. Using HTTP Headers
- Sometimes small pieces of data are sent via HTTP headers.
- Example: Tokens, API keys, custom client info.
✅ Example:
fetch('/secure-data', {
method: 'GET',
headers: {
"Authorization": "Bearer abc123token",
"X-Custom-Header": "some-value"
}
});
⚡ Not for large data, but great for metadata.
🎯 5. WebSockets
- If using WebSockets, client and server can continuously exchange data after initial handshake.
- More advanced than basic HTTP — full-duplex communication.
✅ Example (JavaScript):
const socket = new WebSocket('ws://example.com/socket');
socket.send("Hello Server!");
✅ Best for:
- Real-time applications (chat apps, live updates, games).
🎯 6. Multipart/Form-Data (File Uploads)
- Used for sending files or complex forms.
✅ Example:
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Upload</button>
</form>
⚡ Server needs to parse multipart/form-data
format.
✅ Best for:
- File uploads
- Forms with files and text together
🛠️ Quick Summary Table:
Way | Transport | Use Case |
---|---|---|
GET query parameters | URL | Simple data, search |
POST body | HTTP body | Forms, login, API |
PUT/PATCH body | HTTP body | Resource updates (REST) |
HTTP Headers | HTTP headers | Tokens, client metadata |
WebSockets | Persistent connection | Real-time apps |
Multipart/Form-Data | HTTP body | File uploads |
⚡ Practical Rule:
If you need… | Use… |
---|---|
Small and public data | GET query params |
Private or large data | POST/PUT body |
Metadata (auth, tokens) | Headers |
Files | Multipart POST |
Real-time messaging | WebSockets |
🔥 Bonus Tip:
- GET is idempotent and safe (should not change server state).
- POST/PUT/PATCH can change the server state (create/update resources).