2017-02-21 95 views
3

觀看時,帖子的內容類型正在發生變化我有一個取其中的請求類型似乎正在改變它搞亂了我的職務。我提交我的基本表格(僅限一個字段)。這是抓取。作出反應 - 在獲取提琴手

 handleSubmit(event, data) { 
    //alert('A name was submitted: ' + this.state.value); 
    event.preventDefault(); 
    console.log("SUBMIT STATE::", this.state.value); 
    return (
     fetch("//localhost:5000/api/values/dui/", { 
      method: "post", 
      mode: 'no-cors', 
      headers: { 
       'Access-Control-Allow-Origin': '*', 
       'Content-Type': 'application/json', 
       'Accept': 'application/json',     
      }, 
      body: JSON.stringify({ 
       name: this.state.value, 
      }) 
     }).then(response => { 
      if (response.status >= 400) { 
       this.setState({ 
        value: 'no greeting - status > 400' 
       }); 
       throw new Error('no greeting - throw'); 
      } 
      return response.text() 
     }).then(data => { 
      var myData = JSON.parse(data); 
      this.setState({ 
       greeting: myData.name, 
       path: myData.link 
      }); 
     }).catch(() => { 
      this.setState({ 
       value: 'no greeting - cb catch' 
      }) 
     }) 
    ); 


} 

但是,當我在提琴手內容類型看這是現在「內容類型:文本/無格式;字符集= UTF-8」。這裏是原始的Fiddler:

POST http://localhost:5000/api/values/dui/ HTTP/1.1 
Host: localhost:5000 
Connection: keep-alive 
Content-Length: 16 
accept: application/json 
Origin: http://evil.com/ 
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 

內容類型:文本/無格式;字符集= UTF-8 的Referer:http://localhost:3000/ 接受編碼:gzip,放氣,BR 接受語言:EN-US,烯; q = 0.8

{"name":"molly"} 

在DOM查看我只看到:

POST http://localhost:5000/api/values/dui/ 415(不支持的媒體類型)

我還發現奇怪的是,'接受'是小寫以及'內容類型'。任何理由爲什麼發生這種情況。我還沒有發現任何具體的搜索結果。

回答

3

當爲請求設置了mode: 'no-cors'時,瀏覽器將不允許您設置除CORS-safelisted request-headers以外的任何請求標頭。見the spec requirements about adding headers

要附加一個名稱/值(名稱/)對到Headers對象(),執行這些步驟:

  • 否則,如果後衛是 「request-no-cors」 和/不是CORS-safelisted request-header,回報。
  • 在這種算法中,return等同於「無添加該標頭的標頭的對象返回」。

    而且它而不致設置爲text/plain;charset=UTF-8的原因是因爲the algorithm for the request constructor電話爲extract a body algorithm包括以下步驟:

    接通對象的類型:

    USVString

    • 套裝Content-Typetext/plain;charset=UTF-8
    1

    因此,這是解決這個問題,我切換到「無CORS」到「CORS」。坦白說,我認爲我已經翻轉以失敗告終,這些之前,因爲跨起源問題,我是在我的本地開發工作站,我被部署到服務器,但不用之間不得不說,當我設置回模式:「CORS」,一切重新工作。本地工作站和服務器。爲什麼這會改變實際的請求標題,林不知道。如果任何人有答案,我會很樂意上傳。

    謝謝。