javascript - 向nodejs發(fā)送post請(qǐng)求,只有options
問題描述
向后臺(tái)發(fā)送post請(qǐng)求時(shí),只有一個(gè)options的請(qǐng)求,而沒有真的post請(qǐng)求,get請(qǐng)求可以成功。而如果用postman,post請(qǐng)求也可以請(qǐng)求成功。需要配置什么嗎。代碼如下:
發(fā)送post請(qǐng)求時(shí):
發(fā)送get請(qǐng)求:
而在postman的環(huán)境下,post可以成功。
nodejs代碼如下:
var app = require(’express’)();var User = require('./users.js');app.post(’/users/login’,function (req,res) { res.setHeader(’Access-Control-Allow-Origin’, ’*’); res.send('foo'); console.log(res)})app.get(’/users/login’,function (req,res) { res.setHeader(’Access-Control-Allow-Origin’, ’*’); res.send('bar');})app.listen(’1090’,’127.0.0.1’);
前臺(tái)用的是angular的$http。想問的是,為什么post的時(shí)候,只有這個(gè)跨域的options啊
問題解答
回答1:首先搞清楚為啥會(huì)發(fā)一個(gè)options的請(qǐng)求(如果你已經(jīng)知道了就忽略好了),以下是發(fā)送(Preflight request)的先決條件。
請(qǐng)求以 GET, HEAD 或者 POST 以外的方法發(fā)起請(qǐng)求。或者,使用 POST,但請(qǐng)求數(shù)據(jù)為 application/x-www-form-urlencoded, multipart/form-data 或者 text/plain 以外的數(shù)據(jù)類型。比如說,用 POST 發(fā)送數(shù)據(jù)類型為 application/xml 或者 text/xml 的 XML 數(shù)據(jù)的請(qǐng)求。
使用自定義請(qǐng)求頭(比如添加諸如 X-PINGOTHER)
由于GET請(qǐng)求沒有預(yù)請(qǐng)求,直接發(fā)送所以沒問題。你在后端需要處理的options的請(qǐng)求,并且?guī)螩ORS需要的那些頭,例如Access-Control-Allow-Origin等,這樣options的預(yù)請(qǐng)求成功之后,才會(huì)接著發(fā)送真正的post請(qǐng)求!!!
我自己有一個(gè)疑問,我看你后端的代碼是沒有處理options的請(qǐng)求的,但是你前端的狀態(tài)顯示這個(gè)請(qǐng)求是成功的!!!想知道這個(gè)是怎么弄的?
希望能幫到你
回答2:https://github.com/wxungang/n...
完整代碼
