Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengatur atau menambahkan nilai header respons HTTP tertentu.
Sintaks
virtual HRESULT SetHeader(
IN PCSTR pszHeaderName,
IN PCSTR pszHeaderValue,
IN USHORT cchHeaderValue,
IN BOOL fReplace
) = 0;
virtual HRESULT SetHeader(
IN HTTP_HEADER_ID ulHeaderIndex,
IN PCSTR pszHeaderValue,
IN USHORT cchHeaderValue,
IN BOOL fReplace
) = 0;
Parameter
pszHeaderName
[IN] Penunjuk ke string yang berisi nama header HTTP yang akan diatur.
ulHeaderIndex
[IN] ID header HTTP yang akan diatur.
pszHeaderValue
[IN] Penunjuk ke string yang berisi nilai header yang akan diatur.
cchHeaderValue
[IN] Panjang, dalam karakter, dari nilai header, tidak termasuk karakter \0.
fReplace
[IN] Menentukan apakah header yang ada harus ditimpa.
Tampilkan Nilai
Sebuah HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.
| Nilai | Deskripsi |
|---|---|
| S_OK | Menunjukkan bahwa operasi berhasil. |
| ERROR_INVALID_DATA | Menunjukkan bahwa data tidak valid (misalnya, data di header terlalu panjang). |
| ERROR_INVALID_PARAMETER | Menunjukkan bahwa parameter yang ditentukan tidak valid (misalnya, parameter diatur ke NULL). |
| ERROR_NOT_ENOUGH_MEMORY | Menunjukkan bahwa tidak ada cukup memori untuk melakukan operasi. |
Keterangan
Metode SetHeader ini menetapkan nilai header HTTP untuk respons saat ini. Ada dua versi metode yang SetHeader kelebihan beban. Yang pertama memungkinkan Anda menentukan header dengan menggunakan string yang terkandung dalam pszHeaderName parameter . Kelebihan beban lainnya menggunakan bilangan bulat panjang yang tidak ditandatangani yang terkandung dalam ulHeaderIndex parameter .
Catatan
Anda tidak boleh menggunakan kelebihan beban yang menggunakan ulHeaderIndex parameter untuk mengatur nilai Server header, karena nilai Anda akan ditambahkan ke nilai header yang ada. Gunakan parameter sebagai gantinya pszHeaderName .
Nama header yang ditentukan oleh pszHeaderName parameter dapat berupa header kustom atau header yang ditentukan dalam Request for Comments (RFC) 1945, "Hypertext Transfer Protocol -- HTTP/1.0," atau RFC 2616, "Hypertext Transfer Protocol -- HTTP/1.1."
Catatan
Parameter pszHeaderName tidak boleh NULL.
Parameter ulHeaderIndex menentukan ID header HTTP yang tercantum dalam HTTP_HEADER_ID enumerasi.
Catatan
HTTP_HEADER_ID Enumerasi didefinisikan dalam file header Http.h.
fReplace Jika parameter adalah true, nilai header yang ditentukan akan menggantikan nilai header yang ada jika header ada. Jika fReplace adalah false, nilai header yang ditentukan harus ditambahkan ke header yang ada dan dipisahkan dari header itu sendiri dengan koma.
Catatan
Modul atau penangan lain dapat memanggil SetHeader metode untuk menggantikan nilai atau menambahkan nilai Anda ke nilai yang telah Anda tentukan.
Contoh
Contoh kode berikut menunjukkan cara menggunakan kedua kelebihan beban SetHeader metode untuk mengganti HTTP Content-Type dan Server header dengan nilai kustom dan mengatur header HTTP Refresh ke jumlah detik tertentu.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnSendResponse(
IN IHttpContext * pHttpContext,
IN ISendResponseProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Set the "Refresh" header name.
char szRefreshName[] = "Refresh";
// Set the "Refresh" header value.
char szRefreshValue[] = "30";
// Set the "Content-Type" header value.
char szContentType[] = "text/plain";
// Set the "Server" header value.
char szServerValue[] = "MyServer/7.0";
// Retrieve a pointer to the response.
IHttpResponse * pHttpResponse = pHttpContext->GetResponse();
// Test for an error.
if (pHttpResponse != NULL)
{
// Set the "Refresh" header.
hr = pHttpResponse->SetHeader(
szRefreshName,szRefreshValue,
(USHORT)strlen(szRefreshValue),FALSE);
// Test for an error.
if (FAILED(hr))
{
// Set the error status.
pProvider->SetErrorStatus( hr );
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
// Set the "Content-Type" header.
hr = pHttpResponse->SetHeader(
HttpHeaderContentType,szContentType,
(USHORT)strlen(szContentType),TRUE);
// Test for an error.
if (FAILED(hr))
{
// Set the error status.
pProvider->SetErrorStatus( hr );
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
// Set the "Server" header.
hr = pHttpResponse->SetHeader(
"Server",szServerValue,
(USHORT)strlen(szServerValue),TRUE);
// Test for an error.
if (FAILED(hr))
{
// Set the error status.
pProvider->SetErrorStatus( hr );
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
MyHttpModule * pModule = new MyHttpModule;
// Test for an error.
if (!pModule)
{
// Return an error if the factory cannot create the instance.
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
else
{
// Return a pointer to the module.
*ppModule = pModule;
pModule = NULL;
// Return a success status.
return S_OK;
}
}
void Terminate()
{
// Remove the class from memory.
delete this;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Set the request notifications and exit.
return pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
RQ_SEND_RESPONSE,
0
);
}
Modul Anda harus mengekspor fungsi RegisterModule . Anda dapat mengekspor fungsi ini dengan membuat file definisi modul (.def) untuk proyek Anda, atau Anda dapat mengkompilasi modul dengan menggunakan sakelar /EXPORT:RegisterModule . Untuk informasi selengkapnya, lihat Panduan: Membuat Modul HTTP Request-Level Dengan Menggunakan Kode Asli.
Anda dapat secara opsional mengkompilasi kode dengan menggunakan __stdcall (/Gz) konvensi panggilan alih-alih secara eksplisit mendeklarasikan konvensi panggilan untuk setiap fungsi.
Persyaratan
| Jenis | Deskripsi |
|---|---|
| Klien | - IIS 7.0 di Windows Vista - IIS 7.5 di Windows 7 - IIS 8.0 di Windows 8 - IIS 10.0 pada Windows 10 |
| Server | - IIS 7.0 di Windows Server 2008 - IIS 7.5 di Windows Server 2008 R2 - IIS 8.0 di Windows Server 2012 - IIS 8.5 di Windows Server 2012 R2 - IIS 10.0 di Windows Server 2016 |
| Produk | - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0 - IIS Express 7.5, IIS Express 8.0, IIS Express 10.0 |
| Header | Httpserv.h |
Lihat juga
Antarmuka IHttpResponse
Metode IHttpResponse::D eleteHeader
Metode IHttpResponse::GetHeader