Skip to content

一次HTTP协议的知识分享 #7

@CongratulateWE

Description

@CongratulateWE

主要内容:

  • 协议的状态码、header
  • 跨域的问题
  • 缓存策略
    --

引子

在浏览器地址栏输入url之后,http请求的处理过程
image

  • 为什么在最开始的时候就会做一次跳转呢?那是在出现301永久重定向的时候,浏览器会自动重定向到新的地址,并不会对最初的url发出请求。
  • 缓存是HTTP协议中的一个重要议题
  • HTTP协议只有请求和响应,它的消息传输建立一个TCP连接上

url的标准格式:
image

  • 其中登录信息认证的这种方式不太安全,所以不大常用;
  • 文件路径这块,现在多用来进行路由

OSI模型参考 - 网络分层

  • 七层网络协议 最初的网络分层,计算机科学领域分层较细致,多了会话层和表示层,原来是打算让应用层共享的一些软件代码,但是因为不同的应用程序有大同小异的会话、表示需求,这些代码不完全能够抽象到独立的会话层、表示层,所以可能这些层不够独立。我们一般就使用五层去划分。
  • 五层网络协议 工程师一般这么分层,简单明了,每层的作用都比较清晰,我们的HTTP协议属于高层次的应用层协议。
  • 六层网络协议?有些人提到将安全层作为一个独立一层,加在应用层之下,比如HTTP协议运行在安全层之上就可以变为https协议。

--

1、HTTP协议的版本

image
HTTP/0.9 只有GET请求

HTTP/1.0

  • 增加了status code 和 header
  • 增加了方法 post、put、delete、head
  • 缺点就是对TCP连接消耗很大

HTTP/1.1

  • 持久连接
  • pipeline,串行请求
  • 新增host请求头,用于指定请求服务器的域名和端口,虚拟主机运行在同一个IP上,可以用host加以区分

HTTP/2.0

  • 数据按照二进制传输,不再按照顺序返回
  • 头信息压缩 —— 减少带宽
  • 添加了推送的概念,让服务端变得主动。—— (服务端可以直接将HTML页面中的静态资源推送到客户端,让资源的加载变得并行)
  • 演示网址
方法 说明 版本
GET 获取资源 1.0 1.1
POST 传输实体主体
PUT 传输文件
HEAD 获得报文首部
DELETE 删除文件
OPTIONS 询问支持的方法,预请求 1.1
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理
LINK 建立和资源之间的链接  
UNLINK 断开链接关系

2、HTTP报文

分为 request 请求报文和 response 响应报文
image

报文头部Header,按照使用范围划分为四个类别

  1. 通用首部字段 —— 双方都会用到的字段
  2. request首部字段 —— 补充了请求的附加内容、客户端信息、相应内容相关优先级等信息
  3. response首部字段 —— 补充了响应的附加内容,也会要求客户端附加额外的内容信息
  4. Entity首部字段 —— 针对实体部分,补充资源内容更新时间等与实体有关的信息

状态码

  类别 备注
1xx Informational  
2xx Success  
3xx Redirection  
4xx Client Error  
5xx Server Error  

status code对照表

code name 使用场景或处理
101 Switching Protocols 升级websocket,配合 Upgrade 头信息 🌰
200 ok 缓存
206 partial content 断点续传,缓存
301 Moved Permanently 永久重定向,缓存
302 Moved Temporarily 临时重定向,配合Location去跳转
304 Not Modified 缓存验证,允许访问资源,配合If-Match、If-Modified-Since、If-None-Match
400 Bad Request  
401 Unauthorized jira
403 Forbidden 服务器拒绝请求,但是可以在body中给出拒绝的理由
404 Not Found  
500 Internal Server Error  
503 Service Unavailable 服务停机维护,可以配合RetryAfter字段告知解除时间

3、跨域cors

同源策略
如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。

允许的方法

  • get head post
    允许的Content-Type
  • text/plain
  • multipart/form-data
  • application/x-www-form-urlencoded
    请求头的限制

参考标准
image

image

image

JsonP 方式,浏览器的标签中的资源是不受同源策略的限制的。

阮一峰

例子

  • 演示 Connection keep-alive close
  • 演示 101 协议切换
  • 演示 cache-control max-age
  • 演示 缓存验证
  • 演示 跨域 cros jsonp accept-origin
  • 演示 302重定向

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions