2016-03-02 145 views
1

我試圖在標頭中添加Access-Control-Allow-Origin。要做到這一點,我添加此行:如何在swagger-api-explorer上添加自定義標頭

window.swaggerUi.api.clientAuthorizations.add("headerKey", apiKeyAuth); 
window.swaggerUi.api.clientAuthorizations.add("headerKey", new SwaggerClient.ApiKeyAuthorization('Allow-Access-Control-Origin', '*', "header")); 

不幸的是,我得到這個,當我探索請求頭:

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, developer_key, access-control-allow-origin 
Access-Control-Request-Method:GET 
Connection:keep-alive 

有一個在請求頭添加沒有額外的自定義標題。它將_access-control-allow-origin_作爲價值添加到Access-Control-Request-Headers中。

我想這個_access-control-allow-origin_添加爲新的自定義標題,如:

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, developer_key 
Access-Control-Allow-Origin: * 
Access-Control-Request-Method:GET 
Connection:keep-alive 

任何人都可以建議我什麼我做錯了,或者我應該怎麼做額外得到這個工作呢?

回答

2

看起來像要通過在Swagger UI a.k.a客戶端添加Access-Control-Allow-Origin標頭來啓用CORS。但是,您應該在服務器端啓用CORS。 Swagger UI Wiki也指出:

啓用CORS的方法取決於您用來託管您的應用程序的服務器和/或框架。

約CORS一個簡短的背景: 當一個Web瀏覽器和/或JavaScript工具包要發送一個HTTP請求發送到其他域上的主機/服務器,它增加了一些CORS相關的頭這樣的作爲Access-Control-Request-Method(用於請求HTTP方法)和Access-Control-Request-Header(用於HTTP請求中的標題列表)。在服務器端,如果允許請求方法和頭文件,服務器將發回一個HTTP響應頭,該頭響應爲Access-Control-Allow-Origin。瀏覽器將阻止沒有此標頭的響應。

至於爲什麼標題出現在Access-Control-Request-Headers:accept, developer_key, access-control-allow-origin,原因是您的瀏覽器或JS工具包將access-control-allow-origin視爲您的代碼發送到服務器的常規自定義標頭。並探測服務器,如果HTTP請求有效。

您可以瞭解更多關於CORS這裏:http://www.html5rocks.com/en/tutorials/cors/

您也可以參考這個website更多地瞭解如何在服務器上啓用CORS。

相關問題