图解http(一)

从今天开始阅读图解http这本书,下载地址:我的百度云

http的发展史

这个我就不说了,总之起因就是因为一个家伙想知识共享就搞出来这个东西。http协议的更新还是很慢的,不像IE都到多少了。目前http协议正在准备出2.0,听说老快了,市面上主流的还是1.1。

相关协议

与http关系比较大的几个协议就是:tcp、ip、dns
下面一张图形象说明了http与这几个协议的关系。


http请求过程

URI和URL

URI包含着URL

Uniform Resource Identifier
统一格式 资源 标识
http/ftp ---- ----

标准格式
http://[user:pass@]www.example.jp:80/dir/index.html?uid=1#ch1
协议 登陆信息 服务器地址 端口 文件路径 查询字符串 片段标识符

第二章

请求和响应报文的组成

请求报文
响应报文

服务器请求

除了对服务器资源的请求,还可以对服务器本身进行请求。比如:
OPTIONS * HTTP/1.1
这是对服务器支持http方法种类的查询。

请求方法

  • GET(SELECT)
    用于请求资源,一般用于页面请求,数据请求等。根据RESTful架构理解来看,这些都属于服务器的资源。参照理解RESTful架构
  • POST(CREATE)
    在服务器新建一个资源。通过提交服务器一些数据,服务器根据这些数据进行处理和资源的创建。
  • PUT(UPDATE)
    在服务器更新资源(客户端提供改变后的完整资源)。
  • PATCH(UPDATE)
    在服务器更新资源(客户端提供改变的属性)。
  • DELETE(DELETE)
    从服务器删除资源。
  • HEAD
    获取资源的元数据。和GET方法一样,不过不返回报文主体。用于确认URI的有效性和资源更新的时间。
  • OPTIONS
    用来查询针对请求URI资源的支持方法。
  • TRACE
    trace和网络路径查询差不多,它是在Max-forwards首部字段中填入最大跳数,然后每一跳减一,减为0停止,响应体为每一跳的信息。这个不常用,而且还容易引发XST(跨站追踪)。
  • CONNECT
    要求用隧道协议连接代理
请求方法

PUT、PATCH、DELETE在一般网站上都不会用到,RESTful架构的网站可能会开放。主要是因为HTTP/1.1的这些方法都不带验证机制。

持久连接和管线化

最初的http是每次http请求响应完成都会断开tcp连接,这样如果一个页面有很多图片就会有很多次tcp三次握手四次挥手,很耗时间。
http1.1提出keep-alive,只要没有一端提出明确的断开连接,就一直保持tcp连接通道,节省了多次tcp连接的时间。
管线化则提出http请求的同时发送,像是异步一样,不等待前面http响应的回馈,异步等待回馈。

Cookie

http是无状态协议,它的状态通过cookie来保持。
响应在header中添加set-cookie告诉客户端下次请求加上cookie
请求在header中添加客户端所有的cookie

cookie传输

状态码

服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止  的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

状态码的完全列表参见这里

传送门
RESTful API 设计指南
理解RESTful架构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 55,330评论 24 557
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 3,485评论 0 20
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,119评论 19 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,528评论 6 152
  • 最近都在使用maven来开发系统,关于maven以前了解的不多,现在统一整理成一个使用手册。 1.setting....
    1angxi阅读 1,773评论 0 1