http 笔记

http虽然内容简单, 容易理解, 但是内容十分庞大, 涉及到现在通信的方方面面, 我打算花点时间陆陆续续的把我接触到的http的相关部分整理出来, 这里作为一个入口页, 后续持续补充.

# method

OPTIONS请求是浏览器在满足一定条件的时候自动发送的请求, 一般来说开发者很少手动去使用这个, 作用是在发送真正的请求之前使用这个「预检」请求去先查询服务端支持的请求方式,确认接下来要发送的请求是否是服务器支持的。

满足什么条件才会发送这个请求?

  1. CORS(请求跨域), 即请求的协议-域名-端口这三者有任何一个和当前所处的页面不一致时就是CORS
  2. 请求的类型不是「简单请求」,「简单请求」即同时满足下面两个条件的请求 1.1. 请求方法是HEAD, GET或者POST其中之一 1.2. Requese-Header不能出现以下5个以外的字段:Accept, Accept-Language, Content-Language, Last-Event-IDContent-Type(Content-Type只能使用application/x-www-form-urlencoded, multipart/form-datatext/plain其中之一, 现在常用的application/json不在可选里面)

以上两个条件任何一个不满足, 浏览器就会在正式请求前先发送一个OPTIONS请求, 同时浏览器也有一个缓存机制, 通过识别响应头的Access-Control-Max-Age字段(单位是s)来缓存本次「预检」的结果, 在到期前不会再发送OPTIONS请求, 可以一定程度节约网络请求.如果服务端不支持这个OPTIONS请求(可能是请求方法或者域名之类的不满足要求), 那么「预检」失败, XMLHttpRequest会抛出错误onerror

示例:

CORS的请求相对于同域的请求来说有一些特别的字段

请求头中会多出如下跨域字段, 例如:

响应头中都会多出一些跨域特有的字段, 例如

# 缓存控制策略梳理(TODO)

# SSL/TLS

# Content-Type

关于Content-Type

# 参考