2017-02-27 44 views
0

我使用vue.js構建前端並在http://localhost:8080上運行它,並使用npm run dev進行開發。跨域可以直接vue-resource發送POST請求嗎?

我用燒瓶建立後端並在http://localhost:8081上運行它。

我還設置了跨域裝飾我的路線瓶

def crossdomain(origin=None, methods=None, headers=None, 
       max_age=21600, attach_to_all=True, 
       automatic_options=True): 
    if methods is not None: 
     methods = ', '.join(sorted(x.upper() for x in methods)) 
    if headers is not None and not isinstance(headers, basestring): 
     headers = ', '.join(x.upper() for x in headers) 
    if not isinstance(origin, basestring): 
     origin = ', '.join(origin) 
    if isinstance(max_age, timedelta): 
     max_age = max_age.total_seconds() 

    def get_methods(): 
     if methods is not None: 
      return methods 

     options_resp = current_app.make_default_options_response() 
     return options_resp.headers['allow'] 

    def decorator(f): 
     def wrapped_function(*args, **kwargs): 
      if automatic_options and request.method == 'OPTIONS': 
       resp = current_app.make_default_options_response() 
      else: 
       resp = make_response(f(*args, **kwargs)) 
      if not attach_to_all and request.method != 'OPTIONS': 
       return resp 

      h = resp.headers 

      h['Access-Control-Allow-Origin'] = origin 
      h['Access-Control-Allow-Methods'] = get_methods() 
      h['Access-Control-Max-Age'] = str(max_age) 
      if headers is not None: 
       h['Access-Control-Allow-Headers'] = headers 
      return resp 

     f.provide_automatic_options = False 
     return update_wrapper(wrapped_function, f) 
    return decorator 

@app.route("/api", methods=['POST', 'OPTIONS']) 
@crossdomain(origin="*") 
def test(): 
    return "hello world" 

然後,我通過vue-resource發送POST請求傳遞給後臺:

this.$http.post("http://localhost:8081/api", "somedata").then({}, {}) 

沒有出人意料的是,瀏覽器發送一個OPTIONS請求。

所以我的問題是:

  1. 現在,服務器端有允許跨域,我可以直接vue-resource發送POST要求?
  2. 如果不是,我必須使用flask_cors的CORS嗎?
  3. 有沒有什麼辦法可以在8080端口上運行前端和後端,防止跨域問題?

回答

0

嗯,我還沒有看到所有的前端代碼,但我不知道你是否設置了Vue.http.headers?

你可以在前端,設置您共同標題是這樣的:

Vue.http.headers.common['Access-Control-Allow-Origin'] = value; 

點擊此處瞭解詳情: CORS issue with Vue.js