GET 请求
协议和实现是两件事情. ex: GET 请求同样可以 xhr.send(data)
.
jQuery 在 ajax 模块, 在实现上做了统一:
// ...
rnoContent = /^(?:GET|HEAD)$/
// ...
s.type = options.method || options.type || s.method || s.type;
s.type = s.type.toUpperCase();
// Determine if request has content
s.hasContent = !rnoContent.test( s.type );
// Do send the request (this may raise an exception)
xhr.send( options.hasContent && options.data || null );
而 axios 保留浏览器默认行为:
// https://github.com/axios/axios/blob/master/lib/adapters/xhr.js#L172
request.send(requestData);
CORS(Cross-Origin Resource Sharing)
跨域资源共享定义了一组 http 头字段信息,允许服务器声明哪些源站有权限访问哪些资源。同时要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法,浏览器必须要首先使用 OPTIONS 方法发起一个预校验请求(preflight request),从而获知服务器端是否允许跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
状态码 204
HTTP协议中 204 No Content 成功状态响应码表示目前请求成功,但客户端不需要更新其现有页面。204 响应默认是可以被缓存的。在响应中需要包含头信息 ETag。
因为项目中使用 axios 库, 在跟一个问题时, 发现 https://github.com/axios/axios/issues/201. 原来 IE 在内容为空时, 有返回 1224 的情况.
ps: 不过在 master 分支上已经看不到相关代码了.