введение
Cross-Domain-это вопрос, который я часто задаю в ежедневных интервью. Этот термин часто появляется в переднем мире. Основная причина заключается в том, что это связано с ограничениями безопасности (одноразовая стратегия, то есть JavaScript или файлы cookie может получить доступ только к контенту только под тем же доменом). Поскольку нам неизбежно необходимо выполнять междоменные операции во время ежедневной разработки проекта, возможности междомена также являются одним из основных навыков фронт-инженеров.
Как и большинство междоменных решений, JSONP также является моим выбором, но однажды премьер-министр изменился, и определенная функция должна быть изменена для поддержки POST, поскольку объем передаваемых данных относительно велик, а форма GET не может быть обработана. Поэтому я боролся с давно известными CORS (обмен ресурсами межоригенов), и статья здесь является кратким обозначением и резюме в течение периода борьбы.
• Что может сделать Cors:
Нормальное использование AJAX требует нормального рассмотрения проблем с междоменом, поэтому великие программисты также боролись с решением проблем с междоменом, такими как JSONP, Flash, ifame, XHR2 и т. Д.
• Принцип CORS:
CORS определяет механизм для междоменного доступа, который позволяет Ajax достичь междоменного доступа. CORS позволяет сетевым приложениям в одном домене отправлять перекрестные запросы AJAX в другой домен. Реализация этой функции очень проста, просто отправьте заголовок ответа на сервере.
Давайте перейдем к теме ниже для получения подробной информации следующим образом:
Поперечный HTTP-запрос относится к HTTP-запросу, в котором домен, в котором инициирует ресурс, расположено, отличается от домена, где ресурс инициирует запрос.
Например, если я представляю ресурсы станции B (www.b.com/images/1.jpg) через тег <img> на веб-сайте A (www.a.com), затем станция A инициирует запрос на перекрестный сайт на станцию B.
Поперечные запросы на этот вид ресурса изображений допускаются, а аналогичные запросы поперечного сайта включают файлы CSS, файлы JavaScript и т. Д.
Однако, если HTTP -запрос инициируется в сценарии, он будет ограничен браузером по соображениям безопасности. Например, чтобы инициировать HTTP-запросы, используя объект xmlhttprequest, вы должны соблюдать политику одинаковой иолигины.
Так называемая «политика одинакового происхождения» означает, что веб-приложение может использовать только объект xmlhttprequest, чтобы инициировать HTTP-запросы в домен, где происходит происхождение. Этот источник запроса и объект запроса должен быть в одном домене.
Например, http://www.a.com, протокол этого веб -сайта - http, доменное имя www.a.com, а порт по умолчанию составляет 80. Тогда следующая его гомологичная ситуация:
• http: //www.a.com/index.html гомоген
• https: //www.a.com/a.html разные источники (разные протоколы)
• http: //service.a.com/testservice/test разные источники (доменные имена разные) разные)
• http: //www.b.com/index.html Различные источники (доменные имена разные)
• http: //www.a.com: 8080/index.html разные источники (разные порты)
Чтобы разработать более мощные и более богатые веб-приложения, перекрестные запросы очень распространены. Итак, как вы делаете перекрестные запросы, не отказываясь от безопасности?
W3C рекомендует новый механизм, а именно обмен ресурсами по перекрестному происхождению (CORS).
Обмен ресурсами по перекрестному происхождению (CORS) обеспечивает безопасность запросов через декларацию Client + Server Collaborative. Сервер добавит серию параметров HTTP-запроса (например, в заголовке http-запроса, в заголовке HTTP-запроса) в заголовке HTTP-запроса до домена и какие типы запросов являются приемлемыми. Клиент должен объявить свой собственный источник (orgin) при начале запроса, в противном случае сервер не будет обработать его. Если клиент не объявляет, запрос даже будет напрямую перехвачен браузером и не может достичь сервера. После получения HTTP -запроса сервер будет сравнивать домены, и будут обработаны только запросы из того же домена.
Пример использования COR для реализации перекрестных запросов:
Клиент:
function gethello () {var xhr = new xmlhttprequest (); xhr.open ("post", "http://b.example.com/test.ashx", true); xhr.setrequestheader ("content-type", "Application/xwww-form-urlencodenced"); // Объявит источник запроса xhr.setrequestheader ("Origin", "http://a.example.com"); xhr.onreadystatechange = function () {if (xhr.readystate == 4 && xhr.status == 200) {varetext = xhr.responsetext; console.info (responsetext);}} xhr.send ();}Сервер:
Общедоступный тест класса: ihttphandler {public void processRequest (контекст httpcontext) {context.response.contenttype = "text/plain"; // объявление о принятии запросов от всех доменов context.response.addheader ("access-control-vallow-origin", "*"); Isreasable {get {return false;}}}Включить доступ к междомену в веб-API
CORS-это серверная и клиентская операторная операция для обеспечения безопасности запросов. Поэтому, если вам необходимо включить COR в веб -API, вам также необходимо настраивать его соответствующим образом. К счастью, команда Microsoft ASP.NET предоставляет официальное решение с поддержкой кросс-домен, которое нужно добавить только в Nuget.
Затем используйте следующую конфигурацию в app_start/webapiconfig.cs для достижения междоменного доступа:
Public Static Class WebApiconfig {public Static void Register (конфигурация httpconfiguration) {// Конфигурация веб -API и службы // Настройка веб -API для использования только аутентификации токена носителя. config.suppressdefathostauthentication (); config.filters.add (New HostauthenticationFilter (oauthdefaults.authenticationtype)); // web api -маршрутизация config.maphttpattributeroutes (); config.routes.maphtproute (nefaultapi », roundtastateTateTataTateTateStateTATATATATATATATATATTARTATETATATATATATATATATATATU "API/{Controller}/{id}", по умолчанию: new {id = routeParameter.optional}); // разрешить веб-API-кросс-домен ountablecrossiteRequests (config); config.formatters.jsonformatter.supportedDiAtypes.add (new MediaPehaderv ("textmed.) ENableCrossSiteRequests (httpconfiguration config) {var cors = new enablecorsattribute (Origins: "*", заголовки: "*", методы: "*"); config.enablecors (cors);}}Поскольку браузеры ниже IE10 не поддерживают CORS, CORS в настоящее время не является основным междоменным решением в Китае. Однако с выпуском Windows 10 и постепенного снижения IE может быть предсказуемо, что CORS станет стандартным решением поперечного домена в ближайшем будущем.
Выше приведено решение для перекрестного домена JS, представленное вам редактором. Я надеюсь, что это будет полезно для вас!