Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   XHR && HTTP 403 status code && Opera (https://javascript.ru/forum/css-html-browser/14174-xhr-http-403-status-code-opera.html)

Ex_Soft 04.01.2011 12:17

XHR && HTTP 403 status code && Opera
 
function DoIt()
{
    var
        req,
        Ctrl,
        cb;

	if(!(req=initXMLHTTPRequest())
	    || !(Ctrl=document.getElementById("DivResponse"))
	    || !(cb=document.getElementById("cb403")))
		return;

	req.onreadystatechange=function()
							{
								if(req.readyState==4)
								{
==>									if(req.status==200)
										Ctrl.innerHTML=req.responseText;
									else
										alert("status="+req.status+"\r\nstatusText=\""+req.statusText+"\"");

									req=null;
								}
							};

	req.open("POST","PageWithXHRHandler.aspx",true);
	req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	req.setRequestHeader("X-Requested-With","XMLHttpRequest");
	req.send(cb.checked ? "is403="+encodeURIComponent(cb.checked.toString()) : null);
}

function initXMLHTTPRequest()
{
	var
		xRequest=null;

	if(window.XMLHttpRequest)
		xRequest=new XMLHttpRequest();
	else if(window.ActiveXObject)
	{
		try
		{
			xRequest=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				xRequest=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				alert(e.name+": "+e.message);
			}
		}
	}

	return(xRequest);
}

У всех все нормально, а у этой Opera XHR.status==0. Хотя сервер возвращает 403 и в ее Opera Dragonfly -> Network тоже показывают 403. Почему? Что нужно подкрутить, чтобы получить нормальные человеческие 403?

Ex_Soft 04.01.2011 14:03

Гм... Стоит хоть что-то записать в response:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
	if ((Context.User == null || !Context.User.Identity.IsAuthenticated)
		&& Context.Request.Headers["X-Requested-With"] != null
		&& Context.Request.Headers["X-Requested-With"].Trim().ToLower() == "xmlhttprequest"
		&& Context.Request.Form["is403"] != null
		&& Context.Request.Form["is403"].Trim().ToLower() == "true")
	{
		Context.Response.StatusCode = 403;
==>		Context.Response.Write("blah-blah-blah");
		Context.Response.End();
	}
}

и XHR.status==403. Баг Opera?

x-yuri 04.01.2011 22:59

Цитата:

Сообщение от Ex_Soft
Стоит хоть что-то записать в response

используй opera < 9.50 :lol:

Ex_Soft 04.01.2011 23:46

Цитата:

Сообщение от x-yuri (Сообщение 86262)
используй opera < 9.50

Лично я ее вообще не использую - глаза б мои ее видали, а, вот, некоторыми отщепенцами-извращенцами-мазохистами (пользователями) я управлять не в силах...

x-yuri 05.01.2011 00:01

ну я к тому, что в 9.27, например, она ведет себя более ожидаемо

Цитата:

Сообщение от Ex_Soft
а, вот, некоторыми отщепенцами-извращенцами-мазохистами (пользователями)

мне тоже очень приятно с вами дискутировать :) А пользователи оперы, тем временем, никакого мазохизма не испытывают...

Ex_Soft 05.01.2011 00:08

Цитата:

Сообщение от x-yuri (Сообщение 86271)
9.27

/me думает: гм... 11-я как бы в ходу...
Ну, а по поводу самой Opera, как таковой, я даже калории тратить не хочу...

x-yuri 05.01.2011 00:51

я ж всего лишь поинтересовался, как оно было в предыдущих версиях. Понятное дело, что у меня 11-ая опера установлена :) А калории тратить не надо: лучше пусть каждый из нас останется в заблуждении, что оппонент - отщепенец-мазохист-извращенец ;)

Ex_Soft 05.01.2011 10:17

Цитата:

Сообщение от x-yuri (Сообщение 86278)
я ж всего лишь поинтересовался, как оно было в предыдущих версиях

Понятия не имею: я сам всего-лишь пару недель назад поставил ее...

x-yuri 05.01.2011 14:28

Цитата:

Сообщение от Ex_Soft
Понятия не имею: я сам всего-лишь пару недель назад поставил ее...

эх, я не спрашивал, я констатировал факт: в opera 9.27 оно работает даже с пустым телом ответа

Ex_Soft 05.01.2011 16:44

Цитата:

Сообщение от x-yuri (Сообщение 86340)
констатировал факт: в opera 9.27 оно работает даже с пустым телом ответа

Честно говоря, даже не представляю, как это может мне помочь...


Часовой пояс GMT +3, время: 07:44.