ПредишенСледващото

Обикновено, XMLHttpRequest може да бъде заявен само в рамките на текущия сайт. Когато се опитате да използвате различен домейн / порт / протокол - браузърът дава грешка.

Налице е модерен стандарт XMLHttpRequest. той все още е в състояние на чернова, но осигурява заявки между различни домейни и др.

Повечето от функциите на стандарта вече се поддържа от всички браузъри, но уви, не IE9-.

Въпреки това, частично исканията между домейни се поддържат, тъй като на IE8, но вместо това трябва да използват XMLHttpRequest обект XDomainRequest на.

Нека разгледаме исканията за различни домейни за примерен код:

  1. Ние създаваме XMLHttpRequest и проверете дали го поддържа случай при зареждане. Ако не е, това е една стара XMLHttpRequest. след това го IE8,9 и използвайте XDomainRequest.
  2. Заявка се изпраща към друг домейн просто определяне на подходящия URL адреса, за да отворите. Тя трябва да бъде асинхронно, а останалите - нищо особено.

заявки между домейни са специален контрол за сигурност, чиято цел - да се предотврати злонамерени хакери ™ спечели онлайн.

Сериозно. стандарти разработчиците трябва да имат предвид всички бариери пред "злонамерен хакер" не биха могли да се възползват от новия стандарт, да направя нещо коренно различно от това, и така може да по-рано и по този начин "пробие" всеки сървър, изпълняващ стария стандарт и не очаквам нищо ново.

Нека за момент, представете си, че не е стандарт, който осигурява, без ограничение, способността да се направи всяка страница HTTP заявка, навсякъде, всички видове.

Как би могъл да се възползва от едно зло хакер?

CORS спецификация налага специални ограничения по отношение на исканията, които са предназначени за предотвратяване на този апокалипсис.

Заявките от нея са разделени на два типа.

Прости заявки считат, ако отговарят на следните две условия:

  1. Прост метод. GET, POST или HEAD
  2. Прости заглавия - само от списъка:
  • приемам
  • Accept-Language
  • Content-Language
  • Content-Type стойност с молба / х-WWW-форма-urlencoded. съставното / форм-данни или текст / обикновен.

"Uneasy" предвид всички други, например искане от метода на PUT или с заглавието на разрешението не е подходящ за ограниченията по-горе.

Основната разлика между двете е, че "прост" заявка може да бъде създаден и се изпраща на сървъра, без да е XMLHttpRequest, например с помощта на HTML-форми.

Но заявки с нестандартни заглавията или изтриване метод по този начин не се създават. Ето защо, на стария сървър може да бъде не е готов за тях. Или, например, може да се предположи, че такива искания в уеб страница, по принцип не могат да бъдат изпратени, тогава те дойдоха с привилегировано приложения, както и да им даде твърде много права.

Ето защо, при извършване на "трудни" исканията ви е необходимо изрично да поиска от сървъра дали е съгласен по принцип с такива искания между домейни, или не? И, ако сървърът не реагира, той се съгласява - тогава не.

Спецификацията на CORS, както ще видим, има много части, но всички те са обединени от един принцип: нови възможности само с изричното съгласие на сървъра са на разположение (по подразбиране - няма).

заявка браузърът по няколко домейна, автоматично добавя заглавието на произход. съдържащ домейна, от който реализира искането.

Сървърът трябва, от своя страна, за да отговори на конкретни заглавия, ако той разреши искане за себе си.

XMLHttpRequest заявки между различни домейни

Това означава, че отговорът може да бъде нещо като това:

Ако Access-Control-Allow произход не е налице, тогава браузърът смята, че не е получил разрешение, и завършва на искането с грешка.

Какво може един хакер с помощта на подобни искания?

ограничения, описани по-горе води до факта, че искането е напълно безопасно.

Наистина, зло страница може да генерира някакъв GET / POST заявка и да го изпрати, но без разрешението на отговор от сървъра, който получава.

В IE9- използва XDomainRequest. който се почиства XMLHttpRequest.

На него има ограничения:

Модерен стандарт XMLHttpRequest осигурява средства за преодоляване на тези ограничения, но в момента на IE8, те все още не са разработени, така че те не се прилагат. А IE9 оправя някои бъгове, но като цяло не добави нищо ново.

Ето защо, сайтове, които искат да поддържат IE9-, практиката на заявки между различни домейни се използват рядко, предпочитайки други методи за комуникация между различни домейни. Например, динамично генерирани SCRIPT маркер или спомагателен IFRAME с друг домейн. Ще разгледаме тези подходи в следващите глави.

Как да се даде възможност заявки между различни домейни от надежден сайт в IE9-?

Позволете заявки между различни домейни за "доверени" сайтове могат да бъдат в настройките на IE в раздела "Сигурност", включва елемента "Достъп до източници на данни в целия домейн".

Обикновено това се прави за "Надеждни компоненти" зона, след което влезе надежден сайт. Сега той може да направи различни домейни искания XMLHttpRequest.

Този метод може да се използва за корпоративни уебсайтове, както и в случаите, когато посетителят очевидно ти вярва, но по някаква причина (компютър по време на работа, администраторът е забранено да се постави друг браузър?) Иска да използва е IE. Например, тя може да се предлага като допълнително ръководство "как да се направи тази работа услуга под IE».

В IE, включен друг порт

Ограниченията на различни домейни са активирани в IE порт.

Това дава възможност за решаване на някои проблеми, свързани с взаимодействието на различни услуги в един сайт. Но само за IE.

Разширените функции по-долу са подкрепени от всички съвременни браузъри, освен IE9-.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!