- Giới thiệu
- Cài đặt
- Giao diện
- Cách sử dụng cơ bản
- Pattern (Mẫu URL)
- Override body
- Redirect URL
- Quản lý rules
- Tính năng bổ sung
- Lưu ý quan trọng
- FAQ
Network Overrides DevTools là extension cho Chrome/Edge dành cho developer, cho phép chặn và ghi đè response của các API request ngay trong trình duyệt mà không cần sửa code backend.
🛒 Chrome Web Store: Network Overrides API (DevTools)
Công dụng chính:
- Mock API response để test frontend khi backend chưa sẵn sàng.
- Can thiệp / Ghi đè Request Headers (ví dụ:
Authorization: Bearer token). - Debug bằng cách thay đổi response để kiểm tra các trạng thái khác nhau (lỗi, timeout, dữ liệu rỗng,...).
- Redirect request từ API cũ sang API mới mà không cần sửa code.
- Nhân bản quy tắc (Duplicate Rule) và quản lý Rule Profiles / Presets linh hoạt.
- Xem trước trực tiếp phản hồi hình ảnh (Base64 PNG/JPG, SVG).
- Xem nhanh các API request đã gửi và copy cURL để dùng lại.
- Trình duyệt Chrome hoặc Microsoft Edge (bản mới nhất).
- Tải từ Chrome Web Store hoặc cài extension dạng "unpacked" (tải từ source).
- Mở
chrome://extensions(hoặcedge://extensions). - Bật Developer mode (góc trên bên phải).
- Click Load unpacked.
- Chọn thư mục chứa
manifest.json(thư mục gốc của project). - Extension "Network Overrides API (DevTools)" sẽ xuất hiện.
- Icon extension xuất hiện trên thanh toolbar.
- Mở DevTools (F12) → tab Overrides.
Extension có 2 cửa sổ:
Click icon extension trên thanh toolbar. Gồm:
- Tiêu đề: "Network Overrides API"
- Nút Refresh (↻): Tải lại danh sách API đã capture.
- Toggle Enable Overrides: Bật/tắt tính năng ghi đè.
- 3 tabs:
- Captured APIs (N): Danh sách API đã capture được, nhóm theo loại (XHR, Fetch, JS, CSS...).
- Overridden (N): API đang bị ghi đè bởi rule.
- Rules (N): Danh sách các override rules.
- Thanh tìm kiếm: Lọc API theo URL.
Mở DevTools (F12) → tab Overrides. Giống popup nhưng có thêm:
- Manual editor: Form nhập pattern + body nhanh phía trên tab Rules.
- Auto-load HAR: Tự động load lịch sử request từ
chrome.devtools.network.getHAR()khi mở panel.
Khi click vào một API, modal hiện ra với:
- Pattern: URL pattern để matching.
- HTTP Method: Dropdown chọn method (
Any,GET,POST,PUT,PATCH,DELETE) để giới hạn rule chỉ áp dụng cho một method cụ thể. Mặc định làAny, khớp với mọi method (giống như hành vi trước khi có field này). Khi mở modal từ một API đã capture, method sẽ được điền sẵn theo method của request đó. - Override body / Redirect to URL: Chọn loại override.
- Response body: Nội dung response ghi đè (nếu chọn Override body).
- Redirect URL: URL chuyển hướng (nếu chọn Redirect to URL).
- Format JSON: Làm đẹp JSON body.
- Body type badge: Nhãn tự động phát hiện
texthoặcjson. - Save Override: Lưu rule.
- Cách 1: Click icon extension trên toolbar → mở popup.
- Cách 2: Mở DevTools (F12) → tab Overrides.
Gạt toggle Enable Overrides sang ON.
Khi bật, extension sẽ attach
debuggervào tab hiện tại và bắt đầu theo dõi request.
Duyệt web / dùng ứng dụng như bình thường. Các API request sẽ tự động xuất hiện trong tab Captured APIs.
Cách 1 (Click API):
- Vào tab Captured APIs hoặc Overridden.
- Click vào API muốn ghi đè.
- Modal hiện ra với pattern được điền sẵn, và dropdown Method được chọn sẵn theo method của request đã capture nếu đó là
GET/POST/PUT/PATCH/DELETE(nếu không, mặc định làAny). - Nếu API có response body, nó sẽ được tự động điền vào ô Response body.
- Chỉnh sửa nội dung → Save Override.
Cách 2 (Manual - DevTools panel):
- Vào tab Rules.
- Ở form phía trên, nhập Pattern và Response body.
- Click Add override.
- API có override sẽ có viền xanh trong danh sách (class
active). - Tab Overridden hiển thị số lượng và danh sách API đang bị ghi đè.
- Response thật sẽ được thay thế bằng nội dung bạn đã nhập.
- Gạt toggle OFF để tắt hoàn toàn.
- Hoặc vào tab Rules → click ✕ để xóa rule.
Pattern là một chuỗi bất kỳ. URL nào chứa chuỗi đó sẽ khớp.
Pattern: /api/users
Khớp với: https://example.com/api/users
https://example.com/api/users/123
https://example.com/v2/api/users/list
Không: https://example.com/api/admin
Dùng * để match bất kỳ segment nào. * cũng captures giá trị để dùng trong Redirect URL.
Pattern: /api/*/users/*
Khớp với: /api/v1/users/123 → captures: ["v1", "123"]
/api/v2/users/abc → captures: ["v2", "abc"]
Có thể capture nhiều *, mỗi * tương ứng với một capturing group.
Pattern bắt đầu và kết thúc bằng /, có thể kèm flags.
Pattern: /\/api\/v\d+\/users/i
Khớp với: /api/v1/users (case-insensitive)
/API/V2/Users
Không: /api/admin/users
Pattern: /\/api\/user\/(\d+)/
Khớp với: /api/user/42 (captures: ["42"])
Pattern: *
Pattern: all
Khớp với mọi request.
Rules được duyệt theo thứ tự trong danh sách. Rule đầu tiên khớp sẽ được áp dụng. Kéo thả không hỗ trợ — nếu cần ưu tiên, xóa và tạo lại rule theo thứ tự mong muốn.
Bên cạnh URL pattern, một rule còn có thể được giới hạn theo HTTP method cụ thể thông qua field Method trong modal (xem mục 3.3 và 4 ở trên). Rule có method cụ thể (GET, POST, PUT, PATCH, DELETE) chỉ áp dụng cho request dùng đúng method đó; Any (mặc định) khớp với mọi method, không phân biệt loại pattern.
Nội dung nhập vào sẽ được encode thành base64 và trả về như response body.
// Ví dụ: Mock JSON response
{
"status": "ok",
"data": [
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
]
}Dùng khi bạn đã có sẵn nội dung dạng base64 (ví dụ: binary, image, file đã encode trước).
text: Nội dung không phải JSON (màu xanh dương).json: Nội dung là JSON hợp lệ (màu xanh lá), tự động phát hiện khi gõ.
Click Format JSON để làm đẹp nội dung JSON (pretty-print). Nếu không phải JSON, nút không có tác dụng.
Khi tạo override mới từ một API:
- Nếu API có response body trong bộ nhớ (
recentApiBodies), nó sẽ được tự động điền vào. - Nếu không, extension sẽ gửi message
getApiDatađến background worker để lấy body đã lưu. - Tính năng này chỉ hoạt động nếu toggle Auto-fill on open được bật (mặc định: có).
Khi chọn Redirect to URL, thay vì ghi đè body, extension sẽ chuyển hướng request đến URL khác ngay ở request stage (trước khi request thật được gửi đi).
Dùng * trong Redirect URL để thay thế bằng giá trị đã capture từ pattern.
Ví dụ:
| Pattern | Request URL | Captures | Redirect URL | Kết quả |
|---|---|---|---|---|
/api/* |
https://site.com/api/user |
["user"] |
https://site.com/api/v2/* |
https://site.com/api/v2/user |
/api/old/*/data |
/api/old/v1/data |
["v1"] |
/api/new/*/data |
/api/new/v1/data |
https://old.com/*/item/* |
https://old.com/shop/item/5 |
["shop", "5"] |
https://new.com/*/product/* |
https://new.com/shop/product/5 |
Nếu còn * chưa được thay thế trong Redirect URL, extension sẽ log lỗi và request sẽ proceed bình thường (không redirect).
Ví dụ lỗi thường gặp: Pattern có 1 * nhưng Redirect URL có 2 *:
| Pattern | Request URL | Captures | Redirect URL | Kết quả |
|---|---|---|---|---|
https://site.com/api/* |
https://site.com/api/user |
["user"] |
https://site.com/api/v2/** |
❌ Lỗi: * thứ hai không được thay thế |
- Chuyển từ API cũ sang API mới mà không cần sửa frontend.
- Chuyển request từ production sang staging/local để debug.
- Bỏ qua một số request bằng cách redirect đến một endpoint rỗng.
Vào tab Rules. Mỗi rule hiển thị:
- Checkbox enable: ở đầu dòng. Bỏ tick nghĩa là rule đang bị tắt (xem mục 8.5).
- Pattern: In đậm màu xanh.
- Method badge (nếu khác
Any): một badge nhỏ (ví dụPOST) cạnh phần preview body. - Redirect URL (nếu có): Mũi tên → kèm URL.
- Body preview: 80 ký tự đầu của body, kèm mode (
text/file).
Click ✎ bên cạnh rule → modal hiện ra với thông tin hiện tại → chỉnh sửa → Save Override.
Click ✕ → rule bị xóa ngay lập tức.
- Rules được lưu trong
chrome.storage.local→ không mất khi refresh trang, đóng/mở DevTools, restart trình duyệt. - Không cần lo lắng về việc mất dữ liệu.
Mỗi rule có một checkbox ở đầu dòng. Bỏ tick sẽ tắt rule đó (enabled: false) mà không xóa rule:
- Rule vẫn hiển thị trong danh sách Rules, nhưng bị làm mờ (dimmed).
- Các API mà rule này nhắm tới vẫn nằm trong tab Overridden (vì vẫn khớp pattern và method), nhưng cũng được hiển thị mờ đi, vì rule đã tắt thì không còn thực sự được áp dụng.
- Background service worker sẽ bỏ qua các rule đang tắt khi quyết định override request nào.
Tick lại checkbox để bật rule trở lại. Rule mới tạo, cũng như các rule đã tồn tại trước khi có tính năng này, mặc định là đang bật (enabled).
Click Export trong tab Rules để tải xuống các rule của domain đang active dưới dạng file JSON (đặt tên theo domain). File có cấu trúc:
{
"version": 1,
"domain": "https://example.com",
"exportedAt": "2026-07-07T00:00:00.000Z",
"overrides": [
/* OverrideRule[] */
]
}Export chỉ bao gồm rules của domain đang mở trong panel, không phải tất cả các domain.
Click Import trong tab Rules và chọn một file JSON đã export trước đó (hoặc tự tạo tay):
- Nếu field
domaintrong file có giá trị và khác với domain đang active trong panel, một hộp thoại confirm sẽ cảnh báo và hỏi có muốn import vào domain hiện tại không. Nhấn Cancel sẽ hủy import, không có gì thay đổi. - Nếu domain hiện tại đã có rules, một hộp thoại confirm sẽ hỏi cách kết hợp: OK = merge — các rule import được nối thêm vào cuối danh sách hiện có; Cancel = replace — toàn bộ rule hiện có của domain này bị thay thế bằng các rule trong file import.
- Nếu domain hiện tại chưa có rule nào, import sẽ được áp dụng ngay, không hỏi.
- File không hợp lệ (không phải JSON hợp lệ, thiếu mảng
overrides, hoặc có rule thiếu field bắt buộc) sẽ bị từ chối kèm cảnh báo (alert), và không có gì thay đổi. - Chỉ các field hợp lệ của rule (
pattern,mode,body,redirectUrl,method,enabled) được giữ lại từ mỗi rule import; các property khác trong file sẽ bị bỏ qua.
Giống Export, Import luôn thao tác trên domain đang active trong panel — không bao giờ áp dụng cho tất cả domain cùng lúc.
Mỗi API entry có nút cURL. Click để copy request dưới dạng lệnh cURL:
curl 'https://api.example.com/data' \
-X 'POST' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxx' \
--data-raw '{"key":"value"}'Ô tìm kiếm ở tab Captured APIs và Overridden. Tìm kiếm theo URL substring, không phân biệt hoa thường. Kết quả tìm kiếm được highlight (nền vàng).
Click nút Refresh (↻) ở góc trên bên phải. Extension sẽ thử 5 lần (mỗi lần cách 250ms) để load APIs từ background worker.
API được nhóm theo resource type:
| Type | Hiển thị | Màu/Icon |
|---|---|---|
| XHR | XHR | -- |
| Fetch | Fetch | -- |
| JS | JS | -- |
| CSS | CSS | -- |
| Image | Img | -- |
| Media | Media | -- |
| Font | Font | -- |
| Document | Doc | -- |
| WebSocket | WS | -- |
| Manifest | Manifest | -- |
| EventSource | EventSource | -- |
| TextTrack | TextTrack | -- |
| Khác | Other | -- |
Click vào tiêu đề nhóm (ví dụ "XHR ▼") để thu gọn/mở rộng. Trạng thái thu gọn được lưu trong storage.
Khi một request bị ghi đè, extension thêm các header sau vào response:
x-network-overrides: truex-network-overrides-pattern: <pattern>
Điều này giúp bạn dễ dàng nhận biết request nào đã bị can thiệp ngay trong Network tab của DevTools.
- Override chỉ áp dụng cho tab hiện tại (tab đang được attach debugger).
- Mỗi lần bật toggle, extension sẽ attach debugger vào tab đang active.
- Chuyển tab khác → override không còn tác dụng cho đến khi bật lại.
- Tối đa 500 URL trong danh sách recent APIs.
- Tối đa 100 response bodies được lưu.
- Khi vượt quá, dữ liệu cũ nhất sẽ bị xóa (FIFO).
- Chỉ XHR và Fetch mới được lưu response body (dùng cho auto-fill).
- Các loại khác (JS, CSS, Image...) không được lưu body.
Recent APIs và response bodies được lưu với key recentApis_{tabId} và recentApiBodies_{tabId}. Khi bạn đóng tab và mở lại, tabId mới sẽ khác → dữ liệu cũ không hiển thị.
Extension này chỉ dành cho developer debugging. Không sử dụng trong môi trường production cho người dùng cuối.
Extension yêu cầu các quyền:
debugger— để can thiệp request.storage— để lưu rules và dữ liệu.<all_urls>— để attach debugger vào mọi tab.
Kiểm tra:
- Đã bật Enable Overrides chưa? (Toggle phải xanh).
- Pattern có khớp với URL không? Thử pattern
*để match all. - Tab hiện tại có phải tab đang được debug không? (Thử refresh extension).
- Mở DevTools → Console của extension để xem lỗi (nếu có).
Có thể cần refresh lại trang. Nếu vẫn tiếp diễn, tắt hẳn extension và bật lại.
Vào tab Rules, click ✕ trên từng rule. Extension không có nút "Clear all" — cần xóa thủ công từng cái.
Override rules thì có (lưu vĩnh viễn). Recent APIs thì không — khi tab cũ đóng, tab mới có tabId khác. Nếu bạn thấy API cũ, có thể do bạn đang mở lại đúng tab cũ.
Vào chrome://extensions → click Details của extension → bật Allow in incognito.
Kiểm tra Network tab trong DevTools:
- Header
x-network-overrides: trueđược thêm vào response. - Trong extension, API entry có highlight xanh (class
active) và xuất hiện trong tab Overridden.
Click nút Refresh (↻). Extension thử 5 lần trong 1.25 giây. Nếu vẫn không thấy:
- Kiểm tra toggle đã bật chưa.
- Kiểm tra tab có thực sự gửi request không (nhìn Network tab).
- Mở DevTools panel thay vì popup (panel dùng
chrome.devtools.networknên có thể bắt được nhiều hơn).
Không. Extension dùng chrome.storage.local (dung lượng 10MB). Không dùng sync storage vì rules có thể chứa dữ liệu lớn (response body).
Không. Extension chỉ hoạt động với HTTP request (XHR, Fetch) thông qua Fetch domain của CDP. WebSocket không nằm trong phạm vi này.
Có. Import luôn ghi vào domain đang active trong panel, bất kể field domain trong file được export từ domain nào — nhưng nếu field đó khác domain hiện tại, một hộp thoại confirm sẽ cảnh báo trước, để sự khác biệt này không bị bỏ qua âm thầm.