Font size
WorksheetsLTM ( Multicast, Exception, Thread )
Total questions: 81
Worksheet time: 41mins
Làm thế nào để lấy địa chỉ IP và cổng của người gửi sau khi nhận được DatagramPacket?
Sử dụng packet.getAddress() và packet.getPort().
Sử dụng socket.getRemoteAddress() và socket.getRemotePort().
Dữ liệu này nằm trong packet.getData().
Không thể lấy được thông tin này trong UDP.
Unicast là kiểu truyền thông như thế nào?
1 người gửi, 1 người nhận.
1 người gửi, nhiều người nhận trong một nhóm xác định.
1 người gửi, tất cả mọi người nhận trong mạng.
Nhiều người gửi, nhiều người nhận.
Multicast là kiểu truyền thông như thế nào?
1 người gửi, 1 người nhận.
1 người gửi, nhiều người nhận trong một nhóm xác định (đã đăng ký tham gia).
1 người gửi, tất cả mọi người nhận.
Chỉ dùng trong mạng LAN.
Broadcast là kiểu truyền thông như thế nào?
1 người gửi, 1 người nhận.
1 người gửi, nhiều người nhận trong nhóm.
1 người gửi, tất cả mọi người nhận trong cùng một mạng con.
Chỉ dùng cho giao thức UDP.
Dải địa chỉ IP nào được dành riêng cho Multicast (Địa chỉ lớp D)?
10.0.0.0 - 10.255.255.255
192.168.0.0 - 192.168.255.255
224.0.0.0 - 239.255.255.255
127.0.0.1
Địa chỉ IP Multicast 224.0.0.1 có ý nghĩa gì?
Địa chỉ "All Hosts" - tất cả các máy tính hỗ trợ multicast trong cùng mạng con.
Địa chỉ "All Routers".
Địa chỉ không hợp lệ.
Địa chỉ dành riêng cho video streaming.
Ứng dụng nào sau đây thường sử dụng Multicast?
Duyệt web (HTTP)
Gửi email (SMTP)
Game nhiều người chơi, Video/Audio Conferencing, cập nhật thông tin thị trường chứng khoán, Routing Protocol.
Truyền file (FTP)
Lớp nào trong java.net được sử dụng để lập trình Multicast trong Java?
java.net.Socket
java.net.DatagramSocket
java.net.MulticastSocket
java.net.ServerSocket
Lớp MulticastSocket kế thừa từ lớp nào?
java.net.Socket
java.net.DatagramSocket
java.net.ServerSocket
java.lang.Object
Câu 209: Để một MulticastSocket có thể nhận được các gói tin gửi đến một nhóm multicast cụ thể, nó cần phải làm gì?
connect() đến địa chỉ nhóm.
bind() đến địa chỉ nhóm.
joinGroup(InetAddress groupAddress)
listen() trên địa chỉ nhóm.
Câu 210: Phương thức nào được sử dụng để một MulticastSocket rời khỏi một nhóm multicast?
disconnect()
unbind()
leaveGroup(InetAddress groupAddress)
closeGroup()
Câu 211: Khi một ứng dụng gửi một DatagramPacket đến một địa chỉ IP multicast và cổng, ai sẽ nhận được gói tin đó?
Chỉ một máy tính trong nhóm.
Tất cả các máy tính đã joinGroup() vào địa chỉ multicast đó và đang lắng nghe trên cổng đó.
Tất cả các máy tính trong mạng con.
Chỉ các router.
Câu 212: TTL (Time-To-Live) trong ngữ cảnh Multicast (và IP nói chung) có ý nghĩa gì?
Số lượng router tối đa mà một gói tin được phép đi qua trước khi bị hủy, giới hạn phạm vi lan truyền của gói tin.
Thời gian tối đa gói tin tồn tại (tính bằng giây).
Số lượng thành viên tối đa trong nhóm.
Phiên bản của giao thức.
Câu 213: Để gửi gói tin multicast chỉ trong mạng LAN cục bộ, giá trị TTL thường được đặt là bao nhiêu?
1
0
64
255
Câu 214: Phương thức nào của MulticastSocket dùng để thiết lập giá trị TTL cho các gói tin gửi đi?
setTTL(byte ttl) (Phương thức cũ, không nên dùng)
setTimeToLive(int ttl)
setHopLimit(int limit)
setScope(int scope)
Câu 215: Lập trình Multicast sử dụng giao thức tầng Transport nào?
TCP
UDP
Cả TCP và UDP
IP
Câu 216: Tại sao Multicast lại hiệu quả hơn Unicast khi gửi cùng một dữ liệu đến nhiều người nhận?
Người gửi chỉ cần gửi dữ liệu một lần, mạng sẽ tự động nhân bản gói tin đến các nhánh cần thiết.
Tốc độ truyền nhanh hơn trên mỗi kết nối.
Đảm bảo dữ liệu đến nơi 100%.
Dễ lập trình hơn.
Câu 217: Trong ví dụ Time Service (Multicast), Server làm gì?
Nhận thời gian từ Client.
Định kỳ gửi gói tin chứa thời gian hiện tại đến địa chỉ và cổng multicast đã định.
Tham gia vào nhóm multicast để nhận dữ liệu.
Quản lý danh sách Client.
Trong ví dụ Time Service (Multicast), Client làm gì?
Tham gia vào nhóm multicast (joinGroup) và lắng nghe trên cổng đã định để nhận gói tin thời gian từ Server.
Gửi yêu cầu thời gian đến Server.
Rời khỏi nhóm ngay lập tức.
Gửi thời gian của mình đến Server.
Cần lưu ý điều gì khi chọn cổng cho ứng dụng Multicast?
Cần thống nhất cổng giữa Server và các Client.
Phải sử dụng các cổng trong khoảng 0-1023.
Mỗi client phải dùng một cổng khác nhau.
Không cần quan tâm đến cổng.
Việc gửi và nhận trong Multicast sử dụng đối tượng nào để đóng gói dữ liệu?
SocketPacket
DatagramPacket
MulticastPacket
StreamPacket
Trong lập trình mạng Java (Socket, RMI), ngoại lệ nào thường xuyên xảy ra nhất khi có vấn đề về kết nối hoặc truyền/nhận dữ liệu?
NullPointerException
ArrayIndexOutOfBoundsException
IOException (và các lớp con như SocketException, ConnectException, UnknownHostException)
ArithmeticException
java.net.ConnectException thường xảy ra khi nào?
Client cố gắng kết nối đến Server nhưng không thành công (ví dụ: Server không chạy, sai địa chỉ/cổng, bị tường lửa chặn).
Lỗi đọc/ghi dữ liệu trên kết nối đã thiết lập.
Không tìm thấy địa chỉ IP từ tên miền.
Socket đã bị đóng.
java.net.UnknownHostException thường xảy ra khi nào?
Lỗi kết nối đến Server.
Không thể phân giải tên miền (hostname) thành địa chỉ IP.
Cổng không hợp lệ.
Lỗi đọc dữ liệu.
java.net.SocketTimeoutException xảy ra khi nào?
Client kết nối quá lâu.
Hết thời gian chờ đợi (timeout) đã đặt cho thao tác đọc/ghi hoặc kết nối.
Server phản hồi quá chậm.
Mất kết nối mạng.
Khối lệnh finally trong cấu trúc try-catch-finally dùng để làm gì?
Chứa các đoạn mã luôn được thực thi dù có ngoại lệ xảy ra hay không (thường dùng để giải phóng tài nguyên như đóng Socket, đóng Stream).
Chỉ thực thi khi có ngoại lệ.
Chỉ thực thi khi không có ngoại lệ.
Bắt các ngoại lệ chưa được xử lý.
Tại sao việc đóng Socket và Stream trong khối finally lại quan trọng?
Để đảm bảo tài nguyên hệ thống (như cổng, bộ nhớ đệm) được giải phóng, tránh rò rỉ tài nguyên, ngay cả khi có lỗi xảy ra.
Để chương trình chạy nhanh hơn.
Để tránh ngoại lệ IOException.
Không quan trọng lắm.
Lớp Thread trong Java dùng để làm gì?
Tạo ra các luồng thực thi độc lập trong cùng một chương trình, cho phép thực hiện công việc song song.
Quản lý kết nối mạng.
Xử lý ngoại lệ.
Đọc/ghi file.
Trong mô hình Server phục vụ song song bằng Socket TCP, tại sao mỗi kết nối Client thường được xử lý bởi một Thread riêng?
Để Server có thể tiếp tục lắng nghe và chấp nhận các kết nối mới mà không bị block bởi việc xử lý Client hiện tại.
Để tiết kiệm bộ nhớ.
Để đơn giản hóa code.
Java bắt buộc phải làm vậy.
Phương thức nào của lớp Thread cần được override để định nghĩa công việc mà luồng sẽ thực hiện?
start()
run()
stop()
execute()
Để bắt đầu thực thi một luồng (Thread) đã được tạo, ta gọi phương thức nào?
start()
run()
begin()
init()
Gọi trực tiếp phương thức run() của đối tượng Thread có tạo ra luồng mới không?
Không, nó chỉ thực thi nội dung của run() trong luồng hiện tại.
Có, đó là cách chuẩn để bắt đầu luồng.
Tùy thuộc vào hệ điều hành.
Sẽ gây ra lỗi biên dịch.
Từ khóa synchronized dùng trên một phương thức hoặc khối lệnh có ý nghĩa gì trong môi trường đa luồng?
Đảm bảo rằng tại một thời điểm chỉ có một luồng duy nhất được phép thực thi phương thức/khối lệnh đó trên cùng một đối tượng, tránh xung đột dữ liệu.
Làm cho luồng chạy nhanh hơn.
Tạm dừng luồng.
Bắt buộc luồng phải kết thúc.
Câu 233: Phương thức sleep(long millis) của lớp Thread làm gì?
Kết thúc luồng.
Tạm dừng luồng hiện tại trong một khoảng thời gian tính bằng mili giây.
Chuyển luồng sang trạng thái ready.
Đồng bộ hóa luồng.
Câu 234: Khối catch (IOException e) trong code xử lý mạng dùng để làm gì?
Bắt và xử lý các lỗi liên quan đến Input/Output, thường là lỗi kết nối, đọc/ghi dữ liệu mạng.
Bắt lỗi chia cho 0.
Bắt lỗi truy cập mảng ngoài giới hạn.
Bắt tất cả các loại lỗi.
Câu 235: Tại sao các phương thức liên quan đến I/O (như read(), write(), accept(), connect()) thường được đặt trong khối try?
Vì các phương thức này có khả năng cao ném ra IOException hoặc các lớp con của nó khi có sự cố mạng hoặc lỗi thiết bị.
Để làm cho code dễ đọc hơn.
Đó là quy ước bắt buộc của Java.
Để tăng hiệu năng.
Câu 236: Trong ví dụ về Server TCP song song, lớp RequestProcessing (hoặc tương tự) thường kế thừa từ lớp nào?
Socket
ServerSocket
Thread (hoặc implements Runnable)
Object
Câu 237: Khi Server TCP song song tạo một Thread mới để xử lý Client, cần truyền đối tượng nào vào constructor của Thread đó?
Socket đại diện cho kết nối với Client vừa được accept()
Đối tượng ServerSocket.
Địa chỉ IP của Client.
Không cần truyền gì.
Câu 238: RemoteException trong RMI là một lớp con của ngoại lệ nào?
RuntimeException
IOException
SQLException
SecurityException
Câu 239: Tại sao các phương thức Remote trong RMI phải throws RemoteException?
Vì việc gọi phương thức từ xa có thể gặp nhiều vấn đề liên quan đến mạng (mất kết nối, lỗi server, lỗi marshalling/unmarshalling...).
Để phân biệt với phương thức cục bộ.
Do yêu cầu của lớp Remote.
Để xử lý lỗi logic nghiệp vụ.
Điều gì xảy ra nếu một Server TCP tuần tự đang xử lý một Client mất nhiều thời gian, trong khi có nhiều Client khác đang chờ kết nối?
Các Client khác sẽ phải chờ trong hàng đợi (backlog) của hàm listen() cho đến khi Server xử lý xong Client hiện tại và gọi accept() lần nữa.
Server sẽ tự động chuyển sang xử lý song song.
Các Client khác sẽ bị từ chối ngay lập tức.
Server sẽ bị treo.
Đâu là một rủi ro khi sử dụng UDP?
Tốc độ chậm.
Gói tin có thể bị mất, đến sai thứ tự, hoặc bị trùng lặp mà không có cơ chế tự động phát hiện/sửa lỗi ở tầng Transport.
Yêu cầu thiết lập kết nối phức tạp.
Header quá lớn.
Khi nào nên sử dụng PipedInputStream và PipedOutputStream?
Khi cần giao tiếp giữa các luồng (threads) trong cùng một tiến trình (process) Java.
Khi cần đọc/ghi file.
Khi cần giao tiếp giữa các tiến trình khác nhau trên cùng máy.
Khi cần giao tiếp qua mạng.
So với Socket, Pipe trong Java có hạn chế gì?
Chỉ dùng để giao tiếp trong cùng một JVM (giữa các thread).
Chậm hơn Socket.
Khó sử dụng hơn Socket.
Không đáng tin cậy bằng Socket.
Khái niệm "Stub" trong RPC/RMI đóng vai trò như một...?
Đối tượng đại diện (proxy) ở phía Client, thay mặt Client giao tiếp với đối tượng/thủ tục ở xa.
Đối tượng thực thi ở phía Server.
Dịch vụ đăng ký tên.
Lớp quản lý kết nối.
Khái niệm "Skeleton" trong RMI đóng vai trò như một...?
Đối tượng đại diện ở phía Client.
Đối tượng trung gian ở phía Server, nhận yêu cầu từ mạng, giải mã và gọi đến đối tượng thực thi thực sự.
Thư viện giao tiếp mạng.
Cơ sở dữ liệu lưu trữ đối tượng.
Cổng mặc định của RMI Registry là gì?
8080
1521
1099
3306
Sự khác biệt chính giữa RPC và RMI là gì?
RPC dùng UDP, RMI dùng TCP.
RPC chỉ dùng cho C/C++, RMI chỉ dùng cho Java.
RPC là hướng thủ tục (procedure-oriented), RMI là hướng đối tượng (object-oriented) và tích hợp chặt chẽ với Java.
RPC nhanh hơn RMI.
Lệnh rmic (nếu cần) được chạy trên file nào?
File .java của Interface.
File .class của lớp cài đặt (implementation class).
File .java của Client.
File .policy.
Có thể chạy nhiều Client RMI cùng lúc để kết nối đến cùng một Server RMI không?
Có, Server RMI (thường) có thể xử lý nhiều Client cùng lúc.
Không, chỉ một Client tại một thời điểm.
Chỉ khi Server được viết bằng C++.
Chỉ khi Client và Server chạy trên cùng máy.
Giao thức HTTP có trạng thái (stateful) hay không trạng thái (stateless)?
Stateless (không trạng thái) - mỗi yêu cầu từ client đến server được xử lý độc lập, server không lưu thông tin về các yêu cầu trước đó của client.
Stateful (có trạng thái) - server lưu giữ thông tin về phiên làm việc của client.
Tùy thuộc vào phiên bản HTTP.
Chỉ stateful khi dùng POST.
Giao thức SMTP trong quá trình gửi một email có phải là stateful không?
Có, server duy trì trạng thái của phiên làm việc (ví dụ: đã HELO, đã MAIL FROM, đã RCPT TO...).
Không, mỗi lệnh là độc lập.
Chỉ stateful khi gửi file đính kèm.
Là stateless giống HTTP.
Giao thức POP3 có stateful không?
Có, nó có các giai đoạn (chứng thực, giao dịch) và trạng thái (ví dụ: email nào đã bị đánh dấu xóa).
Không, nó là stateless.
Chỉ stateful trong giai đoạn chứng thực.
Chỉ stateful khi dùng lệnh LIST.
Ống dẫn (Pipe) có phải là cơ chế giao tiếp hướng kết nối không?
Có, giống TCP.
Không hoàn toàn, nó là một luồng dữ liệu một chiều, nhưng việc đọc/ghi thường có sự đồng bộ nhất định.
Hoàn toàn không kết nối, giống UDP.
Chỉ khi dùng Named Pipe.
Mục đích của việc chia Server thành nhiều luồng (ví dụ: Luồng chỉ huy và Luồng thực thi trong slide về Server TCP song song) là gì?
Phân tách nhiệm vụ: một luồng chuyên trách việc chấp nhận kết nối, các luồng khác chuyên xử lý giao tiếp với từng client.
Tăng cường bảo mật.
Giảm bộ nhớ sử dụng.
Yêu cầu của hệ điều hành.
Lớp java.net.InetAddress dùng để biểu diễn thông tin gì?
Địa chỉ IP (cả IPv4 và IPv6).
Số hiệu cổng.
Địa chỉ MAC.
Tên miền đầy đủ.
Phương thức tĩnh InetAddress.getByName(String host) dùng để làm gì?
Lấy địa chỉ IP của máy cục bộ.
Phân giải tên miền (hostname) hoặc địa chỉ IP dạng chuỗi thành đối tượng InetAddress.
Lấy tên miền từ địa chỉ IP.
Kiểm tra kết nối đến host.
Trong Java, Socket UDP có thể gửi dữ liệu đến nhiều đích khác nhau bằng cùng một đối tượng DatagramSocket không?
Có, chỉ cần tạo các DatagramPacket khác nhau với địa chỉ đích khác nhau và gọi send() cho từng packet.
Không, mỗi DatagramSocket chỉ gửi được đến một đích cố định.
Chỉ khi dùng MulticastSocket.
Chỉ khi dùng TCP.
Trong Java, Socket TCP sau khi đã connect() đến một Server, có thể dùng cùng đối tượng Socket đó để connect() đến Server khác không?
Không, một đối tượng Socket TCP đại diện cho một kết nối duy nhất. Muốn kết nối đến Server khác phải tạo Socket mới.
Có, chỉ cần gọi connect() lại với địa chỉ mới.
Có, nhưng phải close() kết nối cũ trước.
Chỉ khi Server cũ đã đóng kết nối.
Sự khác biệt cơ bản trong cách Server xử lý Client giữa TCP và UDP là gì?
TCP Server accept() tạo ra một Socket riêng cho mỗi Client; UDP Server dùng cùng một DatagramSocket để nhận từ/gửi đến nhiều Client (phân biệt qua thông tin trong DatagramPacket).
TCP Server dùng nhiều luồng, UDP Server chỉ dùng 1 luồng.
TCP Server cần bind(), UDP Server không cần.
TCP Server xử lý nhanh hơn UDP Server.
Đâu là mô tả đúng về hàng đợi (backlog) trong hàm listen(int backlog) của TCP Server Socket?
Số lượng tối đa các kết nối đang chờ được accept() mà hệ điều hành sẽ xếp hàng khi Server đang bận.
Số lượng Client tối đa Server có thể phục vụ cùng lúc.
Kích thước buffer nhận dữ liệu.
Số lượng luồng tối đa Server có thể tạo.
Serialization trong Java là quá trình gì và tại sao nó quan trọng trong RMI?
Là quá trình chuyển đổi trạng thái của một đối tượng thành một luồng byte; quan trọng để truyền tham số và kết quả (là đối tượng) qua mạng trong RMI.
Là quá trình mã hóa dữ liệu.
Là quá trình tạo Stub/Skeleton.
Là quá trình quản lý luồng.
Interface java.io.Serializable đóng vai trò gì?
Là một marker interface, đánh dấu rằng đối tượng của lớp đó có thể được serialized.
Cung cấp các phương thức để serialize.
Kế thừa từ java.rmi.Remote.
Dùng để định nghĩa phương thức Remote.
Trong kiến trúc RMI, tầng nào chịu trách nhiệm quản lý các tham chiếu đến đối tượng Remote?
Stub/Skeleton Layer
Remote Reference Layer (RRL)
Transport Layer
Application Layer
Trong kiến trúc RMI, tầng nào chịu trách nhiệm thiết lập và quản lý kết nối mạng thực sự?
Stub/Skeleton Layer
Remote Reference Layer (RRL)
Transport Layer
Application Layer
Có thể sử dụng RMI để gọi phương thức trên đối tượng viết bằng ngôn ngữ khác Java không?
Không trực tiếp, RMI được thiết kế cho giao tiếp Java-to-Java. (Có thể dùng các cơ chế cầu nối như JNI hoặc Web Services để tích hợp).
Có, dễ dàng như gọi đối tượng Java.
Chỉ khi đối tượng kia cũng hỗ trợ RPC.
Chỉ khi dùng RMI qua IIOP.
Mục đích của việc định nghĩa một Remote Interface riêng biệt trong RMI là gì?
Xác định rõ ràng các phương thức mà Client có thể gọi từ xa, tách biệt phần định nghĩa khỏi phần cài đặt cụ thể.
Để tạo Stub.
Để Server kế thừa.
Để Client cài đặt.
Lớp java.rmi.server.UnicastRemoteObject cung cấp các chức năng gì?
Cung cấp cài đặt mặc định cho đối tượng Remote có thể được gọi từ xa qua RMI (sử dụng TCP), bao gồm cả việc export đối tượng.
Định nghĩa các phương thức Remote.
Tương tác với RMI Registry.
Quản lý luồng phía Server.
Nếu một phương thức trong lớp cài đặt Remote không được khai báo trong Remote Interface, Client có thể gọi nó thông qua RMI không?
Không, Client chỉ thấy và gọi được các phương thức được định nghĩa trong Remote Interface.
Có, nếu biết tên phương thức.
Chỉ khi phương thức đó là public.
Chỉ khi dùng lookup() đặc biệt.
"Marshalling" trong RPC/RMI là quá trình gì?
Đóng gói các tham số/kết quả (bao gồm kiểu dữ liệu và giá trị) thành một định dạng chuẩn để có thể truyền qua mạng.
Mở gói dữ liệu nhận từ mạng.
Tìm kiếm đối tượng Remote.
Thiết lập kết nối.
"Unmarshalling" trong RPC/RMI là quá trình gì?
Đóng gói dữ liệu để gửi đi.
Mở gói dữ liệu nhận được từ mạng và tái tạo lại các tham số/kết quả ban đầu.
Đăng ký đối tượng Remote.
Ngắt kết nối.
So với Socket, RMI thường có độ trễ (latency) như thế nào?
Cao hơn, do có thêm các lớp trừu tượng (Stub, Skeleton, RRL) và quá trình marshalling/unmarshalling.
Thấp hơn, do tối ưu hóa của Java.
Tương đương Socket TCP.
Tương đương Socket UDP.
Tại sao khi lập trình Socket UDP, người ta thường phải tự xây dựng cơ chế đảm bảo độ tin cậy (nếu cần)?
Vì bản thân giao thức UDP không cung cấp cơ chế kiểm tra lỗi, truyền lại, hay đảm bảo thứ tự.
Vì lớp DatagramSocket không hỗ trợ.
Vì UDP chỉ dùng cho dữ liệu không quan trọng.
Vì hệ điều hành không hỗ trợ.
Lớp PrintWriter thường được dùng kết hợp với OutputStream của Socket để làm gì?
Cung cấp các phương thức tiện lợi (print, println) để gửi dữ liệu dạng text qua Socket một cách dễ dàng hơn so với ghi trực tiếp byte.
Mã hóa dữ liệu text.
Nén dữ liệu text.
Đọc dữ liệu text từ Socket.
Lớp BufferedReader thường được dùng kết hợp với InputStream của Socket để làm gì?
Cung cấp khả năng đọc dữ liệu theo từng dòng (readLine()) hoặc đọc hiệu quả hơn nhờ bộ đệm.
Giải mã dữ liệu.
Đọc dữ liệu nhị phân.
Ghi dữ liệu vào Socket.
Khi sử dụng BufferedReader.readLine() để đọc dữ liệu từ Socket, cần lưu ý điều gì về ký tự kết thúc dòng?
Bên gửi phải đảm bảo gửi ký tự kết thúc dòng (như \n hoặc \r\n) để readLine() biết khi nào một dòng kết thúc.
readLine() tự động nhận biết dòng mà không cần ký tự đặc biệt.
Chỉ hoạt động với dữ liệu số.
Chỉ nên dùng với UDP.
Socket API là một chuẩn...?
Chỉ dành cho Java.
Chỉ dành cho C/C++.
De facto (trên thực tế) được hỗ trợ bởi nhiều ngôn ngữ lập trình và hệ điều hành.
Chỉ dành cho hệ điều hành Unix.
HTTP Keep-Alive là cơ chế cho phép điều gì?
Tái sử dụng cùng một kết nối TCP cho nhiều yêu cầu/phản hồi HTTP liên tiếp giữa Client và Server, thay vì mở/đóng kết nối cho mỗi yêu cầu.
Giữ cho Server luôn hoạt động.
Client giữ kết nối ngay cả khi không gửi gì.
Server chủ động gửi dữ liệu cho Client.
Mã trạng thái HTTP 404 Not Found nghĩa là gì?
Yêu cầu thành công.
Lỗi phía Server.
Server không tìm thấy tài nguyên mà Client yêu cầu.
Client không có quyền truy cập.
Mã trạng thái HTTP 500 Internal Server Error nghĩa là gì?
Yêu cầu thành công.
Server gặp lỗi bất ngờ khi xử lý yêu cầu của Client.
Tài nguyên không tìm thấy.
Yêu cầu không hợp lệ từ Client.
Cơ chế nào thường được sử dụng để duy trì trạng thái người dùng qua nhiều yêu cầu HTTP (vốn là stateless)?
Cookies hoặc Session ID.
Địa chỉ IP của Client.
User-Agent header.
HTTP Keep-Alive.
