Межсетевое взаимодействие между NGINX и Spark Java

Я использую NGINX и sparkjava для своего веб-приложения. Я уверен, что правильно включил все заголовки CORS. Тем не менее, я получаю «XMLHttpRequest не может загрузить http://localhost:3003/platformAPI/login . Неверный код статуса HTTP 404 " ошибка. Ниже упомянуты мои клиентские и серверные методы из extjs и spark java соответственно. Я проверил вкладку сети своего браузера, чтобы получить ответ и отправленные заголовки запроса. Они также упоминаются ниже. Любая помощь, чтобы сообщить мне, что не так с моим подходом, очень ценится :)

Клиентский метод от Nginx:

function(button, event, options){
           var form = Ext.getCmp("LoginformId").getForm();
             if (form.isValid()) {
                    var userJson = JSON.stringify(form.getFieldValues());
                    form.submit({
                        url: 'http://localhost:3003/platformAPI/login',
                        //headers : {'Content-Type':undefined,},
                        //dataType: 'jsonp',
                        success: function(form, action) {
                      // Ext.Msg.alert('Success', action.result.msg);
                       var sessionID=action.result.sessionID;
                       var clientName=action.result.clientName;
                       sessionStorage.setItem('sessionID',sessionID);
                       sessionStorage.setItem('clientName',clientName);                                             
                       window.location="http://localhost:3000/";
                        },
                        failure: function(form, action) {
                            Ext.Msg.alert('Failed', action.result.msg);
                        }
                    });

            }
        }

Серверные методы:

фильтр для включения заголовков CORS (вызывается в основном)

private static void enableCORS(final String origin, final String methods, final String headers) {
        before(new Filter() {
            @Override
            public void handle(Request request, Response response) {                
                response.header("Access-Control-Allow-Origin",request.headers("origin"));
                response.header("Access-Control-Allow-Headers", "Origin, x-requested-with, content-type, Accept");
                response.header("Access-Control-Request-Method", "GET,PUT,POST,DELETE,OPTIONS");
               );
            }
        });

    }

Способ входа:

post("platformAPI/login", "undefined",
                (request, response) -> {
                    System.out.print("inside login");
                    JSONObject object1 = new JSONObject();
                    response.body(object1.put("success", true).toString());
                    return response;
                });

Заголовки запроса и ответа:

Remote Address:127.0.0.1:3003
Request URL:http://localhost:3003/platformAPI/login
Request Method:OPTIONS
Status Code:404 Not Found


Response Headers
view source
Access-Control-Allow-Headers:Origin, x-requested-with, content-type, Accept
Access-Control-Allow-Origin:http://localhost:3000
Access-Control-Request-Method:GET,PUT,POST,DELETE,OPTIONS
Cache-Control:must-revalidate,no-cache,no-store
Content-Length:295
Content-Type:text/html; charset=ISO-8859-1
Server:Jetty(9.0.2.v20130417)


Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:x-requested-with, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:3003
Origin:http://localhost:3000
Referer:http://localhost:3000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36

person Naresh    schedule 18.03.2015    source источник


Ответы (2)


Попробуйте включить CORS в Spark-Java с помощью следующего фрагмента:

        options("/*",
            (request, response) -> {

                String accessControlRequestHeaders = request
                        .headers("Access-Control-Request-Headers");
                if (accessControlRequestHeaders != null) {
                    response.header("Access-Control-Allow-Headers",
                            accessControlRequestHeaders);
                }

                String accessControlRequestMethod = request
                        .headers("Access-Control-Request-Method");
                if (accessControlRequestMethod != null) {
                    response.header("Access-Control-Allow-Methods",
                            accessControlRequestMethod);
                }

                return "OK";
            });

    before((request, response) -> {
        response.header("Access-Control-Allow-Origin", "*");
    });
person Laercio Metzner    schedule 16.11.2015

При условии, что вы должны учитывать и этот момент. Он будет работать с Postman, потому что вы напрямую вызываете сервер. Здесь нет CORS. Но когда вы делаете это через javascript или angular и т. Д., В игру вступает CORS. Таким образом, запрошенный URL-адрес не содержит схемы http. Вам необходимо изменить localhost: portNumber / login на http://localhost:portNumber/login.

person Ashish Kumar    schedule 03.11.2018