文章目录
HTTP
Header(消息头)
定义:允许客户端和服务器通过 HTTP 请求(request)或者响应(response)传递附加信息。一个 HTTP 标头由它的名称(不区分大小写)后跟随一个冒号(:)
HTTP 消息头支持自定义, 自定义的专用消息头一般会添加’X-'前缀。
项目中常用的 Header
key | value | 描述 |
---|---|---|
content-type | application/json (以json格式传递数据) application/x-www-form-urlencoded (以键值对形式传递数据) multipart/form-data (常用于文件上传) | 请求体类型 |
access_token | 口令 | |
web_code | 防重入 | |
Authorization | Basice base64 编码的(用户名:密码) | 认证信息,在获取日志内容和下载日志的接口中需要传入 |
Security-Host | x.x.x.x | 指定服务 IP,在分片上传的时候用到 |
X-Requested-With | XMLHttpRequest | 表示 ajax 请求 |
Access-Control-Allow-Origin
指定了该响应的资源是否被允许与给定的来源(origin)共享
# 允许任意来源的请求代码都具有访问资源的权限
Access-Control-Allow-Origin: *
# 指定一个来源(只能指定一个)
Access-Control-Allow-Origin: http://www.example.com
# 指定来源为“null”
Access-Control-Allow-Origin: null
Connection
决定当前的事务完成后,是否会关闭网络连接
指令 | 描述 |
---|---|
keep-alive | 保持连接 |
close | 关闭连接 |
Accept-Encoding
会将客户端能够理解的内容编码方式——通常是某种压缩算法——进行通知(给服务端)
指令 | 描述 |
---|---|
gzip | 表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及 32 位 CRC 校验的编码方式 |
compress | 采用 Lempel-Ziv-Welch (LZW) 压缩算法 |
deflate | 采用 zlib 结构和 deflate 压缩算法 |
br | 采用 Brotli 算法的编码方式 |
idetity | 服务器可以返回未压缩的响应 |
* | 匹配其他任意未在该请求头字段中列出的编码方式。假如该请求头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序。 |
;q= | 值代表优先顺序,用相对质量价值 表示,又称为权重。 |
示例:
Accept-Encoding: gzip
Accept-Encoding: gzip, compress, br
Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
状态码
由 3 位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。相应类别由以下五种:
状态码 | 类别 | 描述 |
---|---|---|
1xx | Informational(信息状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
其中具有代表性的 19 个状态码如下:
状态码 | 类别 | 描述 |
---|---|---|
200 | OK | 请求成功 |
204 | No Content | 服务器成功处理,但未返回内容 |
206 | Partial Content | 是对资源某一部分的请求 |
301 | Moved Permanently | 永久性重定向 |
302 | Found | 临时性重定向 |
303 | See Other | 查看其它地址 |
304 | Not Modified | 资源未被修改 |
307 | Temporary Redirect | 临时性重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法找到请求的资源 |
405 | Method Not Allowed | 服务器不支持请求方法 |
408 | Request Timeout | 服务器没有在规定时间内完成请求 |
500 | Internal Server Error | 服务器内部错误 |
501 | Not Implemented | 服务器不支持请求的某个功能 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应 |
503 | Service Unavailable | 由于维护或者负载过重,服务器当前无法处理请求 |
常见请求方法
方法 | 描述 |
---|---|
GET | 从服务器获取指定资源 |
POST | 向服务器发送数据,一般用于提交表单 |
PUT | 向服务器更新资源 |
DELETE | 从服务器删除资源 |
缓存
请求头
协议头 | 说明 | 示例 |
---|---|---|
Cache-Control | 用来指定当前的请求/回复中的,是否使用缓存机制。 | Cache-Control: no-cache |
Pragma | 与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生 | Pragma: no-cache |
If-Match | 仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要用于像 PUT 这样的方法中,仅当从用户上次更新某个资源后,该资源未被修改的情况下,才更新该资源。 | If-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd” |
If-None-Match | 允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified ),参考 超文本传输协议 的实体标记 | If-None-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd” |
If-Modified-Since | 允许在对应的资源未被修改的情况下返回304未修改 | If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT |
If-Unmodified-Since | 仅当该实体自某个特定时间以来未被修改的情况下,才发送回应 | If-Unmodified-Since: Dec, 26 Dec 2015 17:30:00 GMT |
响应头
协议头 | 说明 | 示例 |
---|---|---|
Cache-Control | 通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒 | Cache-Control: max-age=3600 |
Expires | 指定一个日期/时间,超过该时间则认为此回应已经过期 | Expires: Thu, 01 Dec 1994 16:00:00 GMT |
Pragma | 与具体的实现相关,这些响应头可能在请求/回应链中的不同时候产生不同的效果 | Pragma: no-cache |
ETag | 对于某个资源的某个特定版本的一个标识符,通常是一个 消息散列 | ETag: “737060cd8c284d8af7ad3082f209582d” |
Last-Modified | 所请求的对象的最后修改日期 | Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT |
Cache-Control
指令 | 报文类型 | 描述 |
---|---|---|
no-cache | 请求 | 数据内容不能被缓存, 每次请求都重新访问服务器 |
no-store | 所有请求 | 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源) |
max-age | 所有请求 | 相对过期时间, 即以秒为单位的缓存时间 |
public | 响应 | 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等 |
private | 响应 | 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器 |
no-transform | 响应 | 禁用对响应内容的压缩 |
例子如下:
例子 | 解释 |
---|---|
Cache-Control: max-age=86400 | 响应可以由浏览器和中间缓存缓存长达 1 天(60 秒 x 60 分钟 x 24 小时) |
Cache-Control: private, max-age=600 | 响应可以由浏览器(但不是中间缓存)缓存长达 10 分钟(60 秒 x 10 分钟) |
Cache-Control: public, max-age=31536000 | 响应可以由任何缓存存储 1 年 |
Cache-Control: no-store | 不允许缓存响应,并且必须在每次请求时全部获取。 |
Token
用户身份验证的工具。但与 cookie、session 明文似的形式不同,token 是经过一系列加密手段加密过的,最后表现为一串“无意义”的字符串。但里面包含了许多信息,可能包括用户登录的终端的地址、用户身份 ID、时间戳以及一个签名
流程图
iframe
跨域问题
通过 nginx 过滤掉 X-Frame-Options 的配置
location / {
proxy_pass http://com.ityj.frame;
proxy_hide_header X-Frame-Options; # 避免出现多个 X-Frame-Options属性
add_header X-Frame-Options ALLOWALL; # 将之前网页的 SAMEORIGIN 属性给替换了,可以嵌套了
}