当前位置: 首页 > 知识库问答 >
问题:

由于选项请求成功后缺少CORS标头,Angular 4请求失败

公良玺
2023-03-14

我遇到了以下问题:在起飞前的OPTIONS请求成功后,随后的POST请求失败。这有点违反直觉,因为一旦选项成功,随后的请求应该被接受。

流程如下:

Request URL:https://<my aws hosted api endpoint>/pchacin/calc/sum
Request Method:OPTIONS

authority:<my aws end point>
method:OPTIONS
path:/pchacin/calc/sum
scheme:https
accept:*/*
accept-encoding:gzip, deflate, br
accept-language:ca,en;q=0.8,en-US;q=0.6,es-ES;q=0.4,es;q=0.2
access-control-request-headers:authorization,content-type
access-control-request-method:POST
origin:http://localhost:4200
referer:http://localhost:4200/calculator/sum

响应头

Status Code:200 
access-control-allow-credentials:true
access-control-allow-headers:Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent
access-control-allow-methods:OPTIONS,POST
access-control-allow-origin:*
content-length:0
content-type:application/json

后请求

Request URL:https://<my amazon end point>/pchacin/calc/sum
Request Method:POST

method:POST
path:/pchacin/calc/sum
scheme:https
accept:application/json, text/plain, */* 
accept-encoding:gzip, deflate, br
accept-language:ca,en;q=0.8,en-US;q=0.6,es-ES;q=0.4,es;q=0.2
authorization: <my security token>
content-length:13
content-type:application/json
origin:http://localhost:4200
referer:http://localhost:4200/calculator/sum
user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 
Safari/537.36

发布响应(通知是返回200,我实际上看到了结果内容,所以后端可以请求)

content-length:12
content-type:application/json
date:Mon, 09 Oct 2017 14:25:29 GMT .  
status:200

错误消息

请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost:4200因此,不允许访问。

共有1个答案

刘京
2023-03-14

我注意到Angular 6的POST操作是由选项请求启动的!

在后端实现了一个选项处理程序(返回200状态)之后,它看起来更好了。

在选项请求中还有一个“飞行前请求”:访问控制请求头:内容类型。

(文档引用:“在发出飞行前请求时使用Access Control Request header Request header,让服务器知道在发出实际请求时将使用哪些HTTP头。”)

我通过允许内容类型(在后端REST服务器中):-“访问控制允许标头”修复了这个问题=

当然还有:“访问控制允许来源”=

然后,我得到了一个GET和POST工作!

 类似资料:
  • 在调试我遇到的CORS问题时,我发现了以下行为。Chrome发出以下选项预检请求(由Chrome本身在CURL中重写): 以下情况下服务器对此请求的响应: 是响应“无效CORS请求”的主体。如果我重复该请求,删除标头“Access Control request Method”(仅该标头),则OPTIONS请求将成功,并得到以下响应: 然而,有问题的头是CORS规范标准头,所以它不应该阻止请求成功

  • 我目前对tslint有意见,希望有人能给我指出正确的方向。 我正在尝试使用Angular2框架提供的HTTP发送HTTP GET请求。对于这个请求,我必须指定内容类型和承载身份验证令牌。 我的代码示例: 然而,tslint抱怨说 “TS2345:类型为{headers:headers;}的参数”不可分配给“RequestOptionsArgs”类型的参数。属性“headers”的类型不兼容。类型“

  • 我尝试使用HttpRequest(dart:html)执行POST请求,以调用一个使用基本身份验证保护的rest服务。 在执行POST调用之前,执行选项调用(由dart:html发出),而不使用authorization标头。这导致401未经授权的响应。 请求标头: Accept:*/* Accept-Encoding:gzip、deflate、SDCH Accept-Control-Reques

  • 下面的代码我得到当我使用异步.当我使用同步时,它成功了。 链接失败,但在异步和同步情况下都成功。 出什么事了?这是在Python3.4中实现的。2在FreeBSD8上,aiohttp 0.14。4,请求2.5。3. 此操作的输出为:

  • 问题内容: 我最近将服务器从Rackspace CloudSites(在Apache / Linux上运行)移至Windows Azure网站。自迁移以来,由于CORS,我们REST API上的所有jQuery AJAX请求都开始失败。 我们使用自定义标头,因此jQuery在运行实际的API调用之前发出飞行前HTTP OPTIONS请求。问题是OPTIONS请求似乎没有到达我的PHP代码,而是由其

  • 我可以通过在API类中添加方法(在相同的)来解决这一问题,但我希望不必对所有方法都这样做。 在处理一个选项请求时,如何找出实际的(Get/Post)资源方法?