Quay lại blog

Cách cấu hình tệp PAC cho proxy: chỉ định lưu lượng cần thiết mà không tốn kém thêm

Tập tin PAC cho phép quản lý linh hoạt lưu lượng và chỉ định các trang web cần thiết qua proxy - không tốn kém và không làm giảm tốc độ.

📅15 tháng 5, 2026
```html

Nếu bạn quản lý nhiều tài khoản quảng cáo, thu thập dữ liệu từ các chợ trực tuyến hoặc làm việc với các nền tảng nước ngoài — bạn chắc chắn đã gặp phải tình huống mà toàn bộ lưu lượng đi qua proxy, mặc dù chỉ cần điều này cho một vài trang web. Kết quả là: tốc độ giảm, chi phí lưu lượng tăng, và proxy "bị tiêu hao" nhanh hơn. Tệp PAC giải quyết vấn đề này: nó cho phép chỉ định chính xác những trang web nào đi qua proxy, và những trang nào — trực tiếp.

Tệp PAC là gì và tại sao nó cần thiết

PAC là viết tắt của Proxy Auto-Configuration — cấu hình tự động cho proxy. Về cơ bản, đây là một tệp văn bản nhỏ với một hàm JavaScript, mà cho mỗi yêu cầu từ trình duyệt hoặc hệ thống sẽ quyết định: cho phép lưu lượng đi trực tiếp hay qua máy chủ proxy.

Nghe có vẻ kỹ thuật, nhưng trên thực tế, đây là một công cụ rất đơn giản. Bạn chỉ cần viết quy tắc một lần — và hệ thống sẽ tự động áp dụng chúng. Không cần phải chuyển đổi proxy bằng tay mỗi lần hoặc giữ một trình duyệt riêng cho mỗi trang web.

Ai thực sự cần điều này:

  • Các nhà tiếp thị — bạn chạy quảng cáo trên Facebook Ads và TikTok Ads, nhưng không muốn toàn bộ lưu lượng khác (email, ứng dụng nhắn tin, trang web công việc) đi qua proxy và làm chậm công việc.
  • Các chuyên gia SMM — bạn quản lý từ 20-50 tài khoản trên Instagram hoặc TikTok, và mỗi hồ sơ cần proxy riêng chỉ cho nền tảng cụ thể.
  • Các nhà bán hàng trên các chợ trực tuyến — bạn thu thập giá từ Wildberries hoặc Ozon, nhưng muốn chỉ các yêu cầu đến những trang web này đi qua proxy, không phải toàn bộ internet.
  • Các nhà tiếp thị — bạn kiểm tra kết quả tìm kiếm và quảng cáo từ các khu vực khác nhau, trong khi công việc còn lại diễn ra từ IP thực của bạn.

Lợi thế chính của tệp PAC so với cấu hình proxy thông thường là tiết kiệm lưu lượng và tài nguyên. Khi toàn bộ lưu lượng đi qua proxy, bạn phải trả tiền cho mỗi megabyte, bao gồm cả YouTube, Google Docs và cập nhật Windows. Tệp PAC cho phép chỉ cho phép lưu lượng thực sự cần thiết đi qua proxy.

💡 Điểm quan trọng

Tệp PAC được hỗ trợ bởi tất cả các trình duyệt hiện đại (Chrome, Firefox, Edge), hệ điều hành (Windows, macOS, Linux) và hầu hết các trình duyệt chống phát hiện. Đây là tiêu chuẩn đã tồn tại hơn 25 năm.

Cách hoạt động của tệp PAC: logic định tuyến lưu lượng

Mỗi khi trình duyệt hoặc ứng dụng cố gắng mở bất kỳ URL nào, nó sẽ gọi hàm từ tệp PAC và truyền cho nó hai tham số: URL và tên máy chủ (miền). Hàm sẽ phân tích các dữ liệu này và trả về một trong ba giá trị:

  • DIRECT — kết nối trực tiếp, không qua proxy.
  • PROXY host:port — sử dụng proxy HTTP với địa chỉ và cổng đã chỉ định.
  • SOCKS5 host:port — sử dụng proxy SOCKS5.

Hàm được thực hiện ngay lập tức — trước khi thiết lập kết nối. Người dùng không nhận thấy bất kỳ độ trễ nào. Logic có thể phức tạp tùy ý: bạn có thể định tuyến lưu lượng đến Facebook qua một proxy, đến TikTok qua một proxy khác, và tất cả những thứ còn lại đi trực tiếp.

Đây là sơ đồ đơn giản về cách hoạt động:

  1. Bạn mở facebook.com trong trình duyệt
  2. Trình duyệt gọi hàm từ tệp PAC: "Nơi nào để định tuyến yêu cầu đến facebook.com?"
  3. Hàm kiểm tra danh sách quy tắc và trả lời: "Sử dụng PROXY 185.10.10.1:8080"
  4. Trình duyệt kết nối đến Facebook qua proxy
  5. Bạn mở google.com — hàm trả lời: "DIRECT"
  6. Google mở trực tiếp từ IP thực của bạn

Cách tiếp cận này được gọi là split tunneling — phân chia lưu lượng. Đây là thực hành tiêu chuẩn trong các mạng doanh nghiệp và VPN, nhưng để làm việc với proxy, tệp PAC thậm chí còn phù hợp hơn — nó dễ cấu hình hơn và không yêu cầu cài đặt phần mềm bổ sung.

Cấu trúc của tệp PAC: phân tích từng phần

Tệp PAC là một tệp văn bản thông thường với phần mở rộng .pac. Bên trong nó có một hàm JavaScript bắt buộc với tên FindProxyForURL. Chính hàm này được trình duyệt gọi mỗi khi có yêu cầu.

Cấu trúc cơ bản trông như sau:

function FindProxyForURL(url, host) {

  // Quy tắc 1: nếu đây là localhost — luôn trực tiếp
  if (isPlainHostName(host)) {
    return "DIRECT";
  }

  // Quy tắc 2: nếu miền là facebook.com — qua proxy
  if (dnsDomainIs(host, "facebook.com")) {
    return "PROXY 185.10.10.1:8080";
  }

  // Quy tắc 3: tất cả các yêu cầu khác — trực tiếp
  return "DIRECT";

}

Chúng ta sẽ phân tích các hàm tích hợp chính mà bạn sẽ thường xuyên sử dụng:

Hàm Chức năng Ví dụ
dnsDomainIs(host, ".example.com") Kiểm tra xem máy chủ có thuộc miền không Sẽ bắt facebook.com và tất cả các miền con
shExpMatch(host, "*.example.com") So khớp theo mẫu (wildcard) Lọc linh hoạt theo mặt nạ miền
isInNet(host, "10.0.0.0", "255.0.0.0") Kiểm tra sự thuộc về mạng IP Để lọc theo dải IP
isPlainHostName(host) Kiểm tra xem máy chủ có phải là tên miền cục bộ không localhost, printer, nas — trực tiếp
localHostOrDomainIs(host, "...") Kiểm tra máy chủ hoặc miền cục bộ Để loại trừ mạng nội bộ

Một điểm quan trọng: hàm xử lý các quy tắc từ trên xuống dưới và dừng lại ở lần khớp đầu tiên. Do đó, thứ tự của các quy tắc có ý nghĩa — hãy đặt các điều kiện cụ thể hơn trước, và quy tắc chung mặc định ở cuối.

Các ví dụ tệp PAC sẵn có cho các nhiệm vụ thực tế

Dưới đây là bốn mẫu thực tiễn cho các nhiệm vụ cụ thể. Sao chép mẫu cần thiết, thay thế địa chỉ và cổng proxy bằng dữ liệu của bạn — và tệp đã sẵn sàng để sử dụng.

Mẫu 1: Chỉ Facebook và Instagram qua proxy (cho các nhà tiếp thị)

function FindProxyForURL(url, host) {

  // Địa chỉ cục bộ — luôn trực tiếp
  if (isPlainHostName(host) || 
      shExpMatch(host, "*.local") ||
      host === "127.0.0.1") {
    return "DIRECT";
  }

  // Facebook và tất cả các miền con của nó — qua proxy
  if (dnsDomainIs(host, "facebook.com") ||
      dnsDomainIs(host, "fbcdn.net") ||
      dnsDomainIs(host, "fb.com")) {
    return "PROXY 185.10.10.1:8080";
  }

  // Instagram — qua cùng một proxy
  if (dnsDomainIs(host, "instagram.com") ||
      dnsDomainIs(host, "cdninstagram.com")) {
    return "PROXY 185.10.10.1:8080";
  }

  // Tất cả những thứ khác — trực tiếp
  return "DIRECT";

}

Mẫu 2: Các proxy khác nhau cho các nền tảng khác nhau (cho các đại lý SMM)

function FindProxyForURL(url, host) {

  if (isPlainHostName(host)) {
    return "DIRECT";
  }

  // Instagram — qua proxy cư trú #1
  if (dnsDomainIs(host, "instagram.com") ||
      dnsDomainIs(host, "cdninstagram.com")) {
    return "PROXY 91.200.10.5:3128";
  }

  // TikTok — qua proxy cư trú #2
  if (dnsDomainIs(host, "tiktok.com") ||
      dnsDomainIs(host, "tiktokcdn.com") ||
      dnsDomainIs(host, "musical.ly")) {
    return "PROXY 91.200.10.6:3128";
  }

  // VK — qua một proxy riêng
  if (dnsDomainIs(host, "vk.com") ||
      dnsDomainIs(host, "vk.me") ||
      dnsDomainIs(host, "userapi.com")) {
    return "PROXY 91.200.10.7:3128";
  }

  return "DIRECT";

}

Mẫu 3: Thu thập dữ liệu từ Wildberries và Ozon (cho các nhà bán hàng)

function FindProxyForURL(url, host) {

  if (isPlainHostName(host)) {
    return "DIRECT";
  }

  // Wildberries — qua proxy (thu thập giá)
  if (dnsDomainIs(host, "wildberries.ru") ||
      dnsDomainIs(host, "wbstatic.net") ||
      dnsDomainIs(host, "wb.ru")) {
    return "PROXY 45.130.10.20:8080";
  }

  // Ozon — qua proxy
  if (dnsDomainIs(host, "ozon.ru") ||
      dnsDomainIs(host, "ozonusercontent.com")) {
    return "PROXY 45.130.10.20:8080";
  }

  // Avito — qua proxy
  if (dnsDomainIs(host, "avito.ru") ||
      dnsDomainIs(host, "avito.st")) {
    return "PROXY 45.130.10.20:8080";
  }

  return "DIRECT";

}

Mẫu 4: Proxy SOCKS5 với HTTP dự phòng (độ tin cậy)

function FindProxyForURL(url, host) {

  if (isPlainHostName(host)) {
    return "DIRECT";
  }

  // Các trang web mục tiêu — SOCKS5 chính, HTTP dự phòng
  if (dnsDomainIs(host, "facebook.com") ||
      dnsDomainIs(host, "instagram.com") ||
      dnsDomainIs(host, "tiktok.com")) {
    // Nếu SOCKS5 không khả dụng — tự động chuyển sang HTTP
    return "SOCKS5 185.10.10.1:1080; PROXY 185.10.10.1:8080; DIRECT";
  }

  return "DIRECT";

}

💡 Về các proxy dự phòng

Dòng "SOCKS5 ...; PROXY ...; DIRECT" — là chuỗi dự phòng. Nếu proxy đầu tiên không khả dụng, trình duyệt sẽ tự động thử proxy thứ hai, sau đó là kết nối trực tiếp. Rất tiện lợi cho các nhiệm vụ quan trọng, nơi không thể để xảy ra thời gian chết.

Cách kết nối tệp PAC trong trình duyệt và hệ thống

Có hai cách để kết nối tệp PAC: thông qua tệp cục bộ trên máy tính hoặc thông qua URL (nếu tệp được lưu trữ trên máy chủ). Đối với hầu hết các nhiệm vụ, tệp cục bộ là đủ.

Bước 1: Tạo tệp PAC

Mở bất kỳ trình soạn thảo văn bản nào (Notepad, Notepad++, VS Code) và dán mã từ các mẫu ở trên. Lưu tệp với phần mở rộng .pac, ví dụ: proxy_rules.pac. Nơi lưu trữ được khuyến nghị: C:\proxy\proxy_rules.pac (Windows) hoặc /Users/username/proxy/proxy_rules.pac (macOS).

Bước 2: Kết nối trong Windows 10/11

  1. Mở Cài đặt → Mạng và Internet → Máy chủ proxy
  2. Trong phần "Sử dụng kịch bản cấu hình", chuyển công tắc sang Bật
  3. Trong trường "Địa chỉ kịch bản", nhập đường dẫn đến tệp theo định dạng: file:///C:/proxy/proxy_rules.pac
  4. Nhấn Lưu
  5. Khởi động lại trình duyệt

Bước 3: Kết nối trong macOS

  1. Mở Cài đặt hệ thống → Mạng
  2. Chọn kết nối mạng đang hoạt động (Wi-Fi hoặc Ethernet) và nhấn Thêm
  3. Chuyển đến tab Proxy
  4. Đánh dấu vào ô Cấu hình tự động proxy
  5. Trong trường URL, nhập: file:///Users/username/proxy/proxy_rules.pac
  6. Nhấn OK → Áp dụng

Bước 4: Kết nối trong Google Chrome (tách biệt với hệ thống)

Chrome sử dụng cài đặt proxy hệ thống, nhưng bạn có thể khởi động nó với một tệp PAC riêng thông qua các tham số dòng lệnh. Điều này thuận tiện nếu bạn muốn chỉ Chrome hoạt động qua PAC, còn các ứng dụng khác thì không.

Tạo một lối tắt Chrome và trong trường "Đối tượng", thêm vào cuối dòng:

--proxy-pac-url="file:///C:/proxy/proxy_rules.pac"

Bước 5: Kết nối trong Firefox

  1. Mở Cài đặt → Cơ bản → Tùy chọn mạng → Cấu hình
  2. Chọn URL cấu hình tự động proxy
  3. Nhập đường dẫn: file:///C:/proxy/proxy_rules.pac
  4. Nhấn OK

Tệp PAC trong trình duyệt chống phát hiện: Dolphin, AdsPower, GoLogin

Đối với các nhà tiếp thị và chuyên gia SMM làm việc với trình duyệt chống phát hiện, tệp PAC mở ra những cơ hội bổ sung. Thay vì chỉ định một proxy cho toàn bộ hồ sơ, bạn có thể thiết lập định tuyến linh hoạt ngay bên trong hồ sơ của trình duyệt.

Dolphin Anty

Trong Dolphin Anty, tệp PAC được kết nối ở cấp độ hồ sơ. Khi tạo hoặc chỉnh sửa hồ sơ, trong phần Proxy, chọn loại PAC-script và chỉ định URL hoặc đường dẫn đến tệp. Điều này cho phép một hồ sơ sử dụng các proxy khác nhau cho các trang web khác nhau — ví dụ, Facebook qua proxy di động, còn tất cả những thứ khác thì trực tiếp.

Kịch bản thực tế: bạn có 10 tài khoản quảng cáo Facebook. Đối với mỗi hồ sơ trong Dolphin, bạn kết nối tệp PAC, chỉ định lưu lượng đến các miền Facebook và Instagram qua proxy. Lưu lượng còn lại (tải tiện ích mở rộng, cập nhật) đi trực tiếp — điều này tiết kiệm lưu lượng proxy lên đến 70%.

AdsPower

Trong AdsPower, khi thiết lập hồ sơ trong phần Cài đặt Proxy, có một trường để nhập URL PAC. Chỉ định địa chỉ của tệp PAC — nếu nó nằm cục bộ, hãy đặt nó trên một máy chủ HTTP cục bộ đơn giản (ví dụ, thông qua Python: python -m http.server 8000) và chỉ định địa chỉ http://localhost:8000/proxy_rules.pac.

GoLogin

GoLogin hỗ trợ tệp PAC thông qua trường Proxy URL trong cài đặt hồ sơ. Cú pháp tương tự — bạn chỉ định URL đầy đủ đến tệp. GoLogin cũng cho phép lưu các mẫu cài đặt proxy và áp dụng chúng hàng loạt cho nhiều hồ sơ cùng một lúc, điều này rất tiện lợi khi làm việc với số lượng lớn tài khoản.

Multilogin và Octo Browser

Cả hai trình duyệt đều hỗ trợ cấu hình PAC thông qua URL. Trong Multilogin, điều này được thiết lập trong phần Profile → Proxy → Custom proxy. Trong Octo Browser — tương tự, trong cài đặt hồ sơ, chọn loại proxy PAC và chỉ định liên kết đến tệp.

🔧 Mẹo cho trình duyệt chống phát hiện

Đặt tệp PAC trên một dịch vụ lưu trữ miễn phí (GitHub Pages, Pastebin RAW, Cloudflare Workers) — thì bạn không cần máy chủ cục bộ, và tệp sẽ có sẵn từ bất kỳ hồ sơ nào và từ bất kỳ thiết bị nào. Thêm vào đó, bạn có thể cập nhật quy tắc ở một nơi, và các thay đổi sẽ được áp dụng cho tất cả các hồ sơ ngay lập tức.

Loại proxy nào nên chọn cho cấu hình PAC

Tệp PAC hoạt động với bất kỳ loại proxy nào, nhưng cho các nhiệm vụ khác nhau, các tùy chọn khác nhau sẽ phù hợp hơn. Dưới đây là bảng so sánh giúp bạn lựa chọn:

Loại proxy Tốt nhất cho Giao thức trong PAC Tốc độ
Cư trú Facebook Ads, Instagram, TikTok — mạng xã hội với bảo vệ chống gian lận nghiêm ngặt PROXY, SOCKS5 Trung bình
Di động Nuôi tài khoản, làm việc với các phiên bản di động của ứng dụng PROXY, SOCKS5 Trung bình
Trung tâm dữ liệu Thu thập dữ liệu từ các chợ trực tuyến, theo dõi giá, nhiệm vụ SEO PROXY, SOCKS5 Cao

Đối với việc làm việc với Facebook Ads và Instagram thông qua cấu hình PAC, các nhà tiếp thị thường chọn proxy cư trú — chúng có IP thực của người dùng tại nhà và ít gây nghi ngờ hơn với các thuật toán của nền tảng.

Nếu bạn quản lý tài khoản trên Instagram hoặc TikTok từ các thiết bị di động hoặc thông qua các hồ sơ di động trong trình duyệt chống phát hiện, hãy chú ý đến proxy di động — chúng hoạt động qua các mạng di động thực sự của các nhà cung cấp và cung cấp lưu lượng "sạch" nhất cho các nền tảng này.

Đối với các nhiệm vụ thu thập dữ liệu từ Wildberries, Ozon hoặc Avito, nơi tốc độ và số lượng yêu cầu quan trọng, lựa chọn tối ưu sẽ là proxy từ trung tâm dữ liệu — chúng nhanh hơn và cho phép thực hiện nhiều yêu cầu trong một khoảng thời gian.

Cấu hình xác thực trong tệp PAC

Nếu proxy của bạn yêu cầu tên đăng nhập và mật khẩu, bạn không cần chỉ định chúng trong tệp PAC — điều này không an toàn, vì tệp có thể bị đọc. Xác thực được trình duyệt xử lý riêng: khi kết nối lần đầu, nó sẽ yêu cầu thông tin đăng nhập và lưu chúng. Hoặc sử dụng proxy với xác thực theo IP — thì tên đăng nhập/mật khẩu hoàn toàn không cần thiết.

Các lỗi thường gặp và cách khắc phục

Khi cấu hình tệp PAC, hầu hết các vấn đề liên quan đến một số lỗi điển hình. Chúng ta sẽ phân tích từng lỗi với cách giải quyết.

Lỗi 1: Tệp PAC không được áp dụng

Triệu chứng: bạn đã chỉ định đường dẫn đến tệp, nhưng lưu lượng vẫn đi trực tiếp hoặc qua các cài đặt cũ.

Nguyên nhân và giải pháp:

  • Đường dẫn đến tệp không chính xác. Kiểm tra định dạng: trên Windows phải là file:///C:/đường/dẫn/tệp.pac (ba dấu gạch chéo sau file:)
  • Trình duyệt đã lưu cache cài đặt cũ. Đóng hoàn toàn trình duyệt và mở lại.
  • Trên Windows có thể bị ảnh hưởng bởi chính sách nhóm. Kiểm tra qua gpedit.msc → Cấu hình máy tính → Mẫu quản trị → Thành phần Windows → Internet Explorer

Lỗi 2: Toàn bộ lưu lượng đi qua proxy, không chỉ những gì cần thiết

Triệu chứng: tốc độ giảm, toàn bộ internet chậm chạp.

Nguyên nhân: ở cuối hàm có return "PROXY ..." thay vì return "DIRECT".

Giải pháp: đảm bảo rằng dòng cuối cùng của hàm là return "DIRECT"; Đây là quy tắc mặc định cho mọi thứ không nằm trong các điều kiện trước đó.

Lỗi 3: Các miền con không nằm trong quy tắc

Triệu chứng: quy tắc cho facebook.com hoạt động, nhưng static.facebook.com hoặc m.facebook.com thì không.

Nguyên nhân: hàm dnsDomainIs kiểm tra sự khớp chính xác của miền và tất cả các miền con của nó, nhưng chỉ khi bạn chỉ định miền với dấu chấm ở đầu.

Giải pháp: sử dụng dnsDomainIs(host, "facebook.com") — hàm này sẽ tự động bắt tất cả các miền con. Hoặc thêm các dòng riêng cho mỗi miền con.

Lỗi 4: Lỗi cú pháp trong JavaScript

Triệu chứng: tệp PAC không hoạt động, trình duyệt bỏ qua nó.

Giải pháp: kiểm tra tệp trong công cụ trực tuyến PAC File Debugger (tìm kiếm trên Google) hoặc dán mã vào bảng điều khiển của trình duyệt (F12 → Console) — các lỗi JavaScript sẽ hiển thị ngay lập tức. Thường thì vấn đề là do thiếu dấu ngoặc hoặc dấu chấm phẩy.

Lỗi 5: Tệp PAC không hoạt động với các trang HTTPS

Triệu chứng: các trang HTTP mở qua proxy, còn HTTPS thì không.

Nguyên nhân: đối với HTTPS, trình duyệt thiết lập một đường hầm thông qua phương thức CONNECT. Một số proxy HTTP không hỗ trợ CONNECT.

Giải pháp: sử dụng proxy SOCKS5 thay vì HTTP — nó hỗ trợ cả hai loại kết nối. Trong tệp PAC, thay thế PROXY bằng SOCKS5.

Danh sách kiểm tra để kiểm tra tệp PAC

  • ✅ Hàm được gọi chính xác là FindProxyForURL (chú ý đến chữ hoa chữ thường)
  • ✅ Hàm nhận hai tham số: urlhost
  • ✅ Tất cả các dấu ngoặc nhọn đều được đóng
  • ✅ Ở cuối hàm có return "DIRECT";
  • ✅ Địa chỉ proxy theo định dạng IP:PORT không có khoảng trắng
  • ✅ Tệp được lưu với mã hóa UTF-8
  • ✅ Đường dẫn đến tệp trong cài đặt bắt đầu bằng file:///
  • ✅ Trình duyệt đã được khởi động lại sau khi thay đổi

Kết luận và khuyến nghị

Tệp PAC là một trong những công cụ bị đánh giá thấp nhất cho những ai làm việc với proxy một cách chuyên nghiệp. Nó giải quyết ngay lập tức một số vấn đề: tiết kiệm lưu lượng proxy, giữ tốc độ cho phần còn lại của internet và cho phép quản lý định tuyến linh hoạt mà không cần chuyển đổi cài đặt bằng tay.

Đối với các nhà tiếp thị, tệp PAC kết hợp với trình duyệt chống phát hiện (Dolphin Anty, AdsPower, GoLogin) cho phép thiết lập để chỉ lưu lượng Facebook Ads hoặc TikTok Ads đi qua proxy — và không có byte nào thừa. Đối với các chuyên gia SMM — các proxy khác nhau cho Instagram, TikTok và VK trong cùng một hệ thống. Đối với các nhà bán hàng trên các chợ trực tuyến — thu thập dữ liệu chính xác từ Wildberries và Ozon mà không có tải thừa.

Điều quan trọng cần nhớ: tệp PAC chỉ là một tệp văn bản với một vài dòng mã. Bạn không cần phải sợ nó. Hãy lấy một trong những mẫu sẵn có từ bài viết này, thay thế dữ liệu proxy của bạn — và chỉ trong 10 phút, bạn sẽ có một cấu hình định tuyến lưu lượng linh hoạt.

Nếu bạn dự định làm việc với Facebook Ads, Instagram hoặc TikTok thông qua cấu hình PAC, chúng tôi khuyên bạn nên sử dụng proxy cư trú — chúng cung cấp mức độ tin cậy cao nhất từ các nền tảng và rủi ro bị chặn tối thiểu khi cấu hình định tuyến qua tệp PAC được thực hiện đúng cách.

```