gpt4 book ai didi

javascript - AngularJS POST 失败 : Response for preflight has invalid HTTP status code 404

转载 作者:IT老高 更新时间:2023-10-28 12:05:24 28 4
gpt4 key购买 nike

我知道有很多这样的问题,但我所见过的都没有解决我的问题。我已经使用了至少 3 个微框架。他们都在做一个简单的 POST 时失败了,这应该返回数据:

angularJS 客户端:

var app = angular.module('client', []);

app.config(function ($httpProvider) {
//uncommenting the following line makes GET requests fail as well
//$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
delete $httpProvider.defaults.headers.common['X-Requested-With'];
});

app.controller('MainCtrl', function($scope, $http) {
var baseUrl = 'http://localhost:8080/server.php'

$scope.response = 'Response goes here';

$scope.sendRequest = function() {
$http({
method: 'GET',
url: baseUrl + '/get'
}).then(function successCallback(response) {
$scope.response = response.data.response;
}, function errorCallback(response) { });
};

$scope.sendPost = function() {
$http.post(baseUrl + '/post', {post: 'data from client', withCredentials: true })
.success(function(data, status, headers, config) {
console.log(status);
})
.error(function(data, status, headers, config) {
console.log('FAILED');
});
}
});

SlimPHP 服务器:

<?php
require 'vendor/autoload.php';

$app = new \Slim\Slim();
$app->response()->headers->set('Access-Control-Allow-Headers', 'Content-Type');
$app->response()->headers->set('Content-Type', 'application/json');
$app->response()->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
$app->response()->headers->set('Access-Control-Allow-Origin', '*');

$array = ["response" => "Hello World!"];

$app->get('/get', function() use($array) {
$app = \Slim\Slim::getInstance();

$app->response->setStatus(200);
echo json_encode($array);
});

$app->post('/post', function() {
$app = \Slim\Slim::getInstance();

$allPostVars = $app->request->post();
$dataFromClient = $allPostVars['post'];
$app->response->setStatus(200);
echo json_encode($dataFromClient);
});

$app->run();

我已启用 CORS,并且 GET 请求有效。 html 使用服务器发送的 JSON 内容进行更新。但是我得到了一个

XMLHttpRequest 无法加载 http://localhost:8080/server.php/post .预检响应包含无效的 HTTP 状态代码 404

每次我尝试使用 POST。为什么?

编辑:Pointy 要求的 req/res req/res headers

最佳答案

编辑:

已经好几年了,但我觉得有必要进一步评论一下。现在我实际上是一名开发人员。对您的后端的请求通常使用您的框架将获取和处理的 token 进行身份验证;这就是缺少的。我实际上根本不确定这个解决方案是如何工作的。

原文:

好的,这就是我的想法。这一切都与 CORS 政策有关。在 POST 请求之前,Chrome 正在执行预检 OPTIONS 请求,该请求应在实际请求之前由服务器处理和确认。现在,对于这样一个简单的服务器,这真的不是我想要的。因此,重置 header 客户端会阻止预检:

app.config(function ($httpProvider) {
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
});

浏览器现在将直接发送 POST。希望这可以帮助很多人......我真正的问题是对 CORS 的了解不够。

链接到一个很好的解释:http://www.html5rocks.com/en/tutorials/cors/

this answer 致敬给我指路。

关于javascript - AngularJS POST 失败 : Response for preflight has invalid HTTP status code 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33660712/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com