Angular2 Post Request从某种原因

时间:2017-05-15 15:20:03

标签: php angular post

我似乎无法理解为什么请求不作为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请求? 感谢。

1 个答案:

答案 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