2016-07-26 134 views
0

我試圖在Wildfly服務器上發出REST請求。首先,我必須登錄舊應用程序並獲取cookie。該cookie必須用於產生REST請求的較新應用程序 。新的應用程序是來自現有的一些模板。我嘗試了一些REST請求的頭部選項,如設置屬性withCredentials,Access-Control-Allow-Credentials,令牌,crossDomain,如函數getAllEntities所示。拒絕在AngularJS中設置不安全標題「cookie」和net :: ERR_INSECURE_RESPONSE

在經過測試的REST請求中,它們與Firefox瀏覽器上的RestClient一起正常工作,如下所示。

我不知道如何:

  • 插入餅乾這是我從以前的應用程序獲得

  • 刪除令牌(看來這是不可能的)

  • 解決這兩個錯誤,這些錯誤寫在標題

這是如何請求看起來像RESTClient實現:

Method: GET 
URL: https://xx.xx.xx.xx:8443/api/codes 
Content-Type: application/json 
Accept: application/json 
Cookie: code_system_frontend=bvkkvbcp24igdgja4h5hht13p4; code=ae8be9267e8dfea86a8f54f6bd980733 

這是怎麼迴應看起來像RESTClient實現:

Status Code: 200 OK 
Access-Control-Allow-Headers: Content-Type, Content-Disposition, Accept, responseType, X-MAC, X-TIME, Cookie 
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS 
Access-Control-Allow-Origin: * 
Access-Control-Expose-Headers: Content-Type, Content-Disposition, Accept 
Connection: keep-alive 
Content-Type: application/json 
Date: Tue, 26 Jul 2016 15:22:00 GMT 
Server: WildFly/9 
Transfer-Encoding: chunked 
access-control-allow-credentials: true 
x-powered-by: Undertow/1 

和典型的JSON響應體:

[ 
    { 
     "code": 1, 
     "codename": "Demo" 
    }, 
    { 
     "code": 2, 
     "codename": "Gmx" 
    } 
    //AND SO ON 
] 

這是代碼Angularjs:

function getAllEntities(entityName, addToCache) { 
    config = { 
     headers: { 

       'cookie':'code_system_frontend=bvkkvbcp24igdgja4h5hht13p4;code=ae8be9267e8dfea86a8f54f6bd980733', 
       'Content-Type': 'application/json', 
       'Accept': 'application/json', 
       'withCredentials':'true', 
       //'Access-Control-Allow-Credentials': 'true', 
       //'X-API-TOKEN': undefined, 
       //'token':undefined, 
       //crossDomain: true 
      }, 
      data: '' 
     }; 

     return $http.get(endPoints.api + entityName, config) 
      .then(getAllEntitiesComplete) 
      .catch(function (message) { 
       exception.catcher('XHR Failed for getAllEntities for entity ' + entityName)(message); 
       return $q.reject(message); 
       logger.info('Message ' + message); 
      }); 

     function getAllEntitiesComplete(data, status, headers, config) { 

      var entities = data.data; 

      if (addToCache) { 
       service.cachedLookups[entityName] = entities; 
       service[entityName + 's'] = entities; 
      } 
      return entities; 
     } 
    } 

在Firebug中,我得到:

請求頭中的螢火蟲:

Accept: application/json 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.5 
Content-Type: application/json 
Host: XX.XX.XX.XX:8443 
Origin http://admin.dev.xxxxxxxx.xxx 
Referer http://admin.dev.xxxxxxxx.xxx/xx/codes 
User-Agent Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 
token fake token for anonymous user 
withCredentials true 

而且我也得到螢火蟲警告:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the 
remote resource at https://xx.xx.xx.xx:8443/xxxxxxxx/api/code. (Reason: 
CORS header 'Access-Control-Allow-Origin' does not match '*'). 

而且我得到的,因爲我的代碼此錯誤:

Error: XHR Failed for getAllEntities for entity suborder Object { status=0, config={...}, data=null, more...} 

在克羅姆我得到:

Refused to set unsafe header "cookie" 

net::ERR_INSECURE_RESPONSE 

回答

1

跨來源請求阻止:同源策略不允許讀 遠程資源的https://xx.xx.xx.xx:8443/xxxxxxxx/api/code。 (原因:CORS頭'Access-Control-Allow-Origin'不匹配 '*')。

看起來您似乎沒有在您的服務器上啓用跨源資源共享(CORS)或者它的配置錯誤。

關於標題的問題,你應該看看那個帖子:

AJAX post error : Refused to set unsafe header "Connection"

的XMLHttpRequest不允許設置這些標題,他們正在通過瀏覽器設置 自動。原因是通過操縱這些 標頭,您可能會誘使服務器通過相同的連接接受第二個 請求,而不是通過 常規安全檢查 - 這將是 中的安全漏洞瀏覽器。

如果您使用的是cookie,那麼每個請求都會自動發送cookie,特別是如果您設置了withCredentials = true。

如果您正在使用但令牌,你必須將它們添加到Authorization頭,一般格式爲:「承載」 +即爲MyToken

相關問題