get请求
get请求的查询字符串必须使用encordURIComponent编码
post提交
默认情况下,对服务器而言,表单提交和post提交是不一样的,使用xhr模拟表单提交,第一步,将content-type头部设置
为application/x-www-formurlencoded。第二步,
注意:
POST请求相比GET请求要占用更多资源。从性能方面说,发送相同数量的数据, GET 请求比 POST 请求要快两倍。
XMLHttpRequest Level 2
FormData类型
需求中很多要对表单数据进行序列化,,因此XMLHttpRequest Level 2中新增了FormData类型,该类型用于
表单的序列化,也便于创建和表单类似格式的数据,然后通过xhr来发送,例如,let data = new FormData;
data.append("name", "zs");
使用 FormData 的另一个方便之处是不再需要给 XHR 对象显式设置任何请求头部了。XHR 对象能 够识别作为
FormData 实例传入的数据类型并自动配置相应的头部。
timeout
给xhr添加timeout属性,用于表示发送请求后,如果超过这个时间,则中断请求,这个时候readyState依然会变为4,
也会触发onreadystatechange事件处理程序,不过这个时候访问status属性会出错,因此,建议将检查status的
代码放入try catch中。
overrideMimeType
跨域资源共享
跨源资源共享(CORS,Cross-Origin Resource Sharing)定义了浏览器与服务器如何实现跨源通信。
CORS 背后的基本思路就是使用自定义的 HTTP 头部允许浏览器和服务器相互了解,以确实请求或响应 应该成功还是失败。
对于get和post这种简单的请求,没有自定义头部,而且请求体是text/plain类型,这样的请求在发送时会有一个额外的头部
叫Origin(应该是浏览器自己处理的),Origin头部包含发送请求的页面的源(协议,域名,端口号),Origin的一个例子,
Origin: http://www.nczonline.net。如果服务器决定响应,那么服务器应该发送Access-Control-Allow-Origin,
如果服务器没有这个头部,或者有但是源不匹配,则表示服务器不会处理这个请求。无论是请求还是响应都不会包含cookie信息
预检请求(preflighted request)
凭据请求
如果请求头里面带了凭据,但是响应头里面没有Access-Control-Allow-Credentials:true,那么浏览器是不会把响应
(responseText是空字符串,status是0,onError()被调用)交给js。服务器也可以在预检请求中返回Access-Control-Allow-Credentials
这个请求头,表示这个源可以发送凭据请求