我正在尝试在 Chrome 中测试的 Ionic 应用程序中的 Angular 服务内进行跨域 Ajax 调用。我尝试POST
在我的 API 上执行,但 nginx 一直拒绝我的OPTIONS
。
XMLHttpRequest cannot load http://wss.dev:8080/api/checkin. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 405.
我尝试了不同的配置,但似乎都不起作用。
我的配置如下:
server {
listen *:8080;
server_name wss.dev www.wss.dev;
client_max_body_size 200m;
index index.html index.htm index.php;
access_log /var/log/nginx/wss.dev.access.log;
error_log /var/log/nginx/wss.dev.error.log;
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'OPTIONS, GET, POST, PUT, DELETE' ;
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With,XMLHttpRequest';
location ~ .php$ {
root /var/www/public;
try_files $uri $uri/ /index.php /index.php$is_args$args$is_args$args;
index index.html index.htm index.php;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param APPLICATION_ENV dev;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
}
location / {
root /var/www/public;
try_files $uri $uri/ index.php /index.php$is_args$args;
}
sendfile off;
}
我尝试过类似这个例子: https://michielkalkman.com/snippets/nginx-cors-open-configuration.html
我尝试了不同的配置,并尝试改变我的所有角度,但没有任何效果......
答案1
没有响应可能是由类似这样的配置导致的:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$ ) {
return 444;
}
这意味着 nginx 将在没有正确响应的情况下关闭连接,这就是为什么调试如此困难的原因。
在您的配置中搜索 444 返回代码。如果您发现类似上述内容,请将其添加OPTIONS
到列表中)。
答案2
您是否尝试从本地开发箱发帖?Chrome 有一个错误不支持localhost
CORS 请求,将其更改为“mylocalbox.dev”之类的内容就可以了。