javascript - 流明:启用 CORS

标签 javascript cors lumen

我使用 Lumen 构建了一个 API,并希望使用 JavaScript 和 XMLHttpRequest 对象访问它。但是每次我的 PUT、GET、POST 和 DELETE 请求都被转换为 OPTIONS - Request。我看了很多有CORS信息的网站。我使用以下内容构建中间件:

class CORSMiddleware
{
    public function handle($request, \Closure $next)
    {
      $response = null;
      /* Preflight handle */
      if ($request->isMethod('OPTIONS')) {
         $response = new Response();
      } else {
         $response = $next($request);
      }

      $response->header('Access-Control-Allow-Methods', 'OPTIONS, HEAD, GET, POST, PUT, DELETE');
      $response->header('Access-Control-Allow-Headers', $request->header('Access-Control-Request-Headers'));
      $response->header('Access-Control-Allow-Origin', '*');
      return $response;
    }
}

我的客户端代码:

var url = "http://localhost:8000/api/user";
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.open('PUT', url, false);
xmlHttpRequest.send('{"username": "ABC", "password": "ABC","email": "mail@cool.xyz" }');
if (xmlHttpRequest.status == 200) {
  console.log(xmlHttpRequest.responseText);
}

我的请求-GET请求信息:

Host: localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Origin: null
Connection: keep-alive
Cache-Control: max-age=0

我的 GET 请求响应信息:

Access-Control-Allow-Methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8
Date: Sun, 27 Dec 2015 10:36:51 GMT
Host: localhost:8000
x-powered-by: PHP/7.0.0

我的一个PUT请求的请求信息:

Host: localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: PUT
Origin: null
Connection: keep-alive
Cache-Control: max-age=0

我的一个PUT请求的响应信息:

Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8
Date: Sun, 27 Dec 2015 10:36:51 GMT
Host: localhost:8000
x-powered-by: PHP/7.0.0

在预检中没有“Access-Control-Allow-*”-Headers。我不知道为什么;我用我的 lumen-cors-middleware 启用了它。

最佳答案

将以下 header 添加到 public/.htaccess 文件中。

Header set Access-Control-Allow-Origin "*" 
Header set  Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS"
Header set Access-Control-Allow-Credentials "true"

这可以很好地解决跨源问题。

关于javascript - 流明:启用 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34476817/

相关文章:

node.js - 启用 CORS 的服务器不拒绝请求

javascript - NodeJs 请求的资源上不存在 'Access-Control-Allow-Origin' header

laravel-5.4 - 如何在 Lumen/Laravel 中为 REST API 集成 Swagger?

laravel - 在 lumen jwt token 中设置过期时间

javascript - 使用 Chart.js 中的 addData() 方法向折线图添加数据

javascript - 为什么 BigInt(largeNumber) 仍然不精确?

javascript - for of 和 for 循环不同的结果

javascript - CORS plugin/--disable-web-security 如何在浏览器上工作?

javascript - d._children = d.children; 的语法是什么?在 d3.js 中代表什么?

laravel - 方法addEagerConstraints不存在