2016-06-06 20 views
13

Na prośbę czyniąc tak:Nie można pobrać bez żadnych POST-Cors w nagłówku

return fetch(
      'http://localhost:8000/login', 
      { method: 'POST', 
       headers: new Headers(
        {"Content-Type": "application/json", 
        "Accept":"application/json"} 
       ), 

       body: JSON.stringify(
        {'name': 'Tom', 'password': 'Soyer'} 
       ) 
      } 
      ).then(response => { console.log(response);}) 
      .catch(err => console.log(err)) 

żądanie działa metodą OPCJI zamiast POST. Tylko na tryb dodawania: Prośba stać POST 'No-Cors':

return fetch(
      'http://localhost:8000/login', 
      { method: 'POST', 
       mode: 'no-cors', 
       headers: new Headers(
        {"Content-Type": "application/json", 
        "Accept":"application/json"} 
       ), 
       body: JSON.stringify(
        {'name': 'Tom', 'password': 'Soyer'} 
       ) 
      } 
      ).then(response => { console.log(response);}) 
      .catch(err => console.log(err)) 

ale odpowiedź nie ok niż (nawet jeśli stan odpowiedź sieci wynosi 200): {type: "nieprzezroczyste", url: "", status : 0, OK: false, statusText: "" ...} przypuszczam, bo

jedynym dozwolone wartości dla nagłówka Content-Type to: application/x-www-form-urlencoded wieloczęściowy/form- tekst danych/zwykły

opisane tutaj https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Czy można w dowolny sposób wykorzystać dane POST json z pobieraniem?

+3

No właśnie a) nie robią żądań http cross-domain lub b) odebrać je z odpowiednimi nagłówkami Cors – Bergi

Odpowiedz

13

Zwyczaj Content-Type nagłówek wysyłasz powoduje, że wniosek o preflighted, co oznacza prośbę opcji, zawierający niektóre metadane dotyczące żądania POST, która ma być wysłany, zostanie wysłany przed faktyczna żądania POST.

Twój serwer musi być przygotowany na obsługę tego żądania OPTIONS. Nie podano, co jest napisane na serwer, ale z wyraźnej na przykład, można zarejestrować middleware, który przechwytuje żądania wszystkich „Opcje”, ustawia nagłówki Access-Control-Allow-Origin: * i Access-Control-Allow-Headers: Content-Type i reaguje z 200.

Jeśli jest Możliwe, że możesz wysłać żądanie za pomocą nagłówka "Content-Type": "text/plain", który rozwiązałby twój problem. Alternatywnie możesz użyć czegoś, co całkowicie pomija XHR, np. JSONP.

1

Jeśli nie masz kontroli nad serwerem można spróbować to:

http://cors-anywhere.herokuapp.com/

+11

routingu ruch przez kogoś nieznanego reverse proxy nie wydaje się odpowiednim rozwiązaniem z punktu widzenia bezpieczeństwa i prywatności. – Marmelatze

+4

oczywiście, ale do celów testowych można to traktować jako szybkie obejście. –

+0

@MarcinRapacz: nie zadziała, jeśli na pierwotnym serwerze będą używane pliki cookie. – user2284570