javascript 405方式不允許 - 對預檢請求的響應不會通過訪問控制檢查




7 Answers

您遇到了CORS問題。

有幾種方法可以解決這個問題。

  1. 關閉CORS。 例如: 如何在鉻中關閉cors
  2. 為您的瀏覽器使用插件
  3. 使用諸如nginx之類的代理。 如何設置的例子

更詳細地說,您正嘗試從本地主機訪問api.serverurl.com。 這是跨域請求的確切定義。

通過關閉它只是為了完成您的工作(好吧,如果您訪問其他網站並將可用的路由器踢出去,那麼可能會導致安全性降低),您可以使用代理,讓瀏覽器認為所有請求都來自本地主機真的,你有本地服務器,然後調用遠程服務器。

所以api.serverurl.com可能會成為localhost:8000 / api,並且您的本地nginx或其他代理將發送到正確的目標。

allowed原因 http

我收到此錯誤使用ngResource調用亞馬遜網絡服務上的REST API:

XMLHttpRequest無法加載http://server.apiurl.com:8000/s/login?login=facebook 。 對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在“訪問控制 - 允許來源”標頭。 因此不允許Origin'http:// localhost '訪問。 錯誤405

服務:

socialMarkt.factory('loginService', ['$resource', function($resource){    
    var apiAddress = "http://server.apiurl.com:8000/s/login/";
    return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
                getUser: {method:'POST'}
            });
}]);

控制器:

[...]
loginService.getUser(JSON.stringify(fbObj)),
                function(data){
                    console.log(data);
                },
                function(result) {
                    console.error('Error', result.status);
                }
[...]

我使用chrome,我不知道還有什麼可以解決這個問題。 我甚至將服務器配置為接受來自origin localhost頭文件




在AspNetCore web api中,通過添加“Microsoft.AspNetCore.Cors”(版本1.1.1)並在Startup.cs中添加以下更改,可以解決此問題。

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddCors(options =>
    {
          options.AddPolicy("AllowAllHeaders",
                builder =>
            {
                    builder.AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
    });
    .
    .
    .
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{


    // Shows UseCors with named policy.
    app.UseCors("AllowAllHeaders");
    .
    .
    .
}

並在控制器上放置[EnableCors("AllowAllHeaders")]







如果你偶然使用IIS服務器。 您可以在HTTP請求標題選項中設置以下標題。

Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: 'HEAD, GET, POST, PUT, PATCH, DELETE'
Access-Control-Allow-Headers: 'Origin, Content-Type, X-Auth-Token';

與這個所有職位,得到等,將工作正常。




在我的Apache VirtualHost配置文件中,我添加了以下幾行:

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]



當DNS服務器設置為8.8.8.8(google's)時,我遇到了這個問題。 其實,問題出在路由器上,我的應用程序試圖通過谷歌連接到服務器,而不是本地(針對我的具體情況)。 我已經刪除了8.8.8.8,這解決了這個問題。 我知道CORS設置解決了這個問題,但也許有人會和我一樣遇到麻煩




在PHP中,您可以添加標題:

<?php
header ("Access-Control-Allow-Origin: *");
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
header ("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
header ("Access-Control-Allow-Headers: *");
...



Related

javascript ajax http cors http-status-code-405