簡體   English   中英

CORS - 訪問控制允許來源問題

[英]CORS - Access-Control-Allow-Origin issue

我有一個以 RESTful Jersey Api 作為后端的 AngularJS Web 應用程序。 我正在調用這個 API

function Create(user) {
        return $http.post('http://localhost:8080/NobelGrid/api/users/create/', user).then(handleSuccess, handleError('Error creating user'));
    }

這是 API (POST) 的代碼:

/**
 * This API create an user
 * 
 * @param data
 * @return
 */
@Path("create")
@POST
@Produces("application/json")
public Response create(String data) {

    UserDataConnector connector;
    JSONObject response = new JSONObject(data);

    User userToCreate = new User(response.getString("surname"), response.getString("name"),
            response.getString("mail"), response.getString("username"), response.getString("password"), 0);

    try {

        connector = new UserDataConnector();
        connector.createUser(userToCreate);
    } catch (IOException e) {
        e.printStackTrace();
    }

    return Response.status(Response.Status.OK) // 200
            .entity(userToCreate)
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();

}

/**
 * CORS compatible OPTIONS response
 * 
 * @return
 */
@Path("/create")
@OPTIONS
public Response createOPT() {

    System.out.println("Called OPTION for create API");
    return Response.status(Response.Status.OK) // 200
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS").build();
}

我添加了一個用於create的 OPTION API 以使該 API 與 CORS 兼容。 事實上,API 運行良好,因為在 POST 之前調用了 OPTIONS API,並且在我的數據庫中創建了用戶。 無論如何在前端,我收到此錯誤:

XMLHttpRequest 無法加載http://localhost:8080/NobelGrid/api/users/create/ 請求的資源上不存在“Access-Control-Allow-Origin”標頭。 因此,不允許訪問 Origin ' http://localhost:63342 '。 響應的 HTTP 狀態代碼為 500。

誰能幫幫我嗎?

更新:

stack 建議這個問題No Access-Control-Allow-Origin 標頭存在於請求的資源上,因為可能重復,但該解決方案對我不起作用,因為 Response Jersey API 中不存在addHeader(String)

更新 2

我使用這個解決方案解決了這個問題:

http://www.coderanch.com/t/640189/Web-Services/java/Access-Control-Origin-header-present

但我還有另一個錯誤。 我會做另一個問題,因為我認為這是一個不同的論點。

提前致謝!

我使用這個解決方案解決了這個問題:

http://www.coderanch.com/t/640189/Web-Services/java/Access-Control-Origin-header-present

但我還有另一個錯誤。

在此處輸入圖片說明

我會做另一個問題,因為我認為這是一個不同的論點。

使用 CORS NPM 並添加為中間件。

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products/:id', function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

-------------------------在您的 app.js 中添加此行----------------- --------

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM