Keep

HTTP 协议相关积累

8/14/2018, 4:30:00 AM 2 min read

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 分支上已经看不到相关代码了.

Tag:
Web

@read2025, 生活在北京(北漂),程序员,宅,喜欢动漫。"年轻骑士骑马出城,不曾见过绝望堡下森森骸骨,就以为自己可以快意屠龙拯救公主。"