HTTP 详解
参考地址: https://developer.mozilla.org/zh-CN/docs/W...
版本区别
- HTTP/0.9 : 单行协议
- HTTP/1.0 : 构建可扩展性
- HTTP/1.1 标准协议
- 连接可以复用,节省了多次打开TCP连接加载网页文档资源的时间。
- 增加流水线操作,允许在第一个应答被完全发送之前就发送第二个请求,以降低通信延迟。
- 支持响应分块。
- 引入额外的缓存控制机制。
- 引入内容协商机制,包括语言,编码,类型等,并允许客户端和服务器之间约定以最合适的内容进行交换。
- 感谢Host头,能够使不同域名配置在同一个IP地址的服务器上。
- HTTP2/
- HTTP/2是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建
- 这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
- 压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
- 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。
缓存
- 禁止缓存: 不得存储客户端或服务端响应的内容
Cache-Control: no-store
Cache-Control: no-cache, no-store, must-revalidate
- 强制确认缓存:使用副本之前服务器端都会验证请求中所描述的缓存是否过期
Cache-Control: no-cache
- 公共缓存: 响应可以被任何中间人缓存 :例如 (中间代理,CDN)
Cache-Control: public
- 私有缓存:响应是专用于某单个用户的 (默认私有)
Cache-Control: private
- 缓存过期:响应时间 + 缓存时间 是否大于 当前时间
Cache-Control: max-age=31536000
- 确认缓存:本地未过期使用本地副本。过期则去服务器端校验
Cache-Control: must-revalidate
Cookie
- 会话期: 浏览器关闭之后它会被自动删除
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
- 持久期: 指定一个特定的过期时间
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
- Secure 和 HttpOnly 标记 :secure -> 只能通过HTTPS协议发送 ; HttpOnly -> 无法通过脚本(javascirpt)访问
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
- 作用域 : Domain 和 Path 标识定义了Cookie的作用域:即Cookie应该发送给哪些URL
访问控制(CORS)
- 跨网站请求 :
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
消息头
- 一般消息头 : 同时适用于请求和消息的响应, 但与最终消息主体中传输的数据无关
Remote Address
: 请求的远程地址Referrer Policy
: 来源请求信息no-referrer
: 不传递 Referrer 报头的值no-referrer-when-downgrade
: 当发生降级( 比如从 https:// 跳转到 http:// )时same-origin
: 同源,即当协议、域名和端口(如果有一方指定的话)都相同origin
: 将当前页面过滤掉参数及路径部分,仅将协议、域名和端口传递unsafe-url
: 任意情况下,都发送当前页的全部地址到 ReferrerKeep-Alive
: 暗示请求者连接状态。 超时时长和最大连接数
- 请求头 : 包含更多有关获取的资源和客户端本身信息的消息头
Accept
: 告知服务器 ,客户端能处理的内容类型Accept-Encoding
: 告知服务器, 传输数据应采用那种加密方式Accept-Language
: 客户端声明它可以理解的自然语言Accept-Charset
: 客户端声明可以处理的字符集类型Pragma
: 用于向后兼容 HTTP1.0协议的服务器Connection
: 决定当前的事务完成后,是否会关闭网络连接keep-alive
: 持久close
: 关闭
Referer
: 当前请求页面的来源页面的地址Upgrade-Insecure-Requests
: 客户端优先选择加密及身份验证User-Agent
: 发起请求的用户代理信息Content-Location
: 返回数据的实际地址 ( 不需要协商 )Access-Control-Request-Headers
: 预检请求 (真正的请求采用哪些首部字段)From
: 发送方联系方式Proxy-Authorization
: 用户代理提供给代理服务器的用于身份验证的凭证If-Range
: 用于断点续传的下载过程中
- 响应头 : 包含有关响应的补充信息, 位置信息,版本
Content-Type
: 告诉客户端实际发送的数据类型Transfer-Encoding
: 告诉客户端安全传递采用的编码格式chunked
: 数据以一系列分块的形式进行发送deflate
: 采用 zlib 结构gzip
: 表示采用 Lempel-Ziv coding 压缩算法identity
: 未经过压缩和修改
Vary
: 告诉客户端如何进行筛选, 缓存是否可用Expires
: 响应的过期时间X-Ua-Compatible
: 以哪个低版本的IE浏览器来渲染页面Location
: 告知客户端页面重新定向至新的地址Access-Control-Allow-Headers
: 预检请求 (列出真正请求的首部信息)Access-Control-Allow-Credentials
: 是否可将请求的响应暴露给页面Access-Control-Allow-Origin
: 响应资源是否共享Content-Range
: 显示的是一个数据片段在整个文件中的位置WWW-Authenticate
: 定义了使用何种验证方式去获取对资源的连接ETag
: 资源的特定版本的标识符 (加密) 避免缓存碰撞Retry-After
: 用户代理需要等待多长时间之后才能继续发送请求Clear-Site-Data
: 清除当前游览网站的数据 ( cookie, 存储, 缓存 )cache
: 删除响应的本地缓存数据cookies
: 删除响应的本地所有cookiestorage
: 删除响应的所有DOM存储executionContexts
: 服务端希望浏览器重新加载本请求*
Server
: 服务器的版本信息X-Content-Type-Options
: 提醒游览器遵循 Content-Type 的设定
- 实体头 : 包含更多主体信息
Content-Length
: 用来指定发送方和接收方消息主体大小Content-Disposition
: 内容以何种形式展示inline
: 消息体会以页面的一部分或者整个页面的形式展示attachment
: 消息体应该被下载到本地filename
: 指定名称
状态码
- 信息响应
100
: 迄今为止的所有内容都是可行的102
: 服务器已收到并正在处理该请求,但没有响应可用
- 成功响应
200
: 请求成功201
: 请求成功, 并创建一个新的资源 ( PUT请求之后发送的响应 )202
: 请求已经接受到, 但还未响应204
: 服务器成功处理了请求,但不需要返回任何实体内容205
: 服务器成功处理了请求, 不返回任何实体内容。 但需要请求者重置文档视图206
: 实现断点续传,大文件分段下载的响应
- 重定向
300
: 用户或浏览器能够自行选择一个首选的地址进行重定向301
: 被请求的资源已永久移动到新位置302
: 请求的资源现在临时从不同的 URI 响应请求304
: 自上次访问以来或者根据请求的条件并没有改变
- 客户端响应
400
: 语义有误,当前请求无法被服务器理解401
: 当前请求需要用户认证403
: 服务器已经理解请求,但是拒绝执行它404
: 资源未在服务器上找到405
: 请求行中指定的请求方法不能被用于请求相应的资源406
: 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。408
: 请求超时410
: 请求的资源在服务器上已不可用411
: 服务器拒绝在没有定义 Content-Length 头的情况下接受请求413
: 请求提交的实体数据大小超过了服务器愿意或者能够处理的范围414
: 请求的URI 长度超过了服务器能够解释的长度415
: 请求中提交的实体并不是服务器中所支持的格式416
: 请求头包含Range 请求头, 同时请求中又没有定义 If-Range 请求头429
: 用户在给定的时间内发送了太多请求(“限制请求速率”)451
: 用户请求非法页面
- 服务端响应
500
: 服务器故障503
: 服务器没有准备好处理请求504
: 服务器作为网关,不能及时得到响应时返回此错误代码505
: 服务器不支持请求中使用的HTTP协议507
: 服务器有内部配置错误508
: 服务器在处理请求时检测到无限循环。510
: 服务器需要对请求进一步扩展才能实现它。511
: 客户端需要进行身份验证才能获得网络访问权限
本作品采用《CC 协议》,转载必须注明作者和本文链接