POST请求不从Angular5代码工作,但来自邮差工作[复制](POST request does

2019-09-29 09:09发布

这个问题已经在这里有一个答案:

  • 为什么不加入CORS标头的选项航线允许浏览器访问我的API? 29个回答
  • 如何访问控制允许来源头的工作? 13个回答
  • 的XMLHttpRequest不能加载XXX否“访问控制允许来源”标题 6答案

前端:Angular5

后端:爪哇(一Wildfly 8.x的服务器上运行)

在发送HTTP POST请求,与content-type: 'application/json'从我的角度应用到服务器上,我得到以下错误:

无法加载的http://本地主机:8080 / MYK / API / V1 /活动/的addEvent :响应预检请求未通过访问控制检查:否“访问控制允许来源”标题存在于所请求的资源。 原产地“ 的http://本地主机:4200 ”因此不允许访问。 响应有HTTP状态代码403。

这是针对该请求的代码:

const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) }; this.http.post("http://localhost:8080/myk/api/v1/events/addevent", jsonPayload, httpOptions).subscribe();

上检查,我发现,而不是一个POST请求, OPTIONS请求正在取得(如根据上CORS和预检请求此MDN文章 )。

然而,当我使用邮差试过了同样的要求,它的工作完美的罚款。

如何邮差不面对的一个问题, OPTIONS当我没有处理请求OPTIONS在服务器的请求?

另外,我该怎么办(同时保持相同的content-type而无需修改服务器端代码)来解决这个问题?

注1:虽然这个问题解决了同样的问题,建议的解决方案需要更改的内容类型。

注2:当我运行它试图使用,使POST请求其他应用程序(设计,而不是我,在Angularjs) ajax调用,它工作正常。 (我不和明白为什么这个作品,除此之外,与angular5答案将不胜感激。我列入本说明的情况下,它搞清楚与Angular5应用问题帮助)

编辑:这可能是近乎挑剔,但我专门找,试图通过修改客户端代码,而不是通过使用扩展或与浏览器的任何修改,以解决上述。 但是,如果这些方法都可以,我愿意改变服务器端代码。

Answer 1:

这个问题被称为CORS。 Ç罗斯Òrigin 方案资源小号哈林。 这是出现在请求和响应的来源是不同的。 例如:如果你的项目是https://139.43.33.122:1111/和你的服务器托管在https://123.0.3.444:3000 ,那么你的请求和响应的起源是完全不同的,因此,浏览器会块的响应。 这是浏览器的东西。 邮差不关心其来源。 要接收响应,有2种方式(也许更多,但我只用这2个)。

  1. 附加头:如果yoou访问/权限服务器代码,然后附加头添加到服务器响应: 访问控制允许来源: http://siteA.com ,访问控制允许的方法:GET,POST ,PUT,访问控制,允许报头:内容类型

  2. 使用扩展:有迹象表明,可以绕过这一限制多个扩展。 如果你没有访问或更改服务器响应权限,那么这是go.I'm亲自仅使用此方法的方式。



Answer 2:

我有同样的问题,我已经找到了窍门,以避免双方CORS和403个错误感谢这个文章 。

  1. 添加邮差拦截你的谷歌浏览器: https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo/support?hl=en

  2. 激活邮差拦截在邮差

  1. 启动您的请求,并获取该cookie感谢邮差接口

  1. 开启Chrome的开发工具,去到控制台,并手动添加cookie中感谢邮递员拦截

    的document.cookie = “keyofcookie = valueofcookie”

重试你的要求,它的工作原理!

否则,只是为了避免CORS,可以使用所描述的代理这里 。



文章来源: POST request does not work from Angular5 code but works from Postman [duplicate]