事实上,面试时我喜欢问跨域,因为多数开发者都知道它并且常用,而我希望能从面试者的回答中知道他在这个问题的深入程度,进一步看看面试者研究问题的思维方式及钻研精神,然而确实难到了很多人,当然这也不是面试通过的必要条件;这些都是题外话了,呵呵~~~,这里也不炒冷饭如何实现跨域,也不是分析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这里

  

CORS基础要点:关于dataType、contentType、withCredentials的更多相关文章

  1. JUnit单元测试基础要点

    JUnit单元测试基础要点 1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确. 2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的. 3.单元测 ...

  2. Objective-C 2.0 基础要点归纳

    本文的阅读基本条件: 具备C/C++基础知识,了解面向对象特征 阅读过<Objective-C 2.0 程序设计(第二版)>.<Objective-C 程序设计 第6版>或相关 ...

  3. java基础要点

    Java语言是现在比较常用的编程语言,因为Java语言可以编写桌用程序,也可以编写web程序,还能编写嵌入式程序.这是由于相比脚本语言,Java 的运行速度要快.而对于底层语言,Java与平台无关,可 ...

  4. c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系

    1.      引用本身是有指针实现的:引用为只读指针 例子: int d=123; int& e=d;    //引用 int * const e=d; //只读指针,e指向d,不可修改e指 ...

  5. web基础要点记录

    最近公司项目做完了,不怎么忙,翻看了一些基础的资料,文章.就做了个简单的记录. 1.Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入 CSS 属性  -we ...

  6. java基础要点总结

    无意间看到youtube上的一组java基础的视频,顺便做了笔记,整理如下: 出处: 作者:Edward Shi 视频链接:https://www.youtube.com/watch?v=IQE9jH ...

  7. HTML基础要点归纳

    一.开发环境 常用的HTML编辑器有Sublime Text.Hbuild.Dreamweare.以及vs code.pycharm等都可以.我目前在用的就是Sublime text3和Hbuild两 ...

  8. c++复习基础要点02 虚函数与模板 与static inline是否共存

    1.      虚函数能否定义为模板函数 当一个类有虚函数时,它一定有一个虚表,用来纪录每个虚函数的实际地址.这也就是说这个虚表的大小是在编译期就确定了的.有多少个虚函数,虚表就纪录几个.       ...

  9. c\c++复习基础要点16----枚举类型

    枚举类型: 语法格式: enum 枚举类型名 {变量值列表}; 例如: enum  Weekday{sun, mon, tue, wed, thu, fri, set}; 声明了枚举类型后,就可以定义 ...

随机推荐

  1. .Net使用Redis详解之ServiceStack.Redis(七)

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  2. Kafka 文档用例

    1.2 用例 以下是一些Kafka 常见的用例.关于功能方面的一些概念,可以看这篇博客:http://engineering.linkedin.com/distributed-systems/log- ...

  3. 带搜索的ComboBox

    带搜索的ComboBox就是给ComboBox一个依赖属性的ItemSource,然后通过数据源中是否包含要查询的值,重新给ComboBox绑定数据源. public class EditComboB ...

  4. C可变参数的函数

    我们实现一个简单的printf函数(可变参数) #include <stdio.h> #include <stdarg.h> void myprintf(const char ...

  5. Dojo前端开发框架与jQuery前端开发框架,对比分析总结

    最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD.相同的选择器 引擎Sizzle等.作为业界知名的Jav ...

  6. 深入理解CSS过渡transition

    × 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...

  7. 用VS Code写Python程序

    安装python 常见的Linux发行版本中已经安装了python,而且可能不止一个版本,以Ubuntu14.04为例,预装的python有2个版本,分别是2.7.6和3.4.3,python2和py ...

  8. 以下C#程序的输出结果是( )。

    以下程序的输出结果是( ). using System; namespace HoverTreeTikuConsole { class Program { static void Main(strin ...

  9. Devexpress GridView 列中显示图片

    首先将图片添加到ImageList中 添加GridView中Column void gridView1_CustomUnboundColumnData(object sender, DevExpres ...

  10. Servlet3.0的异步

    servlet之前的操作同时同步的,就是按照这样的一个流程来走的: 1.请求根据一个路径路由到一个servlet中, 2.servlet获取一系列的参数 3.执行一系列的逻辑(花费时间所占的比重也更大 ...