文字轉換語音 REST API

語音服務可讓您 使用 REST API 將文字轉換成合成語音 ,並 取得區域支援的語音 清單。 在本文中,您將瞭解授權選項、查詢選項、如何建構要求,以及如何解譯回應。

提示

文字轉語音 REST API 的使用案例有限制。 只有在您無法使用語音 SDK 的情況下,才使用它。 例如,使用語音 SDK,您可以 訂閱事件,以深入了解文字轉換語音處理和結果。

語音轉換 REST API 支援許多地區設定中的類神經文字到語音語音。 每個可用的端點都會與區域相關聯。 您需要您打算使用的端點或區域的語音資源金鑰。 以下是詳細資訊的連結:

重要

預先建置的神經語音(定價頁面上稱為 神經)和自定義神經語音的成本有所不同(在定價頁面上稱為 自定義神經 )。 如需詳細資訊,請參閱 語音服務定價

使用文字轉換語音 REST API 之前,請先了解您必須在驗證過程中完成權杖交換,才能存取服務。 如需詳細資訊,請參閱 驗證

取得語音清單

您可以使用 tts.speech.microsoft.com/cognitiveservices/voices/list 端點來取得特定區域或端點的完整語音清單。 在語音清單端點前面加上區域,以取得該區域的語音清單。 例如,若要取得區域的語音 westus 清單,請使用 https://westus.tts.speech.microsoft.com/cognitiveservices/voices/list 端點。 如需所有支援區域的清單,請參閱 區域 檔。

注意

預覽 中的語音和樣式僅適用於三個服務區域:美國東部、西歐和東南亞。

要求標頭

下表列出了文字轉換語音要求的必要標頭和選用標頭:

標頭 描述 必要或選用
Ocp-Apim-Subscription-Key 您的語音資源金鑰。 此標頭或 Authorization 為必要專案。
Authorization 授權令牌前面加上 一個字 Bearer。 如需詳細資訊,請參閱 驗證 此標頭或 Ocp-Apim-Subscription-Key 為必要專案。

要求本文

此端點的要求不需要 GET 本文。

範例要求

此要求只需要授權標頭:

GET /cognitiveservices/voices/list HTTP/1.1

Host: westus.tts.speech.microsoft.com
Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY

以下是 curl 命令範例:

curl --location --request GET 'https://YOUR_RESOURCE_REGION.tts.speech.microsoft.com/cognitiveservices/voices/list' \
--header 'Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY'

範例回覆

您應該會收到 JSON 主體的回應,其中包含所有支援的地區設定、語音、性別、樣式和其他詳細數據。 每個語音的 WordsPerMinute 屬性都可以用來估計輸出語音的長度。 此 JSON 範例會顯示部分結果,以說明回應的結構:

[  
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
        "DisplayName": "Jenny",
        "LocalName": "Jenny",
        "ShortName": "en-US-JennyNeural",
        "Gender": "Female",
        "Locale": "en-US",
        "LocaleName": "English (United States)",
        "StyleList": [
          "assistant",
          "chat",
          "customerservice",
          "newscast",
          "angry",
          "cheerful",
          "sad",
          "excited",
          "friendly",
          "terrified",
          "shouting",
          "unfriendly",
          "whispering",
          "hopeful"
        ],
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "ExtendedPropertyMap": {
          "IsHighQuality48K": "True"
        },
        "WordsPerMinute": "152"
    },
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (en-US, JennyMultilingualNeural)",
        "DisplayName": "Jenny Multilingual",
        "LocalName": "Jenny Multilingual",
        "ShortName": "en-US-JennyMultilingualNeural",
        "Gender": "Female",
        "Locale": "en-US",
        "LocaleName": "English (United States)",
        "SecondaryLocaleList": [
          "de-DE",
          "en-AU",
          "en-CA",
          "en-GB",
          "es-ES",
          "es-MX",
          "fr-CA",
          "fr-FR",
          "it-IT",
          "ja-JP",
          "ko-KR",
          "pt-BR",
          "zh-CN"
        ],
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "WordsPerMinute": "190"
    },
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (ga-IE, OrlaNeural)",
        "DisplayName": "Orla",
        "LocalName": "Orla",
        "ShortName": "ga-IE-OrlaNeural",
        "Gender": "Female",
        "Locale": "ga-IE",
        "LocaleName": "Irish (Ireland)",
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "WordsPerMinute": "139"
    },
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, YunxiNeural)",
        "DisplayName": "Yunxi",
        "LocalName": "云希",
        "ShortName": "zh-CN-YunxiNeural",
        "Gender": "Male",
        "Locale": "zh-CN",
        "LocaleName": "Chinese (Mandarin, Simplified)",
        "StyleList": [
          "narration-relaxed",
          "embarrassed",
          "fearful",
          "cheerful",
          "disgruntled",
          "serious",
          "angry",
          "sad",
          "depressed",
          "chat",
          "assistant",
          "newscast"
        ],
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "RolePlayList": [
          "Narrator",
          "YoungAdultMale",
          "Boy"
        ],
        "WordsPerMinute": "293"
    },
    // Redacted for brevity
]

HTTP 狀態碼

每個回應的 HTTP 狀態代碼表示成功或常見的錯誤。

HTTP 狀態碼 描述 可能的原因
200 確定 要求成功。
400 錯誤要求 遺漏必要的參數、空白或 Null。 或者,傳遞至必要或選擇性參數的值無效。 常見的原因是標頭太長。
401 未經授權 要求未獲授權。 請確定您的資源金鑰或令牌有效,且位於正確的區域中。
429 太多要求 您已超過資源允許的要求配額或速率。
502 閘道不正確 發生網路或伺服器端問題。 此狀態可能也會指出無效的標頭。

將文字轉換成語音

端點 cognitiveservices/v1 可讓您使用 語音合成標記語言 (SSML) 將文字轉換成語音。

區域和端點

以下區域支援透過 REST API 使用文字轉換語音功能。 請務必選取符合語音資源區域的端點。

預建神經語音

使用此資料表依區域或端點判斷 神經語音 的可用性:

區域 端點
澳大利亞東部 https://australiaeast.tts.speech.microsoft.com/cognitiveservices/v1
巴西南部 https://brazilsouth.tts.speech.microsoft.com/cognitiveservices/v1
加拿大中部 https://canadacentral.tts.speech.microsoft.com/cognitiveservices/v1
美國中部 https://centralus.tts.speech.microsoft.com/cognitiveservices/v1
東亞 https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1
美國東部 https://eastus.tts.speech.microsoft.com/cognitiveservices/v1
美國東部 2 https://eastus2.tts.speech.microsoft.com/cognitiveservices/v1
法國中部 https://francecentral.tts.speech.microsoft.com/cognitiveservices/v1
德國中西部 https://germanywestcentral.tts.speech.microsoft.com/cognitiveservices/v1
印度中部 https://centralindia.tts.speech.microsoft.com/cognitiveservices/v1
日本東部 https://japaneast.tts.speech.microsoft.com/cognitiveservices/v1
日本西部 https://japanwest.tts.speech.microsoft.com/cognitiveservices/v1
Jio 印度西部 https://jioindiawest.tts.speech.microsoft.com/cognitiveservices/v1
南韓中部 https://koreacentral.tts.speech.microsoft.com/cognitiveservices/v1
美國中北部 https://northcentralus.tts.speech.microsoft.com/cognitiveservices/v1
北歐 https://northeurope.tts.speech.microsoft.com/cognitiveservices/v1
挪威東部 https://norwayeast.tts.speech.microsoft.com/cognitiveservices/v1
美國中南部 https://southcentralus.tts.speech.microsoft.com/cognitiveservices/v1
東南亞 https://southeastasia.tts.speech.microsoft.com/cognitiveservices/v1
瑞典中部 https://swedencentral.tts.speech.microsoft.com/cognitiveservices/v1
瑞士北部 https://switzerlandnorth.tts.speech.microsoft.com/cognitiveservices/v1
瑞士西部 https://switzerlandwest.tts.speech.microsoft.com/cognitiveservices/v1
阿拉伯聯合大公國北部 https://uaenorth.tts.speech.microsoft.com/cognitiveservices/v1
US Gov 亞利桑那州 https://usgovarizona.tts.speech.azure.us/cognitiveservices/v1
US Gov 維吉尼亞州 https://usgovvirginia.tts.speech.azure.us/cognitiveservices/v1
英國南部 https://uksouth.tts.speech.microsoft.com/cognitiveservices/v1
美國中西部 https://westcentralus.tts.speech.microsoft.com/cognitiveservices/v1
西歐 https://westeurope.tts.speech.microsoft.com/cognitiveservices/v1
美國西部 https://westus.tts.speech.microsoft.com/cognitiveservices/v1
美國西部 2 https://westus2.tts.speech.microsoft.com/cognitiveservices/v1
美國西部 3 https://westus3.tts.speech.microsoft.com/cognitiveservices/v1

提示

預覽 中的語音僅適用於這三個區域:美國東部、西歐和東南亞。

自定義神經語音

如果您已建立自定義神經語音字型,請使用您已建立的端點。 您也可以使用下列端點。 將取代 {deploymentId} 為類神經語音模型的部署標識碼。

區域 訓練 部署 端點
澳大利亞東部 https://australiaeast.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
巴西南部 No Yes https://brazilsouth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
加拿大中部 No Yes https://canadacentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國中部 No Yes https://centralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
東亞 No Yes https://eastasia.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國東部 https://eastus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國東部 2 https://eastus2.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
法國中部 No Yes https://francecentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
德國中西部 No Yes https://germanywestcentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
印度中部 Yes Yes https://centralindia.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
日本東部 https://japaneast.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
日本西部 No Yes https://japanwest.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Jio 印度西部 No Yes https://jioindiawest.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
南韓中部 Yes Yes https://koreacentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國中北部 No Yes https://northcentralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
北歐 https://northeurope.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
挪威東部 No Yes https://norwayeast.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
南非北部 No Yes https://southafricanorth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國中南部 https://southcentralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
東南亞 https://southeastasia.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
瑞士北部 No Yes https://switzerlandnorth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
瑞士西部 No Yes https://switzerlandwest.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
阿拉伯聯合大公國北部 No Yes https://uaenorth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
英國南部 https://uksouth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國中西部 No Yes https://westcentralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
西歐 Yes https://westeurope.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國西部 https://westus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國西部 2 https://westus2.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
美國西部 3 No .是 https://westus3.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}

注意

上述區域適用於神經語音模型裝載和即時合成。 自定義神經語音定型僅適用於某些區域。 但使用者可以輕鬆地從這些區域將神經語音模型複製到上述清單中的其他區域。

長音訊 API

長音訊 API 可在具有唯一端點的多個區域中使用:

區域 端點
澳大利亞東部 https://australiaeast.customvoice.api.speech.microsoft.com
美國東部 https://eastus.customvoice.api.speech.microsoft.com
印度中部 https://centralindia.customvoice.api.speech.microsoft.com
美國中南部 https://southcentralus.customvoice.api.speech.microsoft.com
東南亞 https://southeastasia.customvoice.api.speech.microsoft.com
英國南部 https://uksouth.customvoice.api.speech.microsoft.com
西歐 https://westeurope.customvoice.api.speech.microsoft.com

要求標頭

下表列出了文字轉換語音要求的必要標頭和選用標頭:

標頭 描述 必要或選用
Authorization 授權令牌前面加上 一個字 Bearer。 如需詳細資訊,請參閱 驗證 必要
Content-Type 指定所提供文字的內容類型。 接受的值: application/ssml+xml 必要
X-Microsoft-OutputFormat 指定音訊輸出格式。 如需已接受值的完整清單,請參閱 音訊輸出 必要
User-Agent 應用程式的名稱。 提供的值必須少於 255 個字元。 必要

要求本文

如果您使用自定義神經語音,則要求主體可以傳送為純文本(ASCII 或 UTF-8)。 否則,每個POST要求的主體都會以 SSML 的形式傳送。 SSML 可讓您選擇文字轉換語音功能傳回的合成語音所使用的語音和語言。 如需支持語音的完整清單,請參閱 語音服務的語言和語音支援。

範例要求

此 HTTP 要求會使用 SSML 來指定語音和語言。 如果本文長度很長,且產生的音訊超過 10 分鐘,則會截斷為 10 分鐘。 換句話說,音訊長度不能超過10分鐘。

POST /cognitiveservices/v1 HTTP/1.1

X-Microsoft-OutputFormat: riff-24khz-16bit-mono-pcm
Content-Type: application/ssml+xml
Host: westus.tts.speech.microsoft.com
Content-Length: <Length>
Authorization: Bearer [Base64 access_token]
User-Agent: <Your application name>

<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Male'
    name='en-US-ChristopherNeural'>
        I'm excited to try text to speech!
</voice></speak>

* 針對 Content-Length,您應該使用自己的內容長度。 在大部分情況下,此值會自動計算。

HTTP 狀態碼

每個回應的 HTTP 狀態代碼表示成功或常見錯誤:

HTTP 狀態碼 描述 可能的原因
200 確定 要求成功。 回應本文是音訊檔案。
400 錯誤要求 遺漏必要的參數、空白或 Null。 或者,傳遞至必要或選擇性參數的值無效。 常見的原因是標頭太長。
401 未經授權 要求未獲授權。 請確定您的語音資源金鑰或令牌有效,且位於正確的區域中。
415 不支援的媒體類型 有可能提供錯誤的 Content-Type 值。 Content-Type 應該設定為 application/ssml+xml
429 太多要求 您已超過資源允許的要求配額或速率。
502 閘道不正確 發生網路或伺服器端問題。 此狀態可能也會指出無效的標頭。

如果 HTTP 狀態為 200 OK,響應主體會包含要求格式的音訊檔案。 此檔案可在傳輸、儲存至緩衝區或儲存至檔案時播放。

音訊輸出

支援的串流和非串流音訊格式會以標頭的形式在每個要求 X-Microsoft-OutputFormat 中傳送。 每個格式都包含比特率和編碼類型。 語音服務支援 48-kHz、24-kHz、16-kHz 和 8-kHz 音訊輸出。 每個預先建置的神經語音模型可在 24kHz 和高逼真度 48kHz 取得。

amr-wb-16000hz
audio-16khz-16bit-32kbps-mono-opus
audio-16khz-32kbitrate-mono-mp3
audio-16khz-64kbitrate-mono-mp3
audio-16khz-128kbitrate-mono-mp3
audio-24khz-16bit-24kbps-mono-opus
audio-24khz-16bit-48kbps-mono-opus
audio-24khz-48kbitrate-mono-mp3
audio-24khz-96kbitrate-mono-mp3
audio-24khz-160kbitrate-mono-mp3
audio-48khz-96kbitrate-mono-mp3
audio-48khz-192kbitrate-mono-mp3
ogg-16khz-16bit-mono-opus
ogg-24khz-16bit-mono-opus
ogg-48khz-16bit-mono-opus
raw-8khz-8bit-mono-alaw
raw-8khz-8bit-mono-mulaw
raw-8khz-16bit-mono-pcm
raw-16khz-16bit-mono-pcm
raw-16khz-16bit-mono-truesilk
raw-22050hz-16bit-mono-pcm
raw-24khz-16bit-mono-pcm
raw-24khz-16bit-mono-truesilk
raw-44100hz-16bit-mono-pcm
raw-48khz-16bit-mono-pcm
webm-16khz-16bit-mono-opus
webm-24khz-16bit-24kbps-mono-opus
webm-24khz-16bit-mono-opus

注意

如果您選取 48kHz 輸出格式,則會據以叫用具有 48kHz 的高逼真度語音模型。 合成時,除了 24kHz 和 48kHz 以外的取樣速率,可以透過向上取樣或向下取樣來取得,例如,44.1kHz 會從 48kHz 向下取樣。

如果您選取的語音和輸出格式有不同的比特率,則會視需要重新取樣音訊。 您可以使用 Opus 編解碼器來譯碼ogg-24khz-16bit-mono-opus格式

驗證

每個要求都需要授權標頭。 下表說明每個功能支援哪些標頭:

支援的授權標頭 語音轉換文字 將文字轉換成語音
Ocp-Apim-Subscription-Key Yes .是
Authorization: Bearer .是 Yes

當您使用 Ocp-Apim-Subscription-Key 標頭時,只需要提供您的資源密鑰。 例如:

'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'

當您使用 Authorization: Bearer 標頭時,您必須向 issueToken 端點提出要求。 在此要求中,您會將資源密鑰交換為有效 10 分鐘的存取令牌。

如何取得存取權杖

若要取得存取令牌,您必須使用 Ocp-Apim-Subscription-Key 和您的資源密鑰向issueToken端點提出要求。

端點 issueToken 具有下列格式:

https://<REGION_IDENTIFIER>.api.cognitive.microsoft.com/sts/v1.0/issueToken

以符合您訂用帳戶區域的識別碼取代 <REGION_IDENTIFIER>

使用下列範例來建立您的存取令牌要求。

HTTP 範例

此範例是取得令牌的簡單 HTTP 要求。 將取代 YOUR_SUBSCRIPTION_KEY 為語音服務的資源金鑰。 如果您的訂用帳戶不在美國西部區域,請將標頭取代 Host 為您區域的主機名。

POST /sts/v1.0/issueToken HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
Host: eastus.api.cognitive.microsoft.com
Content-type: application/x-www-form-urlencoded
Content-Length: 0

響應主體包含 JSON Web 令牌 (JWT) 格式的存取令牌。

PowerShell 範例

此範例是取得存取令牌的簡單 PowerShell 腳本。 將取代 YOUR_SUBSCRIPTION_KEY 為語音服務的資源金鑰。 請務必針對符合您訂用帳戶的區域使用正確的端點。 此範例目前設定為美國西部。

$FetchTokenHeader = @{
  'Content-type'='application/x-www-form-urlencoded';
  'Content-Length'= '0';
  'Ocp-Apim-Subscription-Key' = 'YOUR_SUBSCRIPTION_KEY'
}

$OAuthToken = Invoke-RestMethod -Method POST -Uri https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken
 -Headers $FetchTokenHeader

# show the token received
$OAuthToken

cURL 範例

cURL 是 Linux 中可用的命令行工具(以及 Windows 子系統 Linux 版)。 這個 cURL 命令說明如何取得存取令牌。 將取代 YOUR_SUBSCRIPTION_KEY 為語音服務的資源金鑰。 請務必針對符合您訂用帳戶的區域使用正確的端點。 此範例目前設定為美國西部。

curl -v -X POST \
 "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken" \
 -H "Content-type: application/x-www-form-urlencoded" \
 -H "Content-Length: 0" \
 -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

C# 範例

這個 C# 類別說明如何取得存取令牌。 當您具現化 類別時,傳遞語音服務的資源密鑰。 如果您的訂用帳戶不在美國西部區域,請變更 的值 FetchTokenUri 以符合您訂用帳戶的區域。

public class Authentication
{
    public static readonly string FetchTokenUri =
        "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken";
    private string subscriptionKey;
    private string token;

    public Authentication(string subscriptionKey)
    {
        this.subscriptionKey = subscriptionKey;
        this.token = FetchTokenAsync(FetchTokenUri, subscriptionKey).Result;
    }

    public string GetAccessToken()
    {
        return this.token;
    }

    private async Task<string> FetchTokenAsync(string fetchUri, string subscriptionKey)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
            UriBuilder uriBuilder = new UriBuilder(fetchUri);

            var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
            Console.WriteLine("Token Uri: {0}", uriBuilder.Uri.AbsoluteUri);
            return await result.Content.ReadAsStringAsync();
        }
    }
}

Python 範例

# Request module must be installed.
# Run pip install requests if necessary.
import requests

subscription_key = 'REPLACE_WITH_YOUR_KEY'


def get_token(subscription_key):
    fetch_token_url = 'https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken'
    headers = {
        'Ocp-Apim-Subscription-Key': subscription_key
    }
    response = requests.post(fetch_token_url, headers=headers)
    access_token = str(response.text)
    print(access_token)

如何使用存取令牌

存取令牌應該以標頭的形式 Authorization: Bearer <TOKEN> 傳送至服務。 每個存取令牌的有效期限為10分鐘。 您可以隨時取得新的令牌,但若要將網路流量和延遲降到最低,我們建議在 9 分鐘內使用相同的令牌。

以下是簡短音訊的語音轉換文字 REST API 範例 HTTP 要求:

POST /cognitiveservices/v1 HTTP/1.1
Authorization: Bearer YOUR_ACCESS_TOKEN
Host: westus.stt.speech.microsoft.com
Content-type: application/ssml+xml
Content-Length: 199
Connection: Keep-Alive

// Message body here...

下一步