請求是跨域請求,從a.mycompony.com到b.mycompony.com;後端設定了如下引數,表示前端允許post和get方式跨域請求
response.setheader("access-control-allow-origin", "*");
response.setheader("access-control-allow-methods", "post,get");
response.setheader("access-control-allow-headers", "authentication,content-type");
同樣的跨域請求,get方式的請求能夠正常訪問到上游伺服器,post請求卻不能,報403 forbidden request;
還有乙個重要資訊,這個post請求在以前是可以正常訪問到後端的,並且前段沒有改動過這部分**
請求方式不同,導致差異,說明問題出在後端伺服器上游;
前端沒有變動,且以前可以正常訪問,說明問題出在**伺服器nginx上
檢視nginx配置,發現類似如下**
if($request_method != (post|get|head))
跨域可分為簡單請求和非簡單請求
簡單請求類似正常請求,只是在請求頭資訊和響應頭加以區別;
非簡單請求會將請求分為兩次請求,第一次的請求為option方式,用於預檢是否支援第二次的請求方式、網域名稱的訪問請求,比如post等;例如後端設定:
response.setheader("access-control-allow-origin", "a.mycompony1.com");
response.setheader("access-control-allow-methods", "post,get");
如果前端請求用put方式或者跨域網域名稱為b.mycompony.com,後端返回200狀態碼,但是實際是不允許跨域的。錯誤以xhr物件的onerror事件表現出來,需要前端使用者手動處理。如果允許訪問,則進行第二次類似簡單請求的請求
access-control-request-method: put總結:我們的403報錯是因為nginx不支援option請求方式的訪問,刪除訪問限制後可正常進行
參考文件:
阮一峰的blo
mdn開發者文件
記一次nginx解決跨域問題
關於跨域是什麼 產生跨域的條件等基礎概念,我就不在此記錄了。我們直接來看nginx解決跨域的方法。對於簡單請求新增響應頭 location 或者 http新增完成後,reload過載nginx配置檔案。可以在網路請求中驗證是否加入成功,如果上面方法不管用,那你就要看你的跨域請求是不是options了...
nginx記一次解決跨域問題的記錄
在nginx中配置proxy pass時,當在後面的url加上了 相當於是絕對根路徑,則nginx不會把location中匹配的路徑部分 走 如果沒有 則會把匹配的路徑部分也給 走。下面四種情況分別用http 192.168 1.4 proxy test.html 進行訪問。第一種 location...
記一次跨域的問題 vue vli3 0
1,首先明確一點跨域問題是瀏覽器的同源策略產生的導致,首先前端本都除錯的方法就是使用 的方式vue.congfig.js devserver 注意我這邊除錯了很多次,我之前用的全路徑一直都是 不成功。故做一次記。和後端聯調後端也做這個處理了 大致思路如下 1,新增響應的header methods ...