2017-03-01 50 views
1

好了,我嘗試部署與webpackcreate-react-app捆綁的應用程序,該理論在這裏很簡單:CORS和同源策略請求問題的反應捆綁的應用程序

進出口使用環境變量的一些事情,但在簡單地說,在development中我們使用了一個類似http://theapp.app.com/api/v3/endpoint的URL,它可以工作。

production模式(yarn build)中,URL是http://localhost/api/v3/endpoint,存在唯一的更改。

無論如何,我使用fetch API來提出我的請求,並且我正在玩fetch配置的mode。對於development它是mode: 'cors',因爲服務器不在我的本地機器上,並且它工作正常。

production標誌的情況下,我試着用mode: 'same-origin'cors但我在分別爲了得到這兩個錯誤:

  • 在生產允許 enter image description here

  • CORS啓用同源在生產中 enter image description here

之前的一些操作:

  1. 是的,API應用程序和軟件包由相同的服務器/機器提供服務。
  2. 是的,我們已經在服務器上配置CORS(我們使用python瓶):

    @app.hook('after_request') def enable_cors(): response.headers['Access-Control-Allow-Origin'] = '*' response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS'

  3. 是的,我知道,請求源的URL不在same-origin政策相同,但cors啓用它也爆炸,http://data.blabla是來自直接服務器的網址....我只是不知道該怎麼辦。

任何想法?我(可悲的是)有幾個小時在此。

+1

'請求模式是「相同的來源」,但......' - 如果請求實際上是交叉原點,爲什麼請求模式是相同的?爲什麼使用'localhost'的「生產模式」?該應用是否包含Web服務器? –

+0

嗯,我說我嘗試了'同源'(第一張圖片),然後是'跨源'(第二張圖片)。 – Nano

+0

抱歉,所以你做了...... *在這種情況下,這個「localhost」是什麼?你提到「應用程序」,所以我很困惑,你期望從「本地主機」 –

回答

2

在服務器端訪問localhost沒有問題,因爲它會指向同一臺服務器。但是如果你試圖在客戶端做到這一點,http://localhost指向到那個非常相同的客戶端。如果在瀏覽器中運行的Javascript正在請求http://localhost中的某個內容,則您正試圖與瀏覽器的計算機進行通信,而不是Web應用程序的主機。 我甚至沒有想到你沒有意識到這一點。

當你說API在localhost上時,我認爲這個應用程序只會用在已經有API服務器運行的客戶端上。

如果外面的人應該使用這個應用程序,API也必須公開。如果你想隱藏不安全的API,你必須實現一個暴露但安全的API。或者,你知道,確保實際的API :)