JavaScript 代理程式 API
- 簡介
- 廣域物件
- API 結構
- TypeScript 類型定義
- API
簡介
JavaScript 代理程式會公開 可在受監視網站上取得的 API。 您的網站可以與 JavaScript 代理程式的 API 互動,以強化/配置收集的資料、傳送自訂事件等等。
JavaScript 代理程式 API 不應與 Web REST API混淆。 可用來對收集的資料執行查詢及配置新網站的 Web REST API。
廣域物件
Instana JavaScript 代理程式定義稱為 ineum
的新廣域函數。 在 HTML 文件內的 JavaScript Snippet 之後立即可以使用此函數。 這表示即使代理程式本身尚未下載,也會存在該函數。 這樣做是為了讓 ineum
API 呼叫變得簡單且有效率。
當代理程式尚未下載時, ineum
會將所有已執行的 API 呼叫排入佇列。 完成代理程式下載之後,這些 API 呼叫會依其發出順序同步執行。 從該點開始, ineum
將取代為立即執行 API 呼叫的函數。
API 結構
所有 ineum
呼叫都遵循相同的結構。 它們看起來如下:
ineum(commandName, ...args);
參數
參數 | 說明 |
---|---|
commandName (string ) |
識別應該執行的指令,例如設定 meta 資料或報告錯誤。 |
...args |
特定指令的實際引數。 引數數目及其類型是每個指令特有的,並在下列各節中更詳細地說明。 |
請注意,函數 ineum
永不傳回任何內容 (指令 getPageLoadId
除外,請如下所示)。
TypeScript 類型定義
TypeScript 使用者可以安裝及使用 DefinitelyTyped 專案所提供的類型定義。
npm install --save @types/ineum
API
下列各節說明可用的指令名稱及其引數。
監視金鑰
可以透過 key
指令來設定監視金鑰。 在 Instana 使用者介面內配置網站時,可以看到監視金鑰。
ineum('key', trackingKey);
參數
參數 | 說明 |
---|---|
trackingKey (string ) |
Instana 中網站配置的監視金鑰。 |
範例
Instana 使用者介面中會顯示正確的配置。
切換監視金鑰
我們建議您將每一個環境 (例如: 正式作業、暫置、測試) 建模為 Instana 內的唯一網站。 這將需要您為 JavaScript 代理程式配置不同的監視金鑰,視部署而定。 如果可用的話,我們建議將監視金鑰儲存在配置管理系統中,並使用儲存的值來取代監視金鑰。
如果網站純粹是由靜態檔案所組成,或沒有可用的配置管理系統時,您可以選擇採用 Google 標籤管理程式 之類的工具,以協助您管理網站的程式碼 Snippet。 或者,您可以選擇將監視金鑰寫在程式中,並在 Web 瀏覽器內直接執行小型檢查。
if (window.location.hostname === 'example.com') {
ineum('key', 'production monitoring key');
} else if (window.location.hostname === 'qa.example.com') {
ineum('key', 'QA monitoring key');
} else {
ineum('key', 'test monitoring key');
}
報告 URL
信標會透過 HTTP GET 及 POST 傳輸至此 URL ,以將監視資料遞送至 Instana。
ineum('reportingUrl', reportingUrl);
參數
參數 | 說明 |
---|---|
reportingUrl (string ) |
要將網站監視資料傳送至其中的 URL。 |
範例
使用我們的 SaaS 產品的客戶會在 Instana 使用者介面內顯示正確的配置。 內部部署客戶必須根據其配置的 EUM 端點來識別正確的 URL。
多個後端
在某些情況下,可能需要讓 JavaScript 代理程式向多個後端報告。 在此情況下,請使用 reportingBackends
指令,讓 JavaScript 代理程式向多個後端報告。
ineum('reportingBackends', reportingBackends);
參數
參數 | 說明 |
---|---|
reportingBackends (ReportingBackend[] ) |
ReportingBackend 物件的陣列。 每一個物件都會定義一個後端,網站監視資料會傳送至該後端。 ReportingBackend 物件如下所示。 |
{
reportingUrl: 'http://example.com', // The URL to which to send website monitoring data to.
key: 'monitoring key' // The monitoring key for the website configuration in Instana.
}
自
從 Instana 版本 230開始,可以使用指令 reportingBackends
。
範例
ineum('reportingBackends', [
{ reportingUrl: 'http://backend1.example.com', key: 'monitoring key 1' },
{ reportingUrl: 'http://backend2.example.com', key: 'moniroting key 2' }
]);
附註: reportingBackends
指令優先於 reportingUrl
指令。 發出 reportingBackends
指令呼叫之後,將忽略任何 reportingUrl
指令呼叫。
頁面
Instana 可以依邏輯頁面來劃分網站度量值的區段。 若要這樣做,它需要提示使用者目前正在查看的頁面。 可以透過 page
指令來設定此頁面名稱。 建議儘早設定 page
。 此外,在某個點變更 page
以呈現文件變更 (例如,針對單一頁面應用程式) ,是完全正常的。 這可讓 Instana 追蹤 頁面轉移及頁面載入。
ineum('page', pageName);
每當透過 API 對頁面名稱進行分頁時,即會記錄頁面轉移事件- 在頁面載入階段期間,但第一次呼叫此 API 時除外。
一般而言,我們建議不要使用 window.title
或 window.href
來定義頁面。 這將導致大量追蹤頁面在大多數情況下不會提供值,例如,因為 window.title
包含產品名稱。 相反地,我們建議使用頁面的邏輯名稱。 例如 product detail page
或 payment selection
。 這會導致與實際現有程式碼有直接關係的頁面較少。
我們提供 範例專案 ,以顯示如何收集各種架構和程式庫的有意義頁面名稱。 如果您的架構/程式庫遺漏,請隨時提出取回或支援要求。
參數
參數 | 說明 |
---|---|
pageName (string ) |
頁面的名稱。 |
範例
ineum('page', 'shopping-cart');
// Do you want to change meta data and the page name at the same time?
// Make sure to change the page name last as this immediately
// triggers a page transition beacon.
ineum('meta', 'product', 'skateboard');
ineum('page', 'article-details');
識別使用者
使用者特定資訊可以選擇性地與傳輸至 Instana 的資料一起傳送。 然後可以使用此資訊來解除鎖定其他功能,例如:
- 計算受錯誤影響的使用者數目,
- 過濾特定使用者的資料
- 以查看哪個使用者起始頁面載入 /AJAX 呼叫。
依預設, Instana 不會將任何使用者識別資訊關聯至信標。 在選擇這樣做時,請注意個別的資料保護法。 我們通常建議透過使用者 ID 來識別使用者。 對於 Instana ,這是完全透通的 string
,僅用於計算特定度量值。 userName
和 userEmail
也可以用來存取更多過濾器,以及更愉快地呈現使用者資訊。
請務必注意,已傳輸至 Instana 伺服器的資料無法追溯更新。 基於此原因,請務必在頁面載入程序中儘快呼叫此 API。 建議在頁面載入程序中同步呼叫此 API ,例如將資訊呈現在伺服器端的 HTML 文件中。 這可確保所有信標都包含使用者資訊,唯一/受影響的使用者統計資料是正確的,並且在分析時可以正確地過濾和分組信標。
ineum('user', userId, userName, userEmail);
參數
參數 | 說明 |
---|---|
userId (string ,選用) |
使用者的 ID。 |
userName (string ,選用) |
使用者名稱。 |
userEmail (string ,選用) |
使用者的電子郵件位址。 |
您可以針對不想設定的值傳遞 null
或 undefined
。
範例
// Report everything to Instana
ineum('user', 'hjmna897k1', 'Tom Mason', 'tom@example.com');
// or only some data points
ineum('user', 'hjmna897k1');
ineum('user', null, null, 'tom@example.com');
階段作業追蹤
可以使用階段作業追蹤來深入瞭解一般使用者在頁面載入之間的活動。 階段作業追蹤特別可讓 Instana 在沒有已定義的 使用者資訊的情況下,判斷一般使用者的影響。
為了追蹤階段作業,在發出 trackSessions
呼叫之後, JavaScript 代理程式將使用 localStorage 瀏覽器 API。 技術上來說,階段作業是隨機 ID ,與兩個時間戳記一起儲存在瀏覽器 localStorage
的金鑰下 in-session
。
遵守隱私權法規的責任在於此 API 的呼叫者。
起始設定/重複使用階段作業
此 API 會啟動新的階段作業,或在可能時重複使用現有的階段作業。
ineum('trackSessions', sessionInactivityTimeout, sessionTerminationTimeout);
參數
參數 | 說明 |
---|---|
sessionInactivityTimeout (number ,選用) |
說明自前次 trackSessions 呼叫以來階段作業保持作用中的時間 (毫秒)。 預設為三小時。 |
sessionTerminationTimeout (number ,選用) |
說明自第一次 trackSessions 呼叫以來階段作業保持作用中的時間 (毫秒)。 預設為六小時。 |
您可以針對不想設定的值傳遞 null
或 undefined
。
範例
// Starts tracking sessions with the default timeouts
ineum('trackSessions');
// or specify custom timeouts
ineum('trackSessions', 900000 /* 15min */, 3600000 /* 1h */);
終止階段作業
終止目前執行中的階段作業 (如果有的話) ,並從 localStorage
移除儲存的資料。
ineum('terminateSession');
範例
// Starts tracking sessions with the default timeouts
ineum('trackSessions');
// after some time…
ineum('terminateSession');
meta 資料
meta 資料可用來標註頁面載入和 AJAX 呼叫。 請考量使用此項目來追蹤使用者介面配置值、設定、特性旗標 ... 任何可能有助於分析的其他環境定義。
ineum('meta', key, value);
參數
參數 | 說明 |
---|---|
key (string ) |
您要新增為 meta 資料之鍵值組的 key 。 |
value (string ) |
您要新增為 meta 資料之鍵值組的 value 。 |
範例
ineum('meta', 'version', '1.42.3');
ineum('meta', 'role', 'admin');
頁面載入後端追蹤 ID
在頁面載入過程中,可以定義後端追蹤 ID ,以容許前端/後端相關性。 如需詳細資料,請參閱 後端相關性的專用小節。 只有為了在頁面載入的後端和前端處理之間取得相關性,才需要這樣做。 XMLHttpRequest
或 fetch
要求之間的相關性 不 需要它。 追蹤 ID 應該是 16 或 32 個字元的十六進位字串。
ineum('traceId', traceId);
參數
參數 | 說明 |
---|---|
traceId (string ) |
相關聯後端追蹤的追蹤 ID。 |
範例
ineum('traceId', '89jkbds891jkn321');
從追蹤排除 URL
此 API 可讓您定義數個正規表示式,當至少有一個相符項時,不會導致將資料傳輸至 Instana。 在下列實務範例中,會評估正規表示式。
- 針對文件 URL (位址列中可見的 URL ,例如
window.location.href
) 進行評估。 當其中一個正規表示式相符時,會停用對 Instana 的所有資料傳輸。 - 針對資源的 URL (例如 JavaScript 和 CSS 檔案的 URL) 進行評估。 不會將符合其中一個正規表示式之資源的相關資訊傳輸至 Instana。
- 針對 HTTP 呼叫的目標 URL 進行評估,例如透過
XMLHttpRequest
和fetch
。 不會將符合其中一個正規表示式之 HTTP 呼叫的相關資訊傳輸至 Instana。
ineum('ignoreUrls', ignoreUrls);
我們也支援從文件 URL 中刪除密鑰,亦即瀏覽器位址列中可見的 URL (請參閱 密鑰 API)。 不過,請注意,儲存在文件 URL 中的密鑰幾乎肯定會 洩漏 給所有協力廠商。 我們有一個 具有說明的專用範例應用程式 ,其顯示儲存在文件 URL 中的密鑰為何容易洩漏給所有協力廠商的原因。 如需詳細資料,請參閱此範例應用程式及說明。 不過,您可以選擇透過此 API 忽略這些 URL 的所有監視資料收集。
參數
參數 | 說明 |
---|---|
ignoreUrls (RegExp[] ) |
符合您要忽略之 URL 的 RegExp 物件陣列。 |
範例
ineum('ignoreUrls', [
/\/comet.+/i,
/\/ws.+/i,
/.*(&|\?)secret=.*/i
]);
從 URL 編寫密碼
所收集 URL 中的查詢參數可能包含機密資料。 因此, JavaScript 代理程式支援查詢參數索引鍵的型樣規格,其值將被編寫。 在 JavaScript 代理程式內 (亦即,在 Web 瀏覽器內) 發生編寫。 因此,密鑰將無法呼叫到 Instana 伺服器進行處理,並且將無法在使用者介面中進行分析或透過 API 進行擷取。
ineum('secrets', secrets);
如果查詢參數符合清單中的項目,則會編寫值,且不會傳送至 Instana 後端。 如果未定義 ineum('secrets')
,依預設, Instana 會使用 [/key/i, /secret/i, /password/i]
作為比對規則。
參數
參數 | 說明 |
---|---|
secrets (RegExp[] ) |
符合查詢參數索引鍵名稱的 RegExp 物件陣列,其值應被視為密鑰。 |
範例
ineum('secrets', [/account/i, /user/i]);
例如, https://example.com/accounts/status?account=acount_name&user=user_name
將收集並顯示為 https://example.com/accounts/status?account=<redacted>&user=<redacted>
。
附註: JavaScript 代理程式 不 支援將路徑參數 (/account/<account id>/status
) 或矩陣參數 (/account;accountId=<account id>/status
) 視為密碼。
附註: 儲存在文件 URL 中的密鑰幾乎肯定會洩漏給所有協力廠商。 我們有一個 具有說明的專用範例應用程式 ,其顯示儲存在文件 URL 中的密鑰為何容易洩漏給所有協力廠商的原因。 如需詳細資料,請參閱此範例應用程式及說明。
從追蹤排除使用者計時
我們會自動收集透過 User-Timing API 所做的標記和測量,並將它們轉換成 自訂事件。 這表示 User-Timing API 可以用來作為供應商中立的方式,將純計時資料報告給 Instana。
此 API 可讓您定義數個正規表示式,當至少有一個相符項時,將不會產生特定使用者計時的集合。 依預設,我們會忽略 ...
- React 's 使用者計時,亦即以 ⚛️ 或 ⛔ 表情符號開頭的標記和測量。
- Angular 的使用者計時,亦即以
Zone
和 - 其名稱以
start
或end
開頭的標記和測量。
ineum('ignoreUserTimings', ignoreUserTimings);
參數
參數 | 說明 |
---|---|
ignoreUserTimings (RegExp[] ) |
RegExp 物件的陣列,符合您要忽略的使用者計時標記及測量的名稱。 |
範例
ineum('ignoreUserTimings', [
/^\u269B/,
/^\u26D4/,
/^Zone(:|$)/,
/mySecretTiming/i
]);
配置頁面載入之後的等待上限
為了收集其他度量值,例如第一個輸入延遲和累積佈置移位, JavaScript 代理程式將等待直到 ...
- 所有度量都可用
- 頁面已卸載 (例如,標籤已關閉) 或
- 直到最長的等待時間已經過去。
您可以使用此 API 來重新配置等待時間上限。 依預設,在頁面載入完成之後,我們最多會等待一秒,亦即, onLoad 事件已結束。
ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
參數
參數 | 說明 |
---|---|
durationMillis (numbner) |
在頁面載入完成之後,在傳輸頁面載入引標之前等待的時間上限 (毫秒)。 |
範例
ineum('maxMaitForPageLoadMetricsMillis', 500);
擷取頁面載入 ID
有時手動接收頁面載入的 ID 會很有用,例如當想要執行自訂相關性時。 只要尚未載入 JavaScript 代理程式,此函數就會傳回 undefined
。 載入之後,它一律會傳回相同的 string
。
ineum('getPageLoadId');
退貨
- 頁面載入 ID 為
string
或undefined
。
範例
var pageLoadId = ineum('getPageLoadId');
console.log(pageLoadId);
錯誤追蹤
手動錯誤報告
可以報告捕捉到的錯誤。 這可用來整合 Instana 與捕捉未捕捉錯誤的架構及程式庫。
ineum('reportError', error, opts);
參數
參數 | 說明 |
---|---|
error (Error 或 string ) |
JavaScript Error 物件或錯誤訊息。 |
opts (ErrorReportingOpts ,選用) |
如下所示的物件。 |
{
componentStack: '...' // an optional string
meta: { // An optional JavaScript object with `string` values which can be used
widgetType: 'chart' // to send metadata to Instana just for this singular event. In contrast to
} // the usage of the metadata API, this metadata is not included in subsequent
// beacons.
}
範例
ineum('reportError', new Error('Something failed'), {
componentStack: '…',
meta: {
widgetType: 'chart'
}
});
React Integration
整合 JavaScript 代理程式與 React 錯誤界限時,可以取得更好的錯誤見解。 具體而言,除了錯誤 (函數) 堆疊追蹤之外,它還會導致元件堆疊追蹤可供使用。
下列程式碼 Snippet 顯示如何延伸 React 的 componentDidCatch
來達成此整合。 如需 componentDidCatch
生命週期的相關資訊,請參閱 React 文件。
componentDidCatch(error, info) {
ineum('reportError', error, {
componentStack: info.componentStack
});
// your regular error boundary code
}
Angular 2 + 整合
依預設, angular 會捕捉所有錯誤,並 將它們記載至主控台。 這表示 JavaScript 代理程式將永遠無法存取這些錯誤。 下列 TypeScript Snippet 顯示如何將 Angular 捕捉到的錯誤與 Instana 整合。
如需 Angular 錯誤處理程式的相關資訊,請參閱 Angular 文件。
import { ErrorHandler, NgModule } from '@angular/core';
class CustomErrorHandler implements ErrorHandler {
handleError(error) {
ineum('reportError', error);
// Continue to log caught errors to the console
console.error(error);
}
}
@NgModule({
providers: [{ provide: ErrorHandler, useClass: CustomErrorHandler }],
})
class MyModule {
// the rest of your application code…
}
Vue 整合
Vue 可以針對從應用程式延伸的未捕捉錯誤指派廣域處理程式。 下列程式碼 Snippet 顯示如何將 Vue 的錯誤處理與 Instana 整合。
如需 Vue 錯誤處理程式的相關資訊,請參閱 Vue 文件。
app.config.errorHandler = (err, instance, info) => {
ineum('reportError', err);
// your regular error handling code
}
從追蹤排除錯誤
可以明確停止將部分錯誤報告給 Instana。 這可用來忽略已知/無法修正的錯誤。
ineum('ignoreErrorMessages', ignoreErrorMessages);
參數
參數 | 說明 |
---|---|
ignoreErrorMessages (RegExp[] ) |
RegExp 物件的陣列,以符合您要從錯誤追蹤中排除的錯誤。 |
範例
ineum('ignoreErrorMessages', [/^script error/i]);
洞察至 Script 錯誤
內嵌大量協力廠商 Script 的網站通常會遇到穩定數目的 Script Error
。 我們確實提供如何讓這些錯誤成為可存取的 指引 ,亦即如何取得實際錯誤訊息及堆疊的存取權。 有時,您可能無法遵循這些指示,例如,因為協力廠商不會新增必要的 Access-Control-Allow-Origin
標頭。 針對這些案例,我們提供替代方法來改善對 Script Errors
的見解。
請注意,此機制是 無銀色子彈。 它會授與您改良的可見性,且您會遇到更有用的追蹤錯誤,但您仍會看到 (減少) Script Error
。 我們仍建議您先閱讀並嘗試實作 跨原點指引 。
DOM 事件接聽器錯誤的明確追蹤
這會將 Instana 代理程式放入每個 DOM 事件接聽器的呼叫堆疊中。 Instana 代理程式會自動將 try/catch
陳述式放置在事件接聽器的函數周圍。 這可讓您更深入瞭解跨原點錯誤。
依預設,此特性 已停用 ,因為此值對大部分客戶而言是有問題的。 此外,由於 Web 瀏覽器已開始修補 Web 安全模型中的這個孔,因此無法保證可以透過執行此動作來收集 Script 錯誤的較佳相關資訊。
ineum('wrapEventHandlers', enabled);
參數
參數 | 說明 |
---|---|
enabled (boolean ) |
用於停用/啟用此特性的旗標。 |
範例
ineum('wrapEventHandlers', true);
明確追蹤計時器錯誤
這會將 Instana 代理程式放入所有 計時器的呼叫堆疊中。 Instana 代理程式會自動將 try/catch
陳述式放置在計時器處理程式的函數周圍。 這可讓您更深入瞭解跨原點錯誤。
依預設會停用此特性,因為此值對我們的大部分客戶而言是有問題的。 此外,由於 Web 瀏覽器已開始修補 Web 安全模型中的這個孔,因此無法保證可以透過執行此動作來收集 Script 錯誤的較佳相關資訊。
ineum('wrapTimers', enabled);
參數
參數 | 說明 |
---|---|
enabled (boolean ) |
用於停用/啟用此特性的旗標。 |
範例
ineum('wrapTimers', true);
忽略 Script 錯誤
如果您無法使用上述任何機制來深入瞭解 Script 錯誤,您可能想要停止將它們報告給 Instana。 這有助於確保錯誤統計資料仍可採取行動。 如果要停止將 Script 錯誤報告給 Instana ,您可以使用下列 Snippet。
ineum('ignoreErrorMessages', [/^script error/i]);
報告自訂事件
澄清: 改為尋找廣域自訂事件? 移至 「事件」頁面。
自訂事件可讓您向 Instana 報告非標準活動、重要互動及自訂計時。 這在分析未捕捉的錯誤 (瀏覽途徑) 及追蹤其他效能度量時特別有用。
ineum('reportEvent', eventName, {
duration: duration,
timestamp: timestamp,
backendTraceId: backendTraceId,
error: error,
componentStack: componentStack,
meta: meta
});
參數
參數 | 說明 |
---|---|
eventName (string ) |
定義在您的網站上發生應導致傳輸自訂引標的事件類型。 |
timestamp (number , 選用) |
指出事件發生時間的時間戳記。 未定義時回復為 now() - duration 。 |
duration (number , 選用) |
事件花費的持續時間 (毫秒)。 |
backendTraceId (string , 選用) |
使用此參數將引標關聯至後端追蹤。 其值應該是 16 或 32 個字元的十六進位字串。 |
error (Error , 選用) |
JavaScript 錯誤物件,以提供其他環境定義。 如果只想要報告發生錯誤,我們建議使用專用 錯誤報告 API。 |
componentStack (string , 選用) |
代表元件階層的字串。 通常由元件型架構提供。 |
meta (object , 選用) |
具有 string 值的 JavaScript 物件,可用於僅針對此單一事件將 meta 資料傳送至 Instana。 與 meta 資料 API的用法相反,此 meta 資料不包括在後續的信標中。 |
範例
ineum('reportEvent', 'login');
ineum('reportEvent', 'full example', {
timestamp: Date.now(),
duration: 42,
backendTraceId: '31ab91fc109223fe',
error: new Error('whooops – sorry!'),
componentStack: 'a component stack',
meta: {
state: 'running'
}
});
跨原點要求後端相關性
Instana 的後端相關性透過在 XMLHttpRequest
/ fetch
要求上設定自訂標頭來運作。 JavaScript 代理程式會設定這些標頭,然後由伺服器讀取。 在瀏覽器內,相同原點原則會限制自訂標頭的傳輸。 更具體地說,只能針對相同來源要求或其他來源的要求 (容許傳輸自訂標頭) 設定自訂標頭。 例如,依預設, https://example.com:443
所提供的網站無法將 XMLHttpRequest
設為 https://shop.example.com:443
,因為這些是兩個不同的來源。
為了暫行解決此安全限制,可以使用 跨原點資源共用 (CORS)。 使用 CORS ,可以容許來源進行跨來源資源存取。 如果您在應用程式內已有跨原點資源存取權,則很可能已使用部分 CORS 標頭。
若要啟用 Instana 後端相關性,需要執行下列動作:
在伺服器端使用下列標頭回應,以容許 Instana 的相關性標頭進行跨原點要求。
請注意,您的伺服器必須同時回應 Preflight requests 和一般要求的這些標頭。 預檢要求 (可透過
OPTIONS
HTTP 方法識別) 由瀏覽器執行,以驗證是否可以向伺服器發出要求。Access-Control-Allow-Origin: https://your-origin.example.com Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-L
通知 JavaScript 代理程式已正確配置 CORS ,且它應該設定下列相關性標頭:
ineum('allowedOrigins', urls);
參數
參數 | 說明 |
---|---|
urls (RegExp[] ) |
RegExp 物件的陣列,以符合容許的 URL。 |
自
從「Instana 版本 185」開始可使用指令 allowedOrigins
。 將別名 whitelistedOrigins
與舊版本搭配使用。
別名
指令 whitelistedOrigins
是 allowedOrigins
的已淘汰別名。
範例
ineum('allowedOrigins', [/.*api\.example\.com.*/]);
在這些變更之後,請檢查您的應用程式是否正常運作。 指示 JavaScript 代理程式在伺服器端新增後端相關性標頭 (即容許原點) 而不配置 CORS ,很有可能破壞您的網站!
擷取 HTTP 要求/回應標頭
JavaScript 代理程式可以擷取 XMLHttpRequest
/ fetch
要求上的 HTTP 要求/回應標頭。 您可以定義 captureHeaders
指令要 JavaScript 代理程式擷取的 HTTP 標頭。
在瀏覽器內,相同來源原則會限制存取自訂標頭。 如果沒有 跨原點資源共用 (CORS) 配置, JavaScript 代理程式可能無法擷取所有 HTTP 標頭。 若要啟用 CORS ,請參閱 跨原點要求後端相關性。 使用 CORS 時, JavaScript 代理程式只能收集 COSR 滿足的要求/回應標頭,以及在 Access-Control-Expose-Headers 中定義的標頭。
參數
參數 | 說明 |
---|---|
captureHeaders (RegExp[] ) |
RegExp 物件的陣列,符合您要 JavaScript 代理程式擷取之 HTTP 要求/回應標頭的索引鍵。 |
自
從 Instana Release 216開始,可以使用指令 captureHeaders
。
範例
ineum('captureHeaders', [/content-type/i]);