POSTMAN工作时角度POST交叉原点错误

时间:2015-12-23 15:51:28

标签: javascript angularjs cross-domain cors access-control

我尝试从我的角度登录服务发布POST:

$http.post('https://xyz/login',
            {
                headers: {
                    'Content-type': 'application/json',
                    'Accept': 'application/json',
                    'signature': 'asd'
                }

我收到了这个错误:

XMLHttpRequest cannot load https://xyz/login. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.

我试过这个标题:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

还有这些:

"Access-Control-Allow-Origin": "*";
"Access-Control-Allow-Headers": "X-Requested-With";
"Access-Control-Allow-Methods": "GET, POST", "PUT", "DELETE";

有趣的是,POSTMAN是有效的。 我该怎么办?

感谢。

3 个答案:

答案 0 :(得分:6)

您的请求包含非简单标题Content-typesignature,这些标题必须包含在回复的Access-Control-Allow-Headers标题中。

Content-type有时是一个简单的标头,但仅适用于特定值。application/json不是其中一个值,它会导致Content-type变得非简单。)

在服务器的预检响应中将Content-type添加到Access-Control-Allow-Headers

POSTMAN不受同源策略的约束,因此不需要服务器提供CORS支持。

答案 1 :(得分:2)

您的浏览器是否在POST之前发出OPTIONS请求? 检查NET选项卡 我之前遇到过浏览器或Angular(不知道哪个)以及服务器没有提出OPTIONS请求的问题......

“Access-Control-Allow-Methods”:“GET,POST”,“PUT”,“DELETE”,“OPTIONS”;

答案 2 :(得分:0)

不确定您是否已拥有所需信息。但是在我的本地网络服务器中 - 当我使用邮递员发出http请求时,它会添加到标题中:

标头:    {host:' localhost',      连接:'保持活力',      pragma:' no-cache',      '缓存控制':' no-cache',      '用户代理':' Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 47.0.2526.106 Safari / 537.36',      接受:' / ',      引用者:' http://localhost/',      '接受编码':' gzip,deflate,sdch',      '接受语言':' en-US,en; q = 0.8' },

以下是我在rawHeaders中看到的内容:    ['主持人',      '本地主机&#39 ;,      '连接&#39 ;,      '保持活动#39 ;,      '附注&#39 ;,      '无缓存&#39 ;,      '缓存控制&#39 ;,      '无缓存&#39 ;,      '用户代理&#39 ;,      ' Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 47.0.2526.106 Safari / 537.36',      '接受&#39 ;,      ' / &#39 ;,      ' Referer的&#39 ;,      ' http://localhost/&#39 ;,      '接受编码&#39 ;,      ' gzip,deflate,sdch',      '接受 - 语言&#39 ;,      ' EN-US,EN; Q = 0.8' ],

所以,或许你只需要假装你的客户端成为公认的浏览器客户端。