Подтвердить что ты не робот

Запрос на перекрестный запрос заблокирован

Итак, у меня есть обработчик Go http Go, который хранит некоторый контент POST в хранилище данных и извлекает другую информацию в ответ. На внутреннем сервере я использую:

func handleMessageQueue(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*")
    if r.Method == "POST" {

        c := appengine.NewContext(r)

        body, _ := ioutil.ReadAll(r.Body)

        auth := string(body[:])
        r.Body.Close()
        q := datastore.NewQuery("Message").Order("-Date")

        var msg []Message
        key, err := q.GetAll(c, &msg)

        if err != nil {
            c.Errorf("fetching msg: %v", err)
            return
        }

        w.Header().Set("Content-Type", "application/json")
        jsonMsg, err := json.Marshal(msg)
        msgstr := string(jsonMsg)
        fmt.Fprint(w, msgstr)
        return
    }
}

В моем приложении OS firefox я использую:

var message = "content";

request = new XMLHttpRequest();
request.open('POST', 'http://localhost:8080/msgs', true);

request.onload = function () {
    if (request.status >= 200 && request.status < 400) {
        // Success!
        data = JSON.parse(request.responseText);
        console.log(data);
    } else {
        // We reached our target server, but it returned an error
        console.log("server error");
    }
};

request.onerror = function () {
    // There was a connection error of some sort
    console.log("connection error");
};

request.send(message);

Входящая часть все работает и так далее. Однако мой ответ блокируется. Предоставляя мне следующее сообщение:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8080/msgs. This can be fixed by moving the resource to the same domain or enabling CORS.

Я пробовал много других вещей, но я никак не могу получить ответ от сервера. Однако, когда я изменяю свой метод Go POST в GET и просматриваю страницу через браузер, я получаю данные, которые мне так жаль. Я не могу решить, какая сторона идет не так, и почему: возможно, Go не должен блокировать подобные запросы, но также может быть, что мой javascript является незаконным.

4b9b3361

Ответ 1

@Egidius, создавая XMLHttpRequest, вы должны использовать

var xhr = new XMLHttpRequest({mozSystem: true});

Что такое mozSystem?

mozSystem Boolean: установка этого флага в значение true позволяет делать межсайтовые соединения, не требуя от сервера выбора в использовании CORS. Требуется установка mozAnon: true, т.е. Это невозможно комбинировать с отправкой файлов cookie или других учетных данных пользователя. Это работает только в привилегированных (проверенных) приложениях; он не работает на произвольных веб-страницах, загруженных в Firefox.

Изменения в манифесте

В своем манифесте не забудьте включить эту строку в свои права:

"permissions": {
       "systemXHR" : {},
}

Ответ 2

ERROR : Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at the url. This can be fixed by moving the resource to the same domain or enabling CORS.

Решение:

я нашел решение запрос на перекрестный поиск, "исправленный"

если вы работаете над веб-проектом и хотите получать данные с разных сайтов, Иногда возникает такая ошибка то вам нужно использовать файл htaccess в корневой папке сервера обслуживающего (не принимающего сервера).

код обновления

<FilesMatch "\.(php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>  

если вы разработчик wordpress, а затем обновите следующий код:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

<FilesMatch "\.(php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

# END WordPress 

спасибо:) счастливое кодирование:

Ответ 3

Вам нужны другие заголовки, а не только доступ-контроль-разрешение-источник. Если ваш запрос имеет заголовок "Access-Control-Allow-Origin", его необходимо скопировать в заголовки ответов. Если этого не происходит, вы должны проверить заголовок "Origin" и скопировать его в ответ. Если в вашем запросе нет заголовков Access-Control-Allow-Origin not Origin, вы должны вернуть "*".

Здесь вы можете прочитать полное объяснение: http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server

и это функция, которую я использую для записи кросс-доменных заголовков:

func writeCrossDomainHeaders(w http.ResponseWriter, req *http.Request) {
    // Cross domain headers
    if acrh, ok := req.Header["Access-Control-Request-Headers"]; ok {
        w.Header().Set("Access-Control-Allow-Headers", acrh[0])
    }
    w.Header().Set("Access-Control-Allow-Credentials", "True")
    if acao, ok := req.Header["Access-Control-Allow-Origin"]; ok {
        w.Header().Set("Access-Control-Allow-Origin", acao[0])
    } else {
        if _, oko := req.Header["Origin"]; oko {
            w.Header().Set("Access-Control-Allow-Origin", req.Header["Origin"][0])
        } else {
            w.Header().Set("Access-Control-Allow-Origin", "*")
        }
    }
    w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
    w.Header().Set("Connection", "Close")

}

Ответ 4

Вы должны поместить этот код в application.rb

config.action_dispatch.default_headers = {
        'Access-Control-Allow-Origin' => '*',
        'Access-Control-Request-Method' => %w{GET POST OPTIONS}.join(",")
}