безопасность — PHP против JQuery Web api2

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

У меня нормальный веб api2, новый. Я установил кросс-домен и только поставил

config.EnableCors(); на webapiconfig,

У меня есть MailController, который содержит этот метод:

 [HttpPost]//omUrl/{url?}
[Route(@"~/api/Mail/MailOpen")]
public void MailOpen()
{
try
{
File.Create(@"D:\Emails\Alive.html");

}
catch (Exception ex)
{
// ignored
}
}

и запустить в сети с этим хостом: http://localhost:56212/

Итак, я пытаюсь опубликовать некоторые данные, чтобы проверить междоменную политику, и я публикую этот код php:

<?php
$url = 'http://localhost:56212/api/Mail/MailOpen';
$data = array('Smtp' => 'value1', 'Subject' => 'value2');

// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
'method'  => 'POST',
'content' => http_build_query($data),
),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

var_dump($result);
?>

Этот код попадает на сервер и создается Alive.html, подождите. Как это может быть, я спросил себя, у меня еще нет кросс-доменной политики на этом контроллере? ..

Поэтому я попытался запустить этот код JavaScript:

<script>

$.get(
"http://localhost:56212/api/Mail/MailOpen",
{ 'G': "aa94a7cf-7794-41ff-b8d0-fcfe34fcb19c" }, // put your parameters here
function (responseText) {
console.log(responseText);

}

);
</script>

Который должен делать то же самое .. но я получаю эту ошибку:

jquery-1.11.2.min.js: 4 GET HTTP: // локальный: 56212 / API / Почта / MailOpen G = aa94a7cf-7794-41ff-b8d0-fcfe34fcb19c m.ajaxTransport.send @ jquery-1.11.2.min.js: 4m.extend.ajax @ jquery-1.11.2.min.js: 4m.each.m. (анонимная функция) @ jquery-1.11.2.min .js: 4m.extend.getJSON @ jquery-1.11.2.min.js: 4 (анонимная функция) @ index.html: 6
index.html: 1 XMLHttpRequest не может загрузить HTTP: // локальный: 56212 / API / Почта / MailOpen G = aa94a7cf-7794-41ff-b8d0-fcfe34fcb19c. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Происхождение ‘null’, следовательно, не разрешено. Ответ имел HTTP-код состояния 405.

Что нормально, потому что у меня еще нет политики.

Кто-нибудь может сказать мне, почему php работал и jQuery возвращает ошибку?

Ты все.]

Редактировать :

Ну, это еще хуже .. Я только что видел, что я пытаюсь использовать GET опубликовать

Поэтому я изменил свой запрос на публикацию, и сервер взял его, и он работал, он даже создал файл, но выдает ошибку index.html:1 XMLHttpRequest cannot load http://localhost:56212/api/Mail/MailOpen. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Как это может дать ошибку и все еще работать?

А еще лучше, как это работает?

0

Решение

CORS — это механизм безопасности, который зависит от браузера. Ваш PHP не является типичным веб-браузером и не требует применения политик CORS.

Из Википедии:

Стандарт CORS описывает новые заголовки HTTP, которые позволяют браузерам и серверам запрашивать удаленные URL-адреса только при наличии разрешения. Хотя некоторая проверка и авторизация может выполняться сервером, браузер, как правило, несет ответственность за поддержку этих заголовков и соблюдение ограничений, которые они налагают.
Для методов запросов AJAX и HTTP, которые могут изменять данные (обычно это методы HTTP, отличные от GET, или для использования POST с определенными типами MIME), спецификация предписывает браузерам «предварительно выполнить» запрос, запрашивая поддерживаемые методы у сервера с запросом HTTP OPTIONS заголовок, а затем, после «одобрения» с сервера, отправляет фактический запрос с фактическим методом HTTP-запроса. Серверы также могут уведомлять клиентов о необходимости отправки «учетных данных» (включая файлы cookie и данные HTTP-аутентификации) с запросами.

0

Другие решения

Других решений пока нет …