2017-09-02 176 views
0

Angular 2 http post没有设置内容类型

我试图在http.post上设置标题,但没有运气。Apache CORS OPTIONS请求状态501错误

import { Injectable } from '@angular/core'; 
import { Http, Headers, RequestOptions, Response } from '@angular/http'; 

import { User } from '../_models/index'; 

@Injectable() 
export class UserService { 
constructor(private http: Http) { } 

create(username: string, firstname: string, lastname: string, email: string, password: string) { 
    let headers = new Headers({ 
     'Accept' : 'application/json', 
     'Content-Type': 'application/json' 
    }); 
    let options = new RequestOptions({ headers: headers, method: 'post' }); 

    return this.http.post(
     'http://127.0.0.1:8080/api/users/register', 
     JSON.stringify({username, firstname, lastname, email, password}), 
     options 
     // this.jwt() 
    ).map(
     (response: Response) => response.json() 
    ); 
} 

我已经在我的Apache配置

<Directory /var/www/stockwatch_api> 
      Header set Access-Control-Allow-Origin "*" 
      Header set Access-Control-Allow-Headers "Content-Type" 
      Header set Access-Control-Allow-Methods "POST, PUT, DELETE, GET, HEAD" 

设置头,我也在我的CakePHP API的应用程序设置相同的标题。

我得到这样的响应:

状态代码:501未执行

enter image description here

+1

的问题是与后端。它拒绝[CORS飞行前OPTIONS请求](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests)。尝试将OPTIONS添加到允许的方法列表中。 – georgeawg

+0

谢谢,我试过了,没有工作。 – user5569354

+0

[在.htaccess中启用cors的可能的重复](https://stackoverflow.com/questions/14467673/enable-cors-in-htaccess) – georgeawg

回答

0

尝试使用headers.append()

let headers = new Headers(); 
headers.append('Accept', 'application/json'); 
headers.append('Content-Type', 'application/json'); 
+0

感谢@aravind,但没有奏效 – user5569354

+0

你是否得到任何错误?你在teamviewer中可用吗? – Aravind

1

如上所述,你的服务器拒绝OPTIONS请求,所以你需要让它不这样做。

开始通过增加你的Apache配置如下:

RewriteEngine On 
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L] 
+0

感谢仍然得到HTTP 501错误,虽然 – user5569354

+0

如果你仍然得到一个501,那么我想这是从别的地方除了Apache。你提到cakephp。我想你想先看看那里。无论您是否希望查看服务器日志中的“http://127.0.0.1:8080”服务器,该服务器都会发送该请求,以便查看在服务器端发送的内容信息501回应。 – sideshowbarker