HTTP Message
HTTP là giao thức được thiết kế theo kiểu client - server, giao tiếp giữa client và server dựa vào một cặp request - response, client đưa ra các request và server sẽ response trả lời các request này.
HTTP Request
Để bắt đầu trao đổi dữ liệu, phía client khởi tạo một HTTP session bằng cách mở một kết nối TCP đến HTTP server sau đó gửi request đến server này.
Request có thể được tạo bằng nhiều cách, trực tiếp khi người dùng nhấp vào một liên kết trên trình duyệt hoặc gián tiếp, ví dụ như một video được đính kèm trong một website và việc request đến website này sẽ dẫn đến một request tới video ấy.
REQUEST HEADERS :authority: www.stdio.vn :method: GET :path: /_next/static/ZrwbBww0e97zkPL2IVopl/pages/index.js :scheme: https accept: application/signed-exchange;v=b3;q=0.9,*/*;q=0.8 accept-encoding: gzip, deflate, br accept-language: en-US,en;q=0.9 cookie: ... purpose: prefetch referer: https://www.stdio.vn/article/http-request-va-http-response-uve8H sec-fetch-dest: empty sec-fetch-mode: no-cors sec-fetch-site: same-origin user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36
Bắt đầu của HTTP Request bao gồm rất nhiều thông tin như trên như:
Accept
: loại nội dung có thể nhận được từ thông điệp response. Ví dụ:text/plain, text/html, ...
Accept-Encoding
: các kiểu nén được chấp nhận. Ví dụ:gzip, deflate, xz, exi, ...
Connection
: tùy chọn điều khiển cho kết nối hiện thời. Ví dụ:keep-alive, Upgrade, ...
Cookie
: thông tin HTTP Cookie từ server.User-Agent
: thông tin về user agent của người dùng.
Phương thức GET và POST
:method: GET
2 phương thức được sử dụng nhiều nhất trong HTTP request là GET
và POST
.
Với GET
, câu truy vấn sẽ được đính kèm vào đường dẫn của HTTP request. Ví dụ: /?username=phipham&password=hong
1 số đặc điểm của phương thức GET
:
- Có thể được cached, bookmark và lưu trong lịch sử của trình duyệt.
- Bị giới hạn về chiều dài, do chiều dài của URL là có hạn.
- Không nên dùng với dữ liệu quan trọng, chỉ dùng để nhận dữ liệu.
Với POST
, câu truy vấn sẽ được gửi trong phần message body của HTTP request.
1 số đặc điểm của phương thức POST
:
- Không thể, cached, bookmark hay lưu trong lịch sử trình duyệt.
- Không bị giới hạn về độ dài.
Các phương thức khác:
Ngoài GET
và POST
, HTTP request còn có thể có một số phương thức khác như:
HEAD
: giống như GET nhưng chỉ gửi về HTTP header.PUT
: tải lên một mô tả về URI định trước.DELETE
: xóa một tài nguyên định trước.OPTIONS
: trả về phương thức HTTP mà server hỗ trợ.CONNECT
: chuyển kết nối của HTTP request thành một kết nối HTTP tunnel.
HTTP Response
Cấu trúc HTTP response gần giống với HTTP request.
RESPONSE HEADERS content-encoding: gzip content-language: vi content-type: text/html; charset=utf-8 date: Sun, 30 Aug 2020 09:26:40 GMT etag: "3d976-qAWpMRUg3LVCUidZKMR1pqs9VEM" set-cookie: next-i18next=vi; path=/; expires=Mon, 30 Aug 2021 09:26:40 GMT status: 200 vary: Accept-Encoding x-powered-by: Next.js
status
: mã kết quả trả về, hay còn gọi là HTTP Status Codes.
HTTP Status Codes
Một số loại thông dụng mà server trả về cho client như sau:
1xx: information Message
Các status code này chỉ có tính chất tạm thời, client có thể không quan tâm.
2xx Successful
Khi đã xử lý thành công request của client, server trả về status dạng này:
- 200 OK: request thành công.
- 202 Accepted: request đã được nhận, nhưng không có kết quả nào trả về, thông báo cho client tiếp tục chờ đợi.
- 204 No Content: request đã được xử lý nhưng không có thành phần nào được trả về.
- 205 Reset: giống như 204 nhưng mã này còn yêu câu client reset lại document view.
- 206 Partial Content: server chỉ gửi về một phần dữ liệu, phụ thuộc vào giá trị range header của client đã gửi.
3xx Redirection
Server thông báo cho client phải thực hiện thêm thao tác để hoàn tất request:
- 301 Moved Permanently: tài nguyên đã được chuyển hoàn toàn tới địa chỉ Location trong HTTP response.
- 303 See other: tài nguyên đã được chuyển tạm thời tới địa chỉ Location trong HTTP response.
- 304 Not Modified: tài nguyên không thay đổi từ lần cuối client request, nên client có thể sử dụng đã lưu trong cache.
4xx Client error
Lỗi của client:
- 400 Bad Request: request không đúng dạng, cú pháp.
- 401 Unauthorized: client chưa xác thực.
- 403 Forbidden: client không có quyền truy cập.
- 404 Not Found: không tìm thấy tài nguyên.
- 405 Method Not Allowed: phương thức không được server hỗ trợ.
5xx Server Error
Lỗi của server:
- 500 Internal Server Error: có lỗi trong quá trình xử lý của server.
- 501 Not Implemented: server không hỗ trợ chức năng client yêu cầu.
- 503 Service Unavailable: Server bị quá tải, hoặc bị lỗi xử lý.