Rumah  >  Soal Jawab  >  teks badan

Bagaimanakah Nginx melakukan konfigurasi silang domain supaya ia boleh menggunakan kaedah permintaan DELETE dan PUT?

Penerangan latar belakang

Bersedia untuk mereka bentuk Restful Api berdasarkan Nginx, yang memerlukan kaedah permintaan DELETE dan PUT, dan menyokong akses merentas domain Pada masa ini, terdapat dua domain ujian hos maya tempatan. http://api.zlzkj.comhttp://127.0.0.1/api/web

Penerangan masalah

nginx.conf konfigurasi merentas domain berkaitan

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;

permintaan ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
    Resetful Api设计
    <script src="http://c.csdnimg.cn/public/common/libs/jquery/jquery-1.11.1.min.js"></script>
    <script>
        $.ajax({
            url: 'http://api.zlzkj.com/admins/1',
            type: 'DELETE',
            dataType: 'JSON'
        });
    </script>
</body>
</html>

Kaedah permintaan DELETE boleh digunakan seperti biasa dalam

http://api.zlzkj.com/下访问http://api.zlzkj.com/admins/1

Dalam

, anda akan mendapati Kaedah Permintaan ditapis ke dalam mod OPTINOS Lazimnya ia mestilah mod PADAM, yang menyebabkan Kaedah 405 pelayan Tidak Dibenarkanhttp://127.0.0.1/api/web/下访问http://api.zlzkj.com/admins/1.

Saya juga telah menemui beberapa artikel berkaitan di atas dinding Nampaknya selepas Nginx mereka dikonfigurasikan seperti ini, kaedah permintaan DELETE boleh digunakan secara normal di seluruh domain Namun, di pihak saya, ia hanya boleh digunakan dalam domain yang sama. Kaedah Permintaan akan ditapis ke dalam OPTINOS merentas domain, ia menyebabkan ralat 405.

Adakah masalah dengan versi Nginx? Masalah konfigurasi persekitaran? Saya harap anda dapat memberi saya sedikit pandangan, terima kasih.

大家讲道理大家讲道理2713 hari yang lalu1335

membalas semua(2)saya akan balas

  • 某草草

    某草草2017-05-16 17:17:58

    PermintaanOPTIONS adalah istimewa Kaedah ini digunakan untuk meminta pelayan memberitahu fungsi dan kaedah lain yang disokongnya. OPTIONS请求比较特殊,该方法用于请求服务器告知其支持哪些其他的功能和方法。
    在跨域的时候,浏览器会自动发起一个OPTIONS请求。
    当你的服务器响应了OPTIONS请求的时候,会有类似如下的响应:

    Allow → GET,HEAD,POST,OPTIONS,TRACE
    Cache-Control → max-age=86400
    Connection → keep-alive
    Content-Encoding → gzip
    Content-Length → 20
    Content-Type → text/html
    Date → Thu, 30 Jun 2016 04:00:24 GMT
    Expires → Fri, 01 Jul 2016 04:00:24 GMT
    Server → bfe/1.0.8.14
    Vary → Accept-Encoding,User-Agent

    如果你的服务器没有处理响应OPTIONS,会有如下的响应:

    Connection → keep-alive
    Content-Encoding → gzip
    Content-Type → text/html
    Date → Thu, 30 Jun 2016 04:02:35 GMT
    Server → nginx/1.4.6 (Ubuntu)
    Transfer-Encoding → chunked

    可以看出,缺少了Allow响应头
    所以,你应该有处理这个OPTIONSApabila merentas domain, penyemak imbas akan secara automatik memulakan permintaan OPTIONS.
    Apabila pelayan anda membalas permintaan OPTIONS, akan ada respons yang serupa dengan yang berikut:

    if ($request_method = 'OPTIONS') { 
    add_header Access-Control-Allow-Origin *; 
    add_header Access-Control-Allow-Credentials true; 
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; 
    add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; 
    return 204; 
    }
    🎜Jika pelayan anda tidak memproses respons PILIHAN, akan ada respons berikut: 🎜 rrreee 🎜Dapat dilihat bahawa pengepala respons Allow tiada🎜Jadi, anda sepatutnya mempunyai perkhidmatan untuk mengendalikan permintaan OPTIONS ini boleh dilakukan secara langsung dengan nginx konfigurasi, tambah Inilah konfigurasi berikut: 🎜 rrreee

    balas
    0
  • PHPz

    PHPz2017-05-16 17:17:58

    $.ajax({
        url: 'http://api.zlzkj.com/admins/1',
        type: 'DELETE',
        dataType: 'JSON',
        crossDomain:true
    });

    balas
    0
  • Batalbalas