跨域請求 fetch 實現
1.CORS 的分類
分為兩大類:簡單的請求;帶有preflight預請求的CORS。兩類請求的區分標準如下:
簡單請求
某些請求不會觸發 CORS 預檢請求。本文稱這樣的請求為“簡單請求”。若請求滿足所有下述條件,則該請求可視為“簡單請求”:
1. 使用下列方法之一: GET HEAD POST
2. Fetch 規範定義了對 CORS 安全的首部欄位集合,不得人為設定該集合之外的其他首部欄位。該集合為: Accept Accept-Language Content-Language Content-Type (需要注意額外的限制) DPR Downlink Save-Data Viewport-Width Width
3. Content-Type 的值屬於下列之一: application/x-www-form-urlencoded multipart/form-data text/plain
剩下的都是,帶有preflight的CORS。帶有preflight的CORS ,瀏覽器會先發出一個 OPTIONS請求,伺服器在響應裡寫入是否允許該域名發起訪問,在response的header裡面加入了Access-Control-Allow-Origin,Access-Contral-Allow-Methods,Access-Contraol-Allow-Headers,Access-Control-Max-Age,這幾個欄位(各個欄位詳細意義參見
2.進行帶有身份憑證的CORS 請求
預設情況下的跨域請求都是不會把cookie傳送給伺服器的,在需要傳送的情況下,如果是xhr,那麼需要設定xhr.withCredentials = true
,如果是採用fetch獲取的話,那麼需要在request裡面設定 credentials:'include',
但是如果伺服器在預請求的時候沒返回Access-Control-Allow-Crenditials:true
的話,那麼在實際請求的時候,cookie是不會被髮送給伺服器端的,要特別注意對於簡單的get請求,不會有預請求的過程,那麼在實際請求的時候,如果伺服器沒有返回Access-Control-Allow-Crenditials:true
3.fetch的配置
import {
baseUrl
} from '../../config/env.config.js'
import {formDataToJson} from '../../utils/form.js';
import * as es6Promise from 'es6-promise'
import 'isomorphic-fetch'
es6Promise.polyfill();
export default async(type = 'GET', url = '', data = {}) => {
type = type.toUpperCase();
url = baseUrl + url;
if (type == 'GET') {
let dataStr = ''; //資料拼接字串
Object.keys(data).forEach(key => {
dataStr += key + '=' + data[key] + '&';
})
if (dataStr !== '') {
dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
url = url + '?' + dataStr;
}
}
if (type == 'DELETE') {
url = url + "/" + data.id;
}
let requestConfig = {
credentials: 'include',
method: type,
headers: {
'Accept': 'application/json',
'Content-Type' : 'application/json'
},
mode: "cors",
cache: "force-cache"
}
if (type == 'POST') {
if (window.FormData && data instanceof FormData) {
Object.defineProperty(requestConfig, 'body', {
value: formDataToJson(data)
})
} else {
Object.defineProperty(requestConfig, 'body', {
value: JSON.stringify(data)
})
}
}
try {
var response = await fetch(url, requestConfig);
var responseJson = await response.json();
} catch (error) {
throw new Error(error)
}
return responseJson
}
相關推薦
跨域請求:Fetch實現跨域請求與POST方式引數提交
一、要實現跨域,首先需要理解什麼叫做跨域。 跨域是指,不同域名之間相互訪問。 例如 :我的電腦上有2個伺服器 192.168.0.11 192.168.0.12 如果第一個伺服器上的頁面要訪問第二個伺服器,就叫做跨域 或者http://www.baidu.com
跨域請求 fetch 實現
1.CORS 的分類 分為兩大類:簡單的請求;帶有preflight預請求的CORS。兩類請求的區分標準如下: 簡單請求 某些請求不會觸發 CORS 預檢請求。本文稱這樣的請求為“簡單請求”。若請求滿足所有下述條件,則該請求可視為“簡單請求”:
ajax跨域請求簡單實現Java後臺
因為官網有一個合作加盟的功能,需要一個表單錄入,但是官網除了這個功能,都是靜態頁面,所以就準備寫一個ajax跨域,儲存到之前公司專案的後臺管理系統去,第一次用ajax跨域,網上很多參考。這也是我的第一篇博文,準備以後養成這個習慣,以備後期參考。。。。。 通過自己N久找程式碼
vue.js 跨域請求 fetch / axios
跨域請求配置 在vue專案下 找到 config > index.js 檔案;修改 index.js 檔案下的 proxyTable 物件的內容;如下 proxyTable: { '/api': { //
利用jsonp實現跨域請求
get p地址 doc ajax請求 -s tar 原理 安全策略 都是 同源策略,它是由Netscape提出的一個著名的安全策略。現在所有支持JavaScript 的瀏覽器都會使用這個策略。所謂同源是指,域名,協議,端口相同。當一個瀏覽器的兩個tab頁中分別打開來 百
ajax獲取json數據及實現跨域請求
cgi size 域名 3.2 方便 nap 不清楚 anti dex 最近想練習一下ajax獲取json數據 , 首先上網找一些在線的可用來測試的接口. -----------------------------------------------------這裏是接口分
【原】fetch跨域請求附帶cookie(credentials)
allow src ssi ann oct o-c ech .com 頭部 HTTP訪問控制 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS 解決跨域的方式有很多種,本文介紹“跨域請
Java實現CORS跨域請求
先來 pty contain type 資源共享 服務端 header req options 問題 使用前後端分離模式開發項目時,往往會遇到這樣一個問題 -- 無法跨域獲取服務端數據 這是由於瀏覽器的同源策略導致的,目的是為了安全。在前後端分離開發模式備受青睞的今天,前
[轉] 利用CORS實現跨域請求
src 流程圖 exp 否則 expose 前端 eof 目前 star [From] http://newhtml.net/using-cors/ 跨域請求一直是網頁編程中的一個難題,在過去,絕大多數人都傾向於使用JSONP來解決這一問題。不過現在,我們可以考慮一下
nginx 實現 ajax 跨域請求
ini syn methods acc -m www eth tran 響應 原文:http://www.nginx.cn/4314.html AJAX從一個域請求另一個域會有跨域的問題。那麽如何在nginx上實現ajax跨域請求呢?要在nginx上啟用跨域
WebAPI Ajax 跨域請求解決方法(CORS實現)
custom XML header 就會 情況 取數 -o cross serve 概述 ASP.NET Web API 的好用使用過的都知道,沒有復雜的配置文件,一個簡單的ApiController加上需要的Action就能工作。 但是在使用API的時候總會遇到跨
jsonp _____跨域請求實現
ont pan text company () quest function status cross 請求如下: $.ajax({ type: "GET", async:false, url: "http://127.0.0.1:8080/Cross-sit
vue-cli項目本地代理實現跨域請求
con 跨域 請求 AR url 本地 dex ams gin 使用 Vue-cli 創建的項目,開發地址是 localhost:8080,需要訪問非本機上的接口http://10.1.0.34:8000/queryRole。不同域名之間的訪問,需要跨域才能正確請求。跨
八種方式實現跨域請求
防範 erro create ati brush col html5新特性 ole als 瀏覽器的同源策略 ? 提到跨域不能不先說一下”同源策略”。 ? 何為同源?只有當協議、端口、和域名都相同的頁面,則兩個頁面具有相同的源。只要網站的 協議名protocol、 主
WebAPI實現跨域請求
一、跨域問題的由來 目前專案實現前後端分離,所以就會那麼此時前端和後端分別在不同的伺服器上,此時就會涉及到跨域問題。再具體說明一下。 1.前後端未分離:原來我們的積分系統採用MVC框架,整個系統的前端以及後端邏輯都在一個解決方案中,此時我們稱之為前後端沒有分離。
利用原生js實現ajax跨域請求資料
首先,頁面中不需要引入任何的檔案。 1、前臺html頁面 <script> //定義一個ajax var $ = { ajax:function(option){ var url = option.url; var ca
axios實現跨域請求
在使用vue.js進行開發,我們會遇到跨域請求的情況,這裡記錄下自己所遇到的情況。 使用的是目前主流的axios進行請求,首先開啟config資料夾下的index檔案,在proxyTable裡面新增程式碼 proxyTable: { '/api': { t
Vue前端服務代理實現跨域請求資料。
開發中請求真實伺服器資料,配置伺服器代理實現跨域。 vue-cli + webpack 構建的專案 再 ./config/index.js 檔案中配置 proxyTable: { '/api':{ target: 'http://請求的伺服器地址',
Vue實現跨域請求
實現跨域請求有兩種方式: 1、fetch (1)在App.vue中使用created方法建立fetch,將域名及方法等建立,如下圖 (2)在config配置檔案中的index.js中的跨域區域中寫入如下程式碼: (3)完善資訊,將介面相應的需求補充完整
cors實現請求跨域請求
簡介 CORS:全稱"跨域資源共享"(Cross-origin resource sharing)。 CORS需要瀏覽器和伺服器同時支援,才可以實現跨域請求,目前幾乎所有瀏覽器都支援CORS,IE則不能低於IE10。CORS的整個過程都由瀏覽器自動完成,前端無需做任何設定