Saya memiliki fungsi ajax khusus berikut yang memposting data kembali ke file PHP. Setiap kali posting data terjadi, saya mendapatkan dua kesalahan berikut:
Menolak menyetel header yang tidak aman "Panjang konten"
Menolak menyetel header yang tidak aman "Sambungan"
Kode:
function passposturl(url1, params, obj)
{
//url1 = url1+"&sid="+Math.random();
xmlHttp = get_xmlhttp_obj();
xmlHttp.loadflag = obj;
xmlHttp.open("POST", url1, true);
//alert(url1);
//alert(params);
//alert(obj);
//alert(params.length);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function ()
{
stateChanged(xmlHttp);
};
xmlHttp.send(params);
}
Apa yang saya lakukan salah?
javascript
ajax
penembak jitu
sumber
sumber
Jawaban:
Hapus dua baris ini:
XMLHttpRequest tidak diperbolehkan menyetel header ini, header ini disetel secara otomatis oleh browser. Alasannya adalah dengan memanipulasi header ini Anda mungkin dapat mengelabui server agar menerima permintaan kedua melalui koneksi yang sama, yang tidak akan melalui pemeriksaan keamanan biasa - itu akan menjadi kerentanan keamanan di browser.
sumber
Connection: close
menyebabkan? Jika Anda tahu permintaan akan memakan waktu yang lama, itu harus mungkin untuk meminta bahwa hal itu tidak mengikat koneksi persisten. Browser juga tidak mendukung permintaan pipelining, jadi jika permintaan yang berjalan lama datang sebelum permintaan normal, maka itu akan memblokir permintaan kedua untuk waktu keepalive penuh. Jika permintaan yang berjalan lama dapat menggunakan "Connection: close" maka akan mungkin untuk meminta agar itu tidak mengikat koneksi persisten dan menyebabkan (misalnya) penundaan 5 detik yang tidak perlu (di mana 5 detik adalah waktu keep-hidup).