Câu hỏi: PRP201c Lập trình Python – Bộ ôn tập cuối kỳ số 1
50 câu trắc nghiệm kèm lời giải của môn PRP201c - Lập trình Python, xếp đúng thứ tự trong đề.
Danh sách câu hỏi
20/50 câuCòn 30
A
print(x[14/17])B
print(x[14:17])C
print(x[14:3])D
print(x[14+3])Lời giải
Mở trang câu hỏi này →Đáp án đúng: "print(x[14:17])". Cú pháp cắt chuỗi (slicing) x[start:stop] lấy các ký tự từ chỉ số start đến trước chỉ số stop, chỉ số đếm từ 0. Trong 'From marquard@uct.ac.za', chữ F ở vị trí 0, dấu cách ở 4, ký tự @ ở 13, nên u ở 14, c ở 15, t ở 16 và dấu chấm ở 17; x[14:17] lấy đúng ba vị trí 14, 15, 16 thành 'uct', vị trí 17 bị loại vì stop không được tính. "print(x[14/17])" sai vì 14/17 là phép chia ra số thực khoảng 0,82, mà chỉ số chuỗi phải là số nguyên nên Python báo TypeError. "print(x[14:3])" hiểu nhầm số thứ hai là độ dài; thực ra 3 là vị trí dừng, nhỏ hơn 14 nên lát cắt rỗng và lệnh in ra chuỗi rỗng. "print(x[14+3])" tính 14+3 = 17 rồi lấy một ký tự duy nhất ở vị trí 17, tức dấu chấm, không phải ba ký tự cần tìm.
2In the following XML, which node is the parent node of node e?4 lựa chọncó code
<a>
<b>X</b>
<c>
<d>Y</d>
<e>Z</e>
</c>
</a>Ab
Ba
Cc
De
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "c". Trong XML, các phần tử lồng nhau tạo thành cây; nút cha (parent node) của một nút là phần tử bao trực tiếp nó, tức thẻ mở gần nhất chưa đóng ngay phía trên nó. Thẻ e nằm giữa thẻ mở và thẻ đóng của c, cùng cấp với d, nên c là cha trực tiếp của e còn d là anh em (sibling) của e. Chọn "b" là sai vì b chỉ chứa chữ X và đã đóng trước khi c mở, nên b là anh em của c chứ không bao e. Chọn "a" là sai vì a là nút gốc, chỉ là tổ tiên (ancestor) của e qua trung gian c, không phải cha trực tiếp. Chọn "e" là sai vì một nút không thể là cha của chính nó; e chỉ chứa nút văn bản Z.
3Which Python code is used to capture username from a Cisco Router through a prompt in Python 3?4 lựa chọn
A
tn.read_until(b"Login:")B
tn.read_until(b"user: ")C
tn.read_until(b"user:")D
tn.read_until(b"Username: ")Lời giải
Mở trang câu hỏi này →Đáp án đúng: "tn.read_until(b"Username: ")". Câu hỏi dùng module telnetlib: sau khi tạo đối tượng tn = telnetlib.Telnet(host), phương thức read_until đọc dữ liệu từ kết nối cho tới khi gặp đúng chuỗi byte được chỉ định, nên phải truyền đúng dấu nhắc (prompt) mà thiết bị in ra; router Cisco khi bật xác thực đăng nhập in dấu nhắc mặc định là chữ Username, dấu hai chấm và một dấu cách, sau đó script mới gửi tên người dùng bằng tn.write. Trong Python 3 đối số phải là kiểu bytes nên có tiền tố b. "tn.read_until(b"Login:")" chờ chuỗi Login mà router Cisco không in theo mặc định, nên lệnh sẽ đứng chờ tới hết thời gian chờ. "tn.read_until(b"user: ")" sai chữ: read_until so khớp từng byte và phân biệt hoa thường, mà dấu nhắc thật bắt đầu bằng U hoa và có chữ name. "tn.read_until(b"user:")" sai tương tự, lại thiếu cả dấu cách sau dấu hai chấm. Lưu ý telnetlib bị đánh dấu lỗi thời từ Python 3.11 và đã bị gỡ khỏi thư viện chuẩn ở Python 3.13 (PEP 594), nên mã này chỉ chạy trên phiên bản cũ hơn; ngày nay thường dùng SSH qua Paramiko hoặc Netmiko.
A
upper()B
uppercase()C
toUpperCase()D
upperCase()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "upper()". Trong Python, chuỗi (str) là đối tượng có sẵn nhiều phương thức (method); str.upper() trả về một chuỗi mới với mọi chữ cái chuyển thành chữ hoa, còn chuỗi gốc không đổi vì chuỗi là kiểu bất biến (immutable), ví dụ 'hello'.upper() cho 'HELLO'. Phương án "uppercase()" không phải phương thức của str, gọi nó sẽ ném AttributeError. Phương án "toUpperCase()" là tên phương thức tương ứng trong JavaScript và Java, không tồn tại trong Python. Phương án "upperCase()" viết kiểu camelCase cũng không có trong Python; các phương thức chuỗi của Python viết thường toàn bộ, và vì Python phân biệt chữ hoa chữ thường nên upperCase là một tên khác hẳn upper. Phương thức đi cặp với upper() là lower(), chuyển chuỗi sang chữ thường.
AAscending
BDescending
CSORT
DORDER
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Ascending". Mệnh đề ORDER BY trong SQL sắp xếp các dòng kết quả theo một hay nhiều cột; nếu không ghi gì sau tên cột thì cơ sở dữ liệu mặc định dùng ASC, tức thứ tự tăng dần (ascending): số nhỏ trước, chuỗi theo thứ tự chữ cái. Ví dụ SELECT name FROM Users ORDER BY name cho cùng kết quả với ORDER BY name ASC. "Descending" là thứ tự giảm dần, chỉ có khi ghi rõ từ khoá DESC sau tên cột, như ORDER BY age DESC để đưa người lớn tuổi nhất lên đầu. "SORT" không phải từ khoá của SQL chuẩn; SQL dùng ORDER BY để sắp xếp chứ không có lệnh SORT. "ORDER" chỉ là một nửa tên của mệnh đề ORDER BY, bản thân nó không phải một chế độ sắp xếp nên không thể là chế độ mặc định.
AThe values of x and y are unchanged
BBoth x and y are -5
CBoth x and y are 5
DThe values of x and y are swapped
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The values of x and y are unchanged". Lần theo vế phải: tuple (y, x) được tạo trước với giá trị (-5, 5), sau đó lát cắt [::-1] đảo ngược tuple thành (5, -5); cuối cùng phép gán nhiều biến (tuple unpacking) gán phần tử đầu cho x và phần tử sau cho y, nên x = 5 và y = -5, đúng như ban đầu. Việc đảo hai lần (đổi chỗ khi tạo tuple rồi đảo lại bằng [::-1]) triệt tiêu nhau. "The values of x and y are swapped" chỉ đúng nếu viết x, y = (y, x) mà không có [::-1]. "Both x and y are -5" sai vì x nhận 5, không có bước nào chép -5 vào cả hai biến. "Both x and y are 5" sai vì y nhận phần tử thứ hai của (5, -5) là -5.
7How do you read a file line by line?4 lựa chọn
Afile.read()
Bfor line in file:
Cfile.write()
Dfile.line()
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "for line in file:". Đối tượng tệp trong Python là một iterable (đối tượng lặp được): mỗi vòng lặp for lấy phần tử kế tiếp thì tệp trả về một dòng, kèm cả ký tự xuống dòng ở cuối, nên đây là cách chuẩn để đọc tệp lần lượt từng dòng; cách này đọc dần nên tiết kiệm bộ nhớ khi tệp rất lớn. "file.read()" đọc toàn bộ nội dung tệp thành một chuỗi duy nhất, không tách theo dòng; muốn có từng dòng phải gọi thêm splitlines hoặc dùng readlines. "file.write()" dùng để ghi dữ liệu vào tệp, ngược hẳn với việc đọc, và chỉ chạy khi tệp được mở ở chế độ 'w' hoặc 'a'. "file.line()" không phải phương thức của đối tượng tệp, gọi nó sẽ gây AttributeError; phương thức gần nghĩa có thật là readline(), mỗi lần gọi đọc đúng một dòng.
8What would the following code print if the word is "brontosaurus"?
word = "brontosaurus"4 lựa chọncó code
d = dict()
for c in word:
d[c] = d.get(c, 0) + 1
print(d)A{'b': 1, 'r': 2, 'o': 1, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}
B{'b': 1, 'r': 1, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 2, 'u': 2}
C{'b': 1, 'r': 2, 'o': 2, 'n': 1, 's': 2, 'a': 2, 'u': 2, 't': 1}
D{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1, 's': 1, 'a': 1, 'u': 1}
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "{'b': 1, 'r': 2, 'o': 2, 'n': 1, 's': 2, 'a': 2, 'u': 2, 't': 1}". Đoạn mã dùng mẫu đếm tần suất bằng dict: d.get(c, 0) trả về số đếm hiện có của ký tự c, hoặc 0 nếu chưa có khoá đó, rồi cộng 1 và gán lại. Lần theo từng chữ của brontosaurus (b-r-o-n-t-o-s-a-u-r-u-s) ta có b 1, r 2, o 2, n 1, t 1, s 2, a 1, u 2, và vì từ Python 3.7 dict giữ thứ tự chèn khoá, kết quả thật in ra là {'b': 1, 'r': 2, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 1, 'u': 2}. Cần nói thẳng: không phương án nào khớp từng ký tự; phương án được chọn là phương án gần nhất, đúng số đếm của r, o, s, u, chỉ lệch số đếm của a (từ này chỉ có một chữ a) và vị trí khoá t. Phương án "{'b': 1, 'r': 2, 'o': 1, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}" sai ở o, n, s, u và a. Phương án "{'b': 1, 'r': 1, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 2, 'u': 2}" đếm r chỉ một lần dù r xuất hiện hai lần, lại sai cả a. Phương án "{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1, 's': 1, 'a': 1, 'u': 1}" coi mọi chữ chỉ xuất hiện một lần, tức là bỏ mất bước cộng dồn.
APostgres
BOracle
CSQL Server
DSQLite
EMySQL
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "SQLite". Phần cơ sở dữ liệu của PRP201c theo chương trình Python for Everybody (PY4E) dùng SQLite: một cơ sở dữ liệu nhúng, lưu toàn bộ dữ liệu trong một tệp duy nhất, có sẵn trong Python qua mô-đun sqlite3 và được xem bằng công cụ DB Browser for SQLite. Vì không cần cài máy chủ nên sinh viên chạy được ngay trên máy mình. "Postgres" (PostgreSQL) là hệ quản trị cơ sở dữ liệu mã nguồn mở mạnh, chạy theo mô hình máy chủ, cần cài đặt và cấu hình riêng. "Oracle" là hệ thương mại của hãng Oracle, dùng nhiều trong doanh nghiệp lớn. "SQL Server" là sản phẩm của Microsoft, cũng chạy dạng máy chủ. "MySQL" là hệ mã nguồn mở phổ biến cho web. Cả bốn hệ này đều dùng SQL gần giống nhau, nhưng không phải phần mềm được dùng trong lớp này.
AFilename = savefilename()
BFilename = asksavefilename()
CFilename = asksaveasfilename()
DNo such option in python
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Filename = asksaveasfilename()". Trong Tkinter, mô-đun tkinter.filedialog cung cấp hàm asksaveasfilename() mở hộp thoại "Save As" (lưu thành) và trả về đường dẫn tệp người dùng gõ hoặc chọn, còn chuỗi rỗng nếu bấm huỷ; hàm chỉ trả tên tệp, việc ghi nội dung do chương trình tự làm bằng open(). Mô-đun này còn có askopenfilename() cho hộp thoại mở tệp. "Filename = savefilename()" sai vì filedialog không có hàm nào tên savefilename. "Filename = asksavefilename()" sai vì tên hàm thiếu chữ "as", gọi sẽ gây AttributeError hoặc NameError. "No such option in python" sai vì thư viện chuẩn đi kèm Tkinter đã có sẵn hộp thoại lưu tệp này.
AUTF-128
BUTF-8
CUTF-32
DUTF-64
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "UTF-8". Khi trao đổi dữ liệu giữa các hệ thống qua mạng, tệp hay API, UTF-8 là bảng mã Unicode phổ biến nhất vì nó mã hoá mỗi ký tự bằng 1 đến 4 byte với độ dài thay đổi, tương thích ngược với ASCII (chữ tiếng Anh vẫn chiếm đúng 1 byte) và không phụ thuộc thứ tự byte của máy; trong Python 3, encode() và decode() mặc định dùng UTF-8. "UTF-32" là mã hoá Unicode có thật nhưng dùng cố định 4 byte cho mọi ký tự, tốn dung lượng nên chủ yếu dùng nội bộ khi cần truy cập ký tự theo chỉ số, hiếm khi dùng để truyền dữ liệu. "UTF-128" không tồn tại; con số 128 dễ làm nhớ tới 128 ký tự của bảng ASCII chứ không phải một đơn vị mã hoá. "UTF-64" cũng không tồn tại: Unicode chỉ định nghĩa UTF-8, UTF-16 và UTF-32, và không gian mã chỉ tới U+10FFFF nên 32 bit đã thừa chỗ.
12Which is the correct command for a statement that will select data from the Breed column in the Cats table?4 lựa chọn
ASELECT FROM Breed,Cats
BSELECT Cats FROM Breed
CFROM Cats SELECT Breed
DSELECT Breed FROM Cats
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "SELECT Breed FROM Cats". Cú pháp cơ bản của câu truy vấn SQL là SELECT danh sách cột FROM tên bảng: ngay sau SELECT là cột cần lấy, ở đây là cột Breed, còn sau FROM là bảng chứa cột đó, tức bảng Cats. Phương án "SELECT FROM Breed,Cats" bỏ trống danh sách cột và đặt cả tên cột lẫn tên bảng sau FROM như thể cả hai đều là bảng, nên câu lệnh lỗi cú pháp. Phương án "SELECT Cats FROM Breed" đảo vai trò, coi Cats là cột và Breed là bảng, trái với mô tả của câu hỏi. Phương án "FROM Cats SELECT Breed" đặt mệnh đề FROM lên trước; tuy về mặt logic hệ quản trị xử lý FROM trước, câu chữ SQL chuẩn vẫn bắt buộc SELECT đứng đầu nên câu này không chạy. Muốn lấy mọi cột của bảng thì viết SELECT * FROM Cats.
AUnderline all of the conditional code
BIndent the line below the if statement
CStart the statement with a "#" character
DBegin the statement with a curly brace {
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Indent the line below the if statement". Python không dùng ngoặc nhọn để gom khối lệnh mà dùng thụt lề (indentation): sau dòng if kết thúc bằng dấu hai chấm, mọi dòng thụt vào sâu hơn thuộc khối chỉ chạy khi điều kiện đúng, và dòng đầu tiên thụt lề trở lại ngang if đánh dấu khối đã kết thúc. Thụt lề sai sẽ gây IndentationError hoặc làm lệnh chạy ngoài ý muốn. "Underline all of the conditional code" sai vì mã nguồn là văn bản thuần, không có định dạng gạch chân; trình thông dịch không thấy được kiểu chữ. "Start the statement with a "#" character" sai vì ký tự "#" mở đầu chú thích, Python bỏ qua toàn bộ phần sau nó nên dòng đó không chạy gì cả. "Begin the statement with a curly brace {" là cách của C, Java hay JavaScript; trong Python dấu ngoặc nhọn dùng để tạo dict hoặc set, không mở khối lệnh.
A
quit()B
stop()C
exit()D
end()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "quit()". Khi làm việc ở trình thông dịch tương tác (interactive mode, chế độ gõ lệnh trực tiếp sau dấu nhắc >>>), cách kết thúc phiên mà tài liệu nhập môn Python hay dạy là gõ quit(), lệnh này đóng trình thông dịch và trả về dòng lệnh của hệ điều hành. "exit()" thực ra cũng hoạt động vì Python định nghĩa exit và quit là hai đối tượng tương đương do mô-đun site nạp sẵn, nên nó chỉ là một cách khác chứ không phải cách được câu hỏi nhắm tới; trong chương trình thật nên dùng sys.exit(). "stop()" sai vì Python không có hàm dựng sẵn nào tên stop, gọi sẽ báo NameError. "end()" cũng sai vì không có hàm dựng sẵn end; end chỉ là tên tham số của print dùng để đổi ký tự kết thúc dòng.
15Which of these collections defines a LIST?4 lựa chọn
A{"apple", "banana", "cherry"}
B{"name": "apple", "color": "green"}
C["apple", "banana", "cherry"]
D("apple", "banana", "cherry")
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "["apple", "banana", "cherry"]". List (danh sách) trong Python được viết bằng cặp ngoặc vuông, các phần tử cách nhau bởi dấu phẩy; list có thứ tự, cho phép phần tử trùng lặp và thay đổi được (mutable), ví dụ có thể gọi append hay gán lại một phần tử theo chỉ số. "{"apple", "banana", "cherry"}" dùng ngoặc nhọn chỉ chứa giá trị nên là set (tập hợp): không có thứ tự, không giữ phần tử trùng và không truy cập được theo chỉ số. "{"name": "apple", "color": "green"}" dùng ngoặc nhọn với các cặp khoá và giá trị ngăn bởi dấu hai chấm nên là dictionary (từ điển), tra cứu theo khoá chứ không theo vị trí. "("apple", "banana", "cherry")" dùng ngoặc tròn nên là tuple (bộ giá trị): cũng có thứ tự như list nhưng bất biến (immutable), không sửa được sau khi tạo.
16What does the following Python code print out?4 lựa chọncó code
a = [1, 2, 3, 8]
b = [4, 5, 6]
c = a + b
print (c)A28
B[1, 2, 3, 8, 4, 5, 6]
CIt raises an exception
D7
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "[1, 2, 3, 8, 4, 5, 6]". Với hai list (danh sách), toán tử + thực hiện phép nối (concatenation): nó tạo một list mới chứa các phần tử của a theo đúng thứ tự, tiếp theo là các phần tử của b, còn a và b giữ nguyên. Vì vậy c là [1, 2, 3, 8] nối với [4, 5, 6] và print(c) in ra list bảy phần tử đó. Phương án "28" là một số nguyên, kiểu kết quả chỉ có khi cộng số học; + giữa hai list không cộng giá trị các phần tử, và ngay cả sum(a + b) cũng cho 29 chứ không phải 28. Phương án "It raises an exception" sai vì + giữa hai list là hoàn toàn hợp lệ; ngoại lệ TypeError chỉ xảy ra khi cộng list với kiểu khác, chẳng hạn a + 5. Phương án "7" trùng với độ dài len(c), nhưng print(c) in chính nội dung list chứ không in số phần tử. Khoảng trắng trong print (c) không ảnh hưởng gì tới kết quả.
A
find()B
encode()C
decode()D
upper()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "decode()". Dữ liệu đọc từ mạng, chẳng hạn qua urllib.request.urlopen hay socket.recv, đến dưới dạng bytes: chuỗi byte thô, thường mã hoá theo UTF-8. Trong Python 3, kiểu str bên trong là chuỗi Unicode, nên phải gọi decode() trên đối tượng bytes để chuyển thành str, ví dụ line.decode().strip(). "find()" là phương thức tìm vị trí xuất hiện đầu tiên của một chuỗi con và trả về chỉ số hoặc -1, không đổi định dạng dữ liệu. "encode()" làm điều ngược lại: biến str thành bytes, dùng khi gửi đi, như lúc gửi lệnh GET qua socket, nên dùng cho dữ liệu nhận về là sai chiều. "upper()" chỉ chuyển chữ thường thành chữ hoa và giữ nguyên kiểu dữ liệu; gọi nó trên bytes vẫn trả về bytes chứ không thành str.
A[ 'abcd', 786 , 2.23, 'john', 70.2 ]
Blist
CError
DNone of the others
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "[ 'abcd', 786 , 2.23, 'john', 70.2 ]". Câu này viết theo Python 2, nơi print là câu lệnh (statement) nên print list in ra biểu diễn của danh sách, tức toàn bộ các phần tử theo đúng thứ tự trong ngoặc vuông; cần nói rõ trên Python 3 print là hàm nên dòng print list báo lỗi cú pháp, phải viết print(list), và khi đó kết quả in ra có dạng ['abcd', 786, 2.23, 'john', 70.2], Python tự chuẩn hoá khoảng trắng chứ không giữ dấu cách thừa như cách chép trong phương án, nhưng nội dung và thứ tự phần tử vẫn là danh sách đó nên phương án này vẫn là đáp án. "list" sai vì print in giá trị mà biến list đang trỏ tới, không in tên biến. "Error" chỉ đúng nếu chạy nguyên văn trên Python 3, còn theo ngữ nghĩa Python 2 mà câu hỏi dùng thì lệnh chạy bình thường. "None of the others" sai vì đã có phương án khớp với nội dung in ra. Lưu ý thêm: đặt tên biến là list che mất hàm dựng sẵn list(), nên tránh trong mã thật.
ADELETE FROM Cats WHERE name = 'Ruby'
BDELETE name='Ruby' FROM Cats
CDELETE ROW name='Ruby' FROM Cats
DDELETE FROM Cats WHERE name == 'Ruby'
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "DELETE FROM Cats WHERE name = 'Ruby'". Cú pháp chuẩn của SQL để xoá dòng là DELETE FROM tên bảng rồi WHERE điều kiện; mệnh đề WHERE chọn mọi dòng thoả điều kiện, nên tất cả các dòng có tên Ruby đều bị xoá, còn nếu bỏ WHERE thì cả bảng bị xoá sạch. So sánh bằng trong SQL dùng một dấu bằng và chuỗi đặt trong nháy đơn. "DELETE name='Ruby' FROM Cats" sai cú pháp vì DELETE không nhận tên cột hay điều kiện đứng trước FROM. "DELETE ROW name='Ruby' FROM Cats" cũng sai: SQL không có từ khoá ROW trong lệnh DELETE, bản thân DELETE vốn đã thao tác trên dòng. "DELETE FROM Cats WHERE name == 'Ruby'" dùng toán tử so sánh quen thuộc của Python; SQLite tình cờ chấp nhận hai dấu bằng như một cách viết khác của một dấu bằng, nhưng đó không phải SQL chuẩn và MySQL hay PostgreSQL sẽ báo lỗi cú pháp, nên cách viết đúng chuẩn vẫn là một dấu bằng.
ADocument-Type:
BContent-Type:
CMetadata:
DETag:
EHTML-Document:
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Content-Type:". Trong giao thức HTTP, phản hồi (response) của máy chủ gồm các dòng header đứng trước phần thân; header Content-Type cho trình duyệt biết kiểu MIME của tài liệu trả về, ví dụ text/html; charset=utf-8 hay image/png, để trình duyệt quyết định hiển thị nó như trang web, ảnh hay văn bản thường. Phương án "Document-Type:" không phải header chuẩn của HTTP; dễ nhầm với khai báo DOCTYPE nằm bên trong chính tài liệu HTML. Phương án "Metadata:" cũng không phải header chuẩn, chỉ là từ chung chỉ dữ liệu mô tả. Phương án "ETag:" là header có thật nhưng mang mã định danh phiên bản của tài nguyên để phục vụ bộ nhớ đệm (cache), không cho biết kiểu tài liệu. Phương án "HTML-Document:" không tồn tại; hơn nữa một phản hồi có thể là JSON hay ảnh chứ không chỉ là HTML.