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

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 176113 - Melihat produk di mana artikel ini berlaku.
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
Untuk informasi lebih lanjut tentang IIS 7.0, kunjungi Web site Microsoft berikut:
http://www.IIS.net/default.aspx?tabid=1
Perbesar semua | Perkecil semua

Pada Halaman ini

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

Properti

ID Artikel: 176113 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Services 5.0
Kata kunci: 
kbbug kbnofix kbmt KB176113 KbMtid
Penerjemahan 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

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com