本文作者: jsweibo
本文链接: https://jsweibo.github.io/2020/01/27/JavaScript%E4%B8%AD%E7%9A%84XMLHttpRequest/
摘要
本文主要讲述了:
- 实例属性
- 原型方法
正文
实例属性
responseType
用于指定 HTTP 响应的类型
浏览器会根据responseType的值来尝试解析response
注意:如果服务器端实际返回的数据类型无法被成功解析,则XMLHttpRequest的response属性将变为null
取值范围:
- 空字符串,等效于
text,默认值 arraybufferblobjsontext
原型方法
setRequestHeader
给XMLHttpRequest实例设置网络请求头
注意:
XMLHttpRequest.prototype.setRequestHeader()必须在XMLHttpRequest.prototype.open()之后,XMLHttpRequest.prototype.send()之前调用- 出于安全原因,部分请求头只能由用户代理控制,而无法通过
XMLHttpRequest.prototype.setRequestHeader()添加,例如:Cookie - 若多次添加相同的请求头,则最后所有的值会以
,作为间隔合并到一起 - 若未使用此方法设置
Accept请求头,则当XMLHttpRequest.prototype.send()被调用时,Accept请求头的值将变为*/*
示例:
输入:
a.example.com/js/index.js
1 | let xhr = new XMLHttpRequest(); |
输出:
1 | Accept: */* |
若为 Ajax 跨源请求且设置了自定义请求头,则此请求属于非简单请求。
浏览器会:
- 在发起正式请求之前先发起 CORS 预请求,
Access-Control-Request-Method请求头的值为请求方法,Access-Control-Request-Headers请求头中必须包含自定义请求头的名称 - 若 CORS 预请求成功(根据 HTTP 状态码规范应该返回
204),浏览器会判断请求方法是否存在于Access-Control-Allow-Methods响应头中,自定义请求头是否存在于Access-Control-Allow-Headers响应头中 - 若都存在,浏览器会发起正式请求
注意:GET、POST、HEAD为安全请求方法,只有非安全请求方法才需要出现在Access-Control-Allow-Methods中,例如:PUT、DELETE
示例:
nginx.conf
1 | server { |
a.example.com/js/index.js
1 | let xhr = new XMLHttpRequest(); |
参考资料
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2020/01/27/JavaScript%E4%B8%AD%E7%9A%84XMLHttpRequest/
本文对你有帮助?请支持我
- 本文链接: https://jsweibo.github.io/2020/01/27/JavaScript%E4%B8%AD%E7%9A%84XMLHttpRequest/
- 版权声明: 除非另有说明,否则本网站上的内容根据署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。