# TASk 0 [TOC] --- ## The HTTP Protocol giao thức mạng dùng để giao tiếp giữa giữa client và server. --- ## HTTP Requests tin nhắn gửi từ client yêu cầu server thực hiện một hành động hoặc lấy tài nguyên --- ## HTTP Responses phản hồi của server sau khi nhận HTTP Requests --- ## HTTP Methods ``` * GET: lấy dữ liệu từ server * HEAD: lấy dữ liệu từ server, nhưng chỉ lấy header không lấy body * POST: đẩy dữ liệu lên server * PUT: cập nhật ghi đè, sửa đổi toàn bộ tài nguyên * PATCH: sửa đổi một phần nhỏ tài nguyên * DELETE: xoá tài nguyên tại một URI cụ thể * OPTIONS: hỏi server URI này cho phép method nào * TRACE: trả lại toàn bộ các request trước ``` --- ## URI vs URL * **URI (Uniform Resource Identifier)**: chuỗi định danh của tài nguyên * **URL (Uniform Resource Locator)**: chuỗi diễn tả cụ thể cách thức truy cập tài nguyên đó --- ## HTTP HEADERS ### Request headers ``` * Accept: thông tin về các loại dữ liệu mà client hiểu được * Accept-charset: bộ mã mà client chấp nhận * Accept-encoding: thông tin về các thuật toán mã hoá mà client hiểu được * Accept-language: thông tin về ngôn ngữ mà client hiểu được * Authorization: báo cáo quyền hạn của client cho server * Host: thông báo tên miền mà client muốn truy cập vì, 1 ip có thể có rất nhiều tên miền khác nhau * Referer: thể hiện địa chỉ trang web truy cập trước khi gửi request lên server * User-Agent: thể hiện thông tin về loại phần mềm, phiên bản đang gửi request lên server ``` ### Response headers cung cấp thông tin thêm cho server và thông tin về request header mà client yêu cầu ``` * Accept-Ranges: thông tin về việc server có hỗ trợ load từng phần của nội dung hay không * Location: thông báo về URL mà server muốn client truy cập và gửi yêu cầu * Proxy-Authenticate: Proxy yêu cầu client chứng thực khi request đi qua proxy bằng cách gửi về gói tin mã 407 yêu cầu nhập user và pass * WWW-Authenticate: yêu cầu client chứng thực nhưng không qua Proxy mà trực tiếp từ orgin server gửi đến client * Server: mô tả phần mềm server đang phục vụ yêu cầu, phiên bản server (nên loại bỏ để tránh lộ thông tin) ``` --- ## HTTPS giao thức nâng cấp bảo mật của HTTP, thêm lớp bảo mật SSL --- ## Status code số 3 chữ số trong response headers, cho biết kết quả xử lý của server và hướng dẫn client cần làm gì tiếp ``` * 1xx: server đã nhận request và tiếp tục * 2xx: request xử lý thành công * 3xx: client cần chuyển hướng sáng url khác để gửi request * 4xx: lỗi phía client, thiếu quyền hoặc yêu cầu sai * 5xx: lỗi phía server ``` --- ## Cookie mẫu dữ liệu nhỏ, thuần plain text, không được mã hoá (lưu dưới dạng key=value) mà server yêu cầu client lưu lại để lần truy cập tới gửi request nhầm giảm thời gian, thao tác, ghi nhớ các tuỳ chọn của client --- ## Proxy là server nơi lưu các gói tin cần thiết để lọc, xử lý các request yêu cầu tới origin server, nhầm gia tăng bảo mật cho origin server, giảm thời gian xử lý request, ẩn ip cho client, xác thực client trước gửi request đến origin server, ... --- ## HTTP Authentication cơ chế bảo mật kiểm tra client có đủ điều kiện để truy cập server không ### Basic xác thực qua HTTPS bằng cách client gửi một đoạn base64 encode từ user:pass lên server, server xác thực thì client mới được truy cập ### Bearer Token client gửi token được server cấp trong lần xác thực trước lên server trong mỗi request, token được API xác minh sau đó client được truy cập ### OAuth2 + JWT ``` 1. client vào app đăng nhập qua một nhà cung cấp bảo mật(Authorization Server như google, github, ...), chuyển đến trang nhà cung cấp đó để đăng nhập ví dụ ở đây là google 2. sau khi client đăng nhập thành công từ trang google, google sẽ gửi authorization code cho app, 3. sau đó app gửi code này + với khoá bí mật (client_secret) để đổi lấy access token (thương dưới dạng JWT) 4. khi người dùng cần truy cập dữ liệu của app (gọi API của App), App sẽ gửi access token + request lên resources server, nếu chữ ký số hợp lệ đúng từ google cung cấp, server sẽ cho phép truy cập dữ liệu ``` ---