Heim > Fragen und Antworten > Hauptteil
P粉5026087992023-08-25 17:38:47
在我的类似案例中,Angular 前端和 Php 后端帮助了下面的代码。首先我发送一个标头:
header("Access-Control-Allow-Origin: http://localhost:4200"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: POST, DELETE, OPTIONS"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
在他们之后,我可以忽略选项请求:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { return 0; }
这种方法帮助我处理 Angular 中的“post”和“delete”嵌入请求方法。
P粉3168908842023-08-25 16:25:07
好吧,我最近遇到了类似的问题,我只在后端解决了所有问题,没有 .htaccess 的东西。
当浏览器发送跨服务器请求时,它首先发送一个 OPTIONS 请求以确保其有效并且可以发送“真实”请求。 当它从 OPTIONS 获得正确且有效的响应后,才会发送“真正的”请求。
现在,对于后端的两个请求,您需要确保返回正确的标头:content-type、allow-origin、allow-headers 等...
确保在后端的 OPTIONS 请求中,应用程序返回标头并返回响应,而不是继续应用程序的完整流程。
在“真实”请求中,您应该返回正确的标头和常规响应正文。
示例:
//The Response object $res = $app->response; $res->headers->set('Content-Type', 'application/json'); $res->headers->set('Access-Control-Allow-Origin', 'http://example.com'); $res->headers->set('Access-Control-Allow-Credentials', 'true'); $res->headers->set('Access-Control-Max-Age', '60'); $res->headers->set('Access-Control-Allow-Headers', 'AccountKey,x-requested-with, Content-Type, origin, authorization, accept, client-security-token, host, date, cookie, cookie2'); $res->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); if ( ! $req->isOptions()) { // this continues the normal flow of the app, and will return the proper body $this->next->call(); } else { //stops the app, and sends the response return $res; }
要记住的事情:
如果您使用:“Access-Control-Allow-Credentials”= true 确保“Access-Control-Allow-Origin”不是“*”,它必须设置正确的域! (这里流了很多血:/)
定义您将在“Access-Control-Allow-Headers”中获得的允许标头 如果您不定义它们,请求将失败