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 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    listview删除item
    标准listview加图标布局
    android事件消费机制,从外传到里面,里面具有优先选择权,如果里面的不需要,则传递给外面一层消费
    listview 按最新数据展示
    给listview添加数据,添加数据之后即刻显示出来,并把数据放在listview列表的最前面
    EditText限制输入长度和限定输入数字
    josn解析常见的几种方法
    bnu Robots on a grid
    hdu 1348 Wall
    hdu poj Oulipo
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11938830.html
Copyright © 2011-2022 走看看