我正在尝试使用reactJs中的ajax请求来获取一个需要从YI2中的承载身份验证的资源。
请求标头
accept:/
accept-encoding:gzip,deflate,sdch,br
access-control-request-headers:authorization
access-control-request-method:get
access-control-request-method:keep-alive
主机:localhost
来源:http://localhost:8110
引用:http://localhost:8110/
用户代理:mozilla/5.0(x11;Linux
响应标头
access-control-allow-credentials:true
access-control-allow-headers:authorization
access-control-allow-methods:GET,POST,PUT,options
access-control-allow-origin:http://localhost:8110
connection:keep-alive
content-length:150
content-type:application/json;charset=UTF-8
日期:Fri,21 Apr 2017 10:36:27 GMT
Keep-alive:Timeout=5,Max=99
服务器:Apache/2.4.25(Ubuntu)
www.authenticate:barer realm=“API”
这是我在YI2框架中的行为方法
public function behaviors()
{
$behaviors = parent::behaviors();
unset($behaviors['authenticator']);
return [
[
'class' => 'yii\filters\ContentNegotiator',
'only' => ['view', 'index', 'filters', 'slug', 'shortlist'], // in a controller
// if in a module, use the following IDs for user actions
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
],
'corsFilter' => [
'class' => \yii\filters\Cors::className(),
'cors' => [
'Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
],
],
'authenticator' => [
'class' => \yii\filters\auth\HttpBearerAuth::className(),
'except' => ['options'],
],
];
}
我知道这个问题与CORS有关,因为相同的请求与Postman和cURL(来自terminal)使用相同的令牌可以很好地工作,reactjs和ajax显示相同的错误。
你的错误在于:
'except' => ['options'],
类“HttpBearerAuth”继承了YII\Base\ActionFilter,根据文档,该公共属性“$Except”定义了一个“不应应用此筛选器的操作ID列表”。而不是http方法。因此,以上所述将不包括来自“authenticator”的预飞行请求,而是对actionOptions()的请求,而这并不是您想要的。
您应该做的是避免为一个OPTIONS http请求返回401 http错误(这会导致您的错误),而只返回一个200空的响应。您可以通过添加以下内容来完成此操作:
public function beforeAction($action)
{
//your code
if (Yii::$app->getRequest()->getMethod() === 'OPTIONS') {
parent::beforeAction($action);
Yii::$app->getResponse()->getHeaders()->set('Content-Type', 'text/plain');
Yii::$app->end();
}
return parent::beforeAction($action);
}
我正在尝试使用Ajax进行REST调用(POST)。这是我的AJAX代码 最初,我得到了这个错误:XMLHttpRequest无法加载http://localhost:port/service/myservice。对preflight请求的响应未通过访问控制检查:请求的资源上没有“access-control-allow-origin”标头。因此不允许访问源“null”。响应的HTTP状态代码为4
我使用作为服务器端的Spring-boot并提供一个虚拟服务进行测试 其中我的serviceCaller.java=
我知道有很多这样的问题,但我见过没有一个能解决我的问题。我已经使用了至少3个微框架。它们在执行一个简单的POST时都失败了,该POST应该返回数据: angularJS客户端: SlimPHP服务器: 我已经启用了CORS,并获得了工作请求。html使用服务器发送的JSON内容进行更新。然而我得到了一个 每次我试着用POST。为什么?
问题内容: 大家。我是Angular 2和Spring框架的新手。我正在尝试使用授权标头(基本auth)进行简单的get请求。 我正在使用Spring Boot(1.2.6.RELEASE),这也可能是相关的。我的CORS配置如下所示。 这是客户端的外观 我不断得到: XMLHttpRequest无法加载 http:// localhost:8080 / api / login?username
我知道这里已经有很多相同的解决问题, 但不幸的是,它们都没有帮助我:-( 这里是我的问题: 我尝试从本地主机连接到服务器上的REST服务。使用FF REST插件可以正常工作,但我的应用程序会导致以下错误: 选项 http://.../my_REST_Service/ 401 (未经授权) XMLHttpRequest 无法加载 http://.../my_REST_Service/。 印前检查的响
问题内容: 我知道有很多这样的问题,但是我所见的问题都没有解决。我已经使用了至少3个微框架。所有这些都无法执行简单的POST,它应该将数据返回: angularJS客户端: SlimPHP服务器: 我已启用CORS,并且GET请求有效。html使用服务器发送的JSON内容进行更新。但是我得到了 XMLHttpRequest无法加载 http:// localhost:8080 / server.p