zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    CORS & OPTIONS

    preflight request

    1. CORS 原理

    CORS跨域的原理实际上是浏览器与服务器通过一些HTTP协议头来做一些约定和限制

    1. OPTIONS 应用场景

    https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

    preflighted requests & simple requests

    https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests

    https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

    https://dev.to/effingkay/cors-preflighted-requests--options-method-3024

    demos

    1. GET & application/json === OPTION

    const getData = (url = ``) => {
        // Default options are marked with *
        return fetch(url, {
            cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
            credentials: "same-origin", // include, same-origin, *omit
            headers: {
                // "user-agent": "Mozilla/4.0 MDN Example",
                "Content-Type": "application/json",
                // "Content-Type": "text/plain",
                // "Content-Type": "text/plain",
            },
            method: "GET", // *GET, POST, PUT, DELETE, etc.
            mode: "cors", // no-cors, cors, *same-origin
            redirect: "follow", // manual, *follow, error
            referrer: "no-referrer", // *client, no-referrer
        })
        .then(response => response.json()) // parses response to JSON
        .then(json => {
            // json
            console.log(`json =`, JSON.stringify(json, null, 4));
            return json;
        })
        .catch(err => console.error(`error =`, err));
    };
    
    getData(`https://cdn.xgqfrms.xyz/json/data.json`);
    
    
    1. GET & text/plain !== OPTION

    
    const getData = (url = ``) => {
        // Default options are marked with *
        return fetch(url, {
            cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
            credentials: "same-origin", // include, same-origin, *omit
            headers: {
                // "user-agent": "Mozilla/4.0 MDN Example",
                // "Content-Type": "application/json",
                "Content-Type": "text/plain",
                // "Content-Type": "text/plain",
            },
            method: "GET", // *GET, POST, PUT, DELETE, etc.
            mode: "cors", // no-cors, cors, *same-origin
            redirect: "follow", // manual, *follow, error
            referrer: "no-referrer", // *client, no-referrer
        })
        .then(response => response.json()) // parses response to JSON
        .then(json => {
            // json
            console.log(`json =`, JSON.stringify(json, null, 4));
            return json;
        })
        .catch(err => console.error(`error =`, err));
    };
    
    getData(`https://cdn.xgqfrms.xyz/json/data.json`);
    
    
    1. POST & application/json === OPTION

    
    const postData = (url = ``, data = {}) => {
        // Default options are marked with *
        return fetch(url, {
            body: JSON.stringify(data), // must match "Content-Type" header
            cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
            credentials: "same-origin", // include, same-origin, *omit
            headers: {
                // "user-agent": "Mozilla/4.0 MDN Example",
                "Content-Type": "application/json",
                // "Content-Type": "text/plain",
                // "Content-Type": "text/plain",
            },
            method: "POST", // *GET, POST, PUT, DELETE, etc.
            mode: "cors", // no-cors, cors, *same-origin
            redirect: "follow", // manual, *follow, error
            referrer: "no-referrer", // *client, no-referrer
        })
        .then(response => response.json()) // parses response to JSON
        .then(json => {
            // json
            console.log(`json =`, JSON.stringify(json, null, 4));
            return json;
        })
        .catch(err => console.error(`error =`, err));
    };
    
    postData(`https://cdn.xgqfrms.xyz/json/data.json`, {});
    
    
    1. POST & application/x-www-form-urlencoded !== OPTION

    
    const postData = (url = ``, data = {}) => {
        // Default options are marked with *
        return fetch(url, {
            body: data, // must match "Content-Type" header
            cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
            credentials: "same-origin", // include, same-origin, *omit
            headers: {
                // "user-agent": "Mozilla/4.0 MDN Example",
                // "Content-Type": "application/json",
                "Content-Type": "application/x-www-form-urlencoded",
                // "Content-Type": "text/plain",
            },
            method: "POST", // *GET, POST, PUT, DELETE, etc.
            mode: "cors", // no-cors, cors, *same-origin
            redirect: "follow", // manual, *follow, error
            referrer: "no-referrer", // *client, no-referrer
        })
        .then(response => response.json()) // parses response to JSON
        .then(json => {
            // json
            console.log(`json =`, JSON.stringify(json, null, 4));
            return json;
        })
        .catch(err => console.error(`error =`, err));
    };
    
    postData(`https://cdn.xgqfrms.xyz/json/data.json`, `key=value`);
    
    

    Flag Counter

    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    fedora 20 install skype
    WebsitePanel(wsp)配置详解(安装指南)
    【转】SQL Server 2008下载 (附注册码)
    SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数
    150 Opening ASCII mode data connection. FTP连接的PASV和PORT方式
    如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证?
    DZ!NT论坛 3.6.711删除用户各种错解决方案
    在虚拟机上安装红帽Linux.5.5.for.x86.服务器版系统(按针对安装oracle 10g作的配置)
    OpenStack Nova 制作 Windows 镜像
    HttpWebRequest访问时,错误:(401)未经授权。
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11938830.html
Copyright © 2011-2022 走看看