CORS基礎要點:關於dataType、contentType、withCredentials

来源:http://www.cnblogs.com/xueming/archive/2016/12/07/cors-base.html
-Advertisement-
Play Games

事實上,面試時我喜歡問跨域,因為多數開發者都知道它並且常用,而我希望能從面試者的回答中知道他在這個問題的深入程度,進一步看看面試者研究問題的思維方式及鑽研精神,然而確實難到了很多人,當然這也不是面試通過的必要條件;這些都是題外話了,呵呵~~~,這裡也不炒冷飯如何實現跨域,也不是分析CORS的原理,因 ...


  事實上,面試時我喜歡問跨域,因為多數開發者都知道它並且常用,而我希望能從面試者的回答中知道他在這個問題的深入程度,進一步看看面試者研究問題的思維方式及鑽研精神,然而確實難到了很多人,當然這也不是面試通過的必要條件;這些都是題外話了,呵呵~~~,這裡也不炒冷飯如何實現跨域,也不是分析CORS的原理,因為谷歌一下就有很多參考資料。

  有三點內容:dataType、contentType、withCredential;既然說是CORS基礎要點,這三點也當然是圍繞著 CORS 來講。

  dataType

  dataType有些人可能會覺得陌生,但說起jquery或者是zepto的ajax請求,就想起來了,使用$.ajax請求時,經常會帶上參數dataType : 'json',如下圖:

  

  dataType屬性是為了表明用什麼格式解析服務端響應的數據,json表示ajax接收服務端響應的數據時解析為JSON格式,但是你會發現有時候即使不設置dataType,也能夠正常解析響應數據,頁面上該顯示的內容依然可以正常顯示,因為框架貼心,zepto在你不設置dataType的時候,預設讀取服務端的響應頭Content-Type,例如zepto把服務端的響應頭ContentType : application/json轉換成dataType : 'json',所以只要跟服務端約定好了,前端開發中可以不需要設置dataType,當然了,設置這個屬性會更讓代碼更健壯。

  所以,dataType只是框架(zepto/jquery等)封裝時為了方便解析而定義的屬性,並非是原生ajax的屬性

  contentType

  嚴格來講是Content-Type,這是http頭裡面的一個屬性,無論是請求頭還是響應頭都可以有這個屬性,但作用並不一樣,另外,zepto的ajax請求配置中可以設置contentType,如下圖,它是用來設置請求頭中的Content-Type;

  

  先說請求頭中的Content-Type,是為了告訴服務端該請求實例的數據格式,一般情況下不需要設置,除非服務端有特殊要求,但如果設置的值超過這三個值application/x-www-form-urlencoded、multipart/form-data、text/plain,CORS跨域請求時會觸發預請求,至於什麼是預請求,這裡不贅述,可以自行查一下百科;

  再看看返回頭中的Content-Type,反過來,是服務端告訴客戶端響應實例的數據格式,瀏覽器也會跟據格式來決定是顯示成網頁、JS、CSS或是下載等等,對於瀏覽器來講,這是必需的屬性。

  withCredentials

  預設情況下,一般瀏覽器的CORS跨域請求都是不會發送cookie等認證信息到服務端的,除非指定了xhr.withCredentials = true,但是只有客戶端單方面的設置了這個值還不行,服務端也需要同意才可以,所以服務端也需要設置好返回頭Access-Control-Allow-Credentials: true;還有一點要註意的,返回頭Access-Control-Allow-Origin的值不能為星號,必須是指定的域,否則cookie等認證信息也是發送不了。

  關於withCredentials,還可以參閱msdn這裡

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景(background)是css中很重要的一部分,也是css的基礎知道之一,現在來回顧css2中5個屬性與css3中新增的3個屬性和2個功能。 CSS2_背景(background)前傳 家族成員 背景(background)家族在css2中由5個主要的背景屬性組成,分別是: 想知道家族五大成員 ...
  • 背景: 自從今年下半年接觸一個基於ReactJS 的手機APP項目。開始瞭解到了Corodva這個神奇的東西。後續自己也自作了一些小的APP放到了應用寶上。8月份開始想做一個博客園APP。於是就私聊博客園團隊申請了博客園API訪問許可權(當然其實應用寶裡面也有博客園APP了。而且用fiddler抓取了 ...
  • 類定義 ES6完整學習阮老師的ECMAScript6入門。 技術一般水平有限,有什麼錯的地方,望大家指正。 以前我們使用ES5標准定義一個構造函數的過程如下: 通常首字母大寫的函數我們稱為構造函數(並不是一種語法約束,只是一種約定俗成的規律),屬性寫在方法裡面,函數寫在原型上面,這樣實例化(new操 ...
  • 1.ECMAScript數據類型 5種簡單數據類型,分別是: Undefined Null Boolean Number String 1種複雜數據類型: Object (1)typeof操作符——檢測給定變數的數據類型 “undefined”——未定義 “booleam”——布爾值 “string ...
  • 1.const聲明一個只讀常量,一旦聲明,常量的值就不能改變 2.const一旦聲明常量,就必須立即初始化,不能留到以後賦值 3.const聲明的常量只在當前作用域內有效 4.const聲明的常量不存在“聲明提前”,只能先聲明後使用 5.const不可重覆聲明 6.const聲明的常量如果保存的是引 ...
  • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } #wrap { position: absolute; ...
  • Lightgallery是一個輕量級的模塊化、響應式的燈箱畫廊,它允許您創建美麗的圖像和視頻畫廊。藉助縮略圖插件的幫助,Lightgallery 允許您創建動畫縮略圖畫廊。 它支持觸摸屏設備上滑動導航以及桌面設備的滑鼠拖動,還允許用戶瀏覽縮略圖和原圖之間通過滑動手指或滑鼠拖動。 ...
  • 之前沒想過定製博客界面,畢竟CSS,HTML什麼的都不懂,不過看了這篇文章分分鐘搞定: 【詳細圖解】一步一步教你自定義博客園(cnblog)界面 我是基於模板BlueSky做了些改動,先看修改前後的效果: 修改前: 修改後: 1先動手!什麼都別管! 在我的博客-管理-設置-頁面定製CSS代碼,只添加 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...