2017-08-16 74 views
1

:我們有一個節點快遞web服務器(UI),要求從Java Dropwizard(新澤西州)服務器的HTTP API,在同一臺主機上運行。CORS與我在使用基本的HTTP認證與CORS一些問題基本HTTP認證

的API保護與HTTP基本身份驗證,並且我特地來實現我的球衣服務器上的以下過濾器(從這個職位採取:How to handle CORS using JAX-RS with Jersey):

@Provider 
public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext request, 
             ContainerResponseContext response) throws IOException { 
     response.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:9000"); 
     response.getHeaders().add("Access-Control-Allow-Headers", 
       "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"); 
     response.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
     response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
    } 
} 

然而,當我嘗試加載我的控制檯給我以下輸出:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:9000/intraday/parameters. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘http://localhost:9000’) 

我無法理解這個錯誤。顯然,起源是相同的(http://localhost:9000),所以我不知道爲什麼它不匹配。

我也確信,任何預檢OPTIONS請求回答HTTP代碼200

+0

也許這可能會幫助你:https://stackoverflow.com/questions/28065963/how-to-handle-cors-using-jax-rs-with-jersey – sascha10000

+0

@ sascha10000你提供的鏈接是相同的職位我已經鏈接到我的問題。 –

+0

噢,對不起,我真的沒有看到,這是一個鏈接... – sascha10000

回答

1

從問題的描述,這聽起來像在Java Dropwizard(新澤西州)服務器上http://localhost:9000和節點運行快遞web服務器(UI),在另一原點運行。

無論如何,您必須將Jersey服務器上CORSFilter代碼中的Access-Control-Allow-Origin響應頭的值設置爲發出請求的前端JavaScript代碼(顯然是節點服務器)的原點。所以,如果是這樣的,例如,http://localhost:12345,則:

response.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:12345"); 

這無論如何必須比http://localhost:9000其他東西,因爲沒有辦法瀏覽器會發射出錯誤消息,如果「不允許在http://localhost:9000/…讀取遠程資源」前端JavaScript代碼的要求越來越從正在從http://localhost:9000 - 由於在這種情況下,它不會是一個跨域請求,您的瀏覽器將不會阻止訪問響應服務發送。