我似乎无法理解为什么请求不作为POST请求发送 我在NG2中的代码如下:
let headers = new Headers({ 'Content-Type': 'application/json'});
let options = new RequestOptions({ headers: headers , method:RequestMethod.Post });
let content = [ { email:email, password: pass } ];
return this._http.post(this._apiPath, content, options).toPromise()
.then(this.extractData)
.catch(this.handleErrorPromise);
(我使用以下代码编写了代码:http://www.concretepage.com/angular-2/angular-2-http-post-example#example)
在我的PHP服务器中,我收到以下请求:
[15 / May / 2017:15:09:32 +0000]“ OPTIONS /index.php/api/login HTTP / 1.1”404 90“http://localhost:4200/”“Mozilla /5.0(X11; Linux x86_64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 57.0.2987.133 Safari / 537.36“
当我运行一个简单的wget请求时,我在PHP服务器中收到以下正确的请求:
[15 / May / 2017:15:02:51 +0000]“ POST /index.php/api/login HTTP / 1.1”200 96“ - ”“Wget / 1.15(linux -gnu)” web_1 | 2017/05/15 15:02:51 [info] 15#15:* 21客户端172.18.0.1关闭keepalive连接
这是我使用的wget命令:
wget --post-data "email=myemail@gmail.com&password=test" http://localhost/index.php/api/login
任何想法为什么NG2不发送POST请求? 感谢。
答案 0 :(得分:3)
这是因为HTTP access control (CORS)。
您正在见证什么称为预检请求。我想这会发生,因为你的内容类型被设置为json。
OPTIONS请求几乎要求服务器是否允许客户端发出请求。
请求将被预检......(反式措辞)
...如果Content-Type标头的值不是以下值:
- 应用程序/ x-WWW窗体-urlencoded
- 的multipart / form-data的
- 文本/纯
您需要在服务器上处理此问题。
编辑: Here is a pretty good SO answer on CORS and Preflighting