ID Artikel: 176113 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0

BUG: Set-Cookie diabaikan dalam CGI ketika dikombinasikan dengan lokasi

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Kami sangat menyarankan semua pengguna upgrade ke Microsoft Internet Information Services (IIS) versi 7.0 berjalan pada Microsoft Windows Server 2008. IIS 7.0 secara signifikan meningkatkan Web infrastruktur keamanan. Untuk informasi lebih lanjut tentang IIS keamanan yang berhubungan dengan topik, kunjungi Web site Microsoft berikut:
http://www.Microsoft.com/technet/security/prodtech/IIS.mspx (http://www.microsoft.com/technet/security/prodtech/IIS.mspx)
Untuk informasi lebih lanjut tentang IIS 7.0, kunjungi Web site Microsoft berikut:
http://www.IIS.net/default.aspx?tabid=1 (http://www.iis.net/default.aspx?tabid=1)

Pada Halaman ini

Perbesar semua | Perkecil semua

GEJALA

Ketika sebuah aplikasi CGI mengirim header Set-Cookie dengan "302 dipindahkan objek" Respon dan lokasi header, Internet Information Server (IIS) mengabaikan Cookie header.

PEMECAHAN MASALAH

Perilaku ini adalah melanggar spesifikasi CGI, yang menyatakan, "apapun header yang tidak server arahan dikirim langsung kembali ke klien. Saat ini, spesifikasi ini mendefinisikan tiga server arahan..."

Sebagai solusi, pastikan nama file EXE dimulai dengan "nph-" dan secara manual membuat semua header HTTP dalam program Anda. "nph-" menunjukkan kepada server yang CGI program dijalankan dalam mode non-diuraikan header. CGI memiliki dua mode. Dalam modus normal (header parsing), Anda harus mengirim salah CGI arahan standar keluaran (konten-jenis, lokasi, atau Status). CGI format garis respon HTTP berlaku berdasarkan petunjuk yang Anda kirim. Itu format lain standar HTTP header untuk Anda, dan itu harus mencakup setiap lain header yang telah ditetapkan.

Modus lain adalah non-diuraikan header mode. Dalam mode ini CGI tidak mengatur judul itu sendiri. CGI program harus memformat respon HTTP penuh termasuk garis respon dan semua header. Server tidak akan menambahkan atau memodifikasi header untuk Anda dalam modus ini.

Konvensi adalah bahwa program CGI yang namanya dimulai dengan "nph-" berjalan dalam modus non-diuraikan header; Sebaliknya, program CGI dijalankan di header parsing modus.

STATUS

Microsoft telah mengkonfirmasi ini menjadi sebuah bug dalam produk Microsoft yang tercantum pada awal artikel ini.

INFORMASI LEBIH LANJUT

Langkah-langkah untuk mereproduksi perilaku

Menyusun program CGI ini sebagai aplikasi konsol Win32 dan tempat itu di folder pada server IIS Anda di mana dapat dijalankan:
#include <stdio.h>
int main()
{
  printf("Location: %s\r\n", "http://www.yahoo.com");
  printf("Set-Cookie: Name1=Value1; path=/;
    expires=Fri, 22 May 1998 21:00:00 GMT\r\n\r\n");
  return 0;
}
				

Memanggil CGI program dari browser Anda dan mengamati keluarannya (melalui jaringan Monitor, misalnya). Ini akan menjadi seperti ini:
HTTP/1.0 302 Object moved
Location: http://www.yahoo.com
Server: Microsoft-IIS/2.0
Content-Type: text/html
Content-Length: 145

<head><title>Document moved</title></head>
<body><h1>Object Moved</h1>This document may be found
<a HREF="http://www.yahoo.com">here</a></body>
				

Perhatikan bahwa header Set-Cookie tidak dikirim oleh IIS. Jika Anda memiliki peringatan kuki diaktifkan pada browser Anda, tidak ada peringatan muncul.

Untuk mengizinkan cookie untuk ditetapkan sebagai tanggapan 302, menggunakan kode yang mirip Berikut, dan awalan "nph-" nama file eksekusi:
#include <stdio.h>
int main()
{
  printf("HTTP/1.0 302 Redirect\r\n");
  printf("Location: %s\r\n", "http://www.yahoo.com");
  printf("Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00
   GMT\r\n\r\n");
  return 0;
}
				

Output mirip dengan berikut. Perhatikan bahwa cookie sekarang dikirim, dan tidak ada header ditambahkan oleh server.
HTTP/1.0 302 Redirect
Location: http://www.yahoo.com
Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00 GMT
				

REFERENSI

(c) Microsoft Corporation 1997, All Rights Reserved. Kontribusi oleh Leon Braginski, Microsoft Corporation

Berlaku bagi:
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Services 5.0
Kata kunci: 
kbbug kbnofix kbmt KB176113 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:176113  (http://support.microsoft.com/kb/176113/en-us/ )