開發中的一些小事

weixin_33936401發表於2016-10-28
  • <strong>跨域</strong>
    問題描述:
    php程式部署到nginx伺服器,前端呼叫API報出跨域問題(200時沒問題,422時出現此問題):
    [“No 'Access-Control-Allow-Origin' header is present on the requested resource”]
    檢查nginx配置檔案,包括允許跨域的配置如下:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
 add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;

解決方案:
出現此問題是因為add_header是針對200, 201, 204, 206, 301, 302, 303, 304, 307這些HTTP響應的,如果想要在響應等於4XX的時候也起作用需要新增always,所以配置應為:

add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers X-Requested-With always;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS always;

另一種解決方案是使用more_set_headers替換add_header,以便允許更多的響應跨域或是根據需要更靈活的配置響應值為對應值時可用。

more_set_headers 'Access-Control-Allow-Origin: *'; 
more_set_headers -s '404' 'Access-Control-Allow-Origin: *'; 

more_set_headers需要nginx的擴充套件支援

相關文章