最近在研究http,但愿结合书本,对网上资料进行整合,用“人话”聊聊这个玩意儿~html
计划用近十篇文章,详尽的说清楚如下一些问题:web
废话就很少说了,这一章主要作一个简单概述HTTP,而后讲明白第一个问题!浏览器
HTTP的做用就是把遍及全世界的web服务器上的信息(文本文件、HTML页面、mpeg电影、音频文件...资源)迅速搬迁到web浏览器(客户端)上去。简单作了个图,可看出,http也就是一个数据传输协议,桥梁的做用。缓存
Fig1. HTTP,Client,Server安全
有几个概念要弄清楚:服务器
举个例子,咱们是怎么经过URL浏览互联网上的资源的,好比:https://pic.cnblogs.com/avatar/1194681/20171108220649.pngcookie
URL三连: 怎么作?(方案http://)---->在哪呢?(服务器位置pic.cnblogs.com)---->什么东西?(资源路径/avatar/1194681/20171108220649.png);因此URL找到网上资源是经过上述三步完成的(方案---->主机---->路径)。固然,方案不止是时HTTP一种,好比文件传输协议(FTP)、流视频传输协议(rtsp)...网络
讲的这么专业,其实也就是URL三连嘛~负载均衡
要说明的是URL分为绝对URL和相对URL,刚才聊的都是绝对URL。而相对URL只是一小个片断会以基础的URL完成转换!以下图所示:学习
下面作个常见方案方式的总结,方便本身之后回看用~
方案 | 描述 |
http | 超文本传输协议方案,除了没有用户名和密码外其余与通用的URL格式相符。若是省略了端口,就默认为80。格式 http//<host>:<port>/<path> |
https | 与http基本同样,惟一区别是https使用了SSL(安全套接层),SSL为HTTP链接提供了端到端的加密机制。语法与http一致,默认端口号为443。 |
ftp | 文件传输协议URL能够用来从FTP服务器上下载/上传文件,而且获取FTP服务器上的目录结构。基本格式: ftp://<user>:<password>@<host>:<port>/<path> |
mailto | E-Mail地址传输协议,基本格式:mailto:<RFC-822-addr-spec>;示例: mailto:joe@joes-hardware.com |
rtsp,rtspu | RTSP URL,是能够经过实时流传输协议解析音频、视频的媒体资源标识符。基本格式: rtsp://<user>:<password>@<host>:<port>/<path> |
files | files表示指定主机(本地磁盘、网络文件系统、)上能够直接访问的文件。若是省略主机名则表示本地主机;基本格式:files://<host>/<path> |
news | 方案news用来访问一些特定的文章或新闻组,他有一个独特的性质:news URL自己不足对资源进行定位。基本格式: news:<newsgroup> |
telnet | telnet用于访问交互式业务。他表示的并非对象自身,而是可经过telnet协议访问的交互时应用程序(资源)。基本格式:telnet://<user>:<password>@<host>:<port>/ |
HTTP报文就是HTTP应用程序之间发送的数据。以前介绍了2个web应用程序(浏览器、服务器),他们之间如何相互发送报文来实现基本事物处理。接下来先简单介绍(后面几篇文章会很详细的说明白)其余的几个比较重要的应用程序:
(1) 代理:位于客户端与服务器之间的HTTP中间实体。代理用来接收全部客户端的HTTP请求,并将请求转发给服务器(可能会对请求修改以后进行转发)。此外,代理还能够对请求和响应进行过滤(好比,病毒检测,未成年人不能看的东西也要滤掉!!!)。
(2) 缓存:HTTP的仓库,使经常使用页面的副本能够保存在离客户端更近的地方。web缓存(Web cache)或者服务器缓存(proxy cache)是一种特殊的HTTP代理服务器,能够将通过代理传送的经常使用文档复制保存起来。下一个请求同一文档的客户端就能够享受副本的服务了。
(3) 网关(gateway):一种特殊的服务器。
(4) 隧道(tunnel):对HTTP通讯报文进行盲目转发的特殊代理。HTTP隧道的一种常见用途是经过HTTP连接承载加密安全套接字层(SSL,Secure Sockets Layer)流量,这样的SSL流量就能够穿过只容许Web流量经过的防火墙了。
(5) agent代理:发起自动HTTP请求的半智能Web客户端。用户agent代理(简称:agent代理)是表明用户发起的HTTP请求的客户端程序。全部发布Web请求的应用程序都是HTTP Agent代理。例如:web浏览器就是一种HTTP Agent代理。
(1) 报文流
报文是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头,描述了报文内容和含义,后面跟着可选的数据部分。HTTP使用“流入”和“流出”来描述事务处理的方向。报文流入源端服务器,工做完成后流回用户的Agent代理中。HTTP报文像流水通常向下流动。以下图所示:
(2) 报文的组成
每条报文包含一条来自客户端的请求或者服务器端的响应。他们由三个部分组成:对报文进行描述的起始行、包含属性的首部块、包含主体部分。报文的主体是一个可选的数据块。与起始行和首部不一样的是主体能够包含文本或者二进制数据,也能够为空。
报文分为请求报文和响应报文。下面是格式:
请求报文格式 |
响应报文格式 |
<method> <request-URL> <version> |
<version> <status> <reason-phrase> |
<headers> |
<headers> |
<entity-body> |
<entity-body> |
下面是对各个部分的简单描述:
下面展现两个请求和响应的报文demo:
(1) 报文的经常使用方法
(2) 状态码
HTTP分为5类状态码,这里作一个简单总结:(比较重要的状态码,后边更新的文章会详细介绍)
100 | Continue | 受到请求初始部分,请客户端继续。 |
101 | Switching Protocols | 服务器正在根据客户端指定,将协议切换成Update首部所列的协议 |
200 | OK | 请求没问题,实体的主体部分包含了所请求的资源 |
201 | Created | 已建立对象的URL |
202 | Accepted | 请求已被接受,但服务器还未对其执行任何动做 |
203 | Non-Authoritative Information |
实体首部包含的信息不是来源于源服务器,而是来自资源副本的一部分。 |
204 | No Content | 没有实体的主体部分 |
205 | Reset Content | 另外一个用于浏览器代码 |
206 | Partial Content | 成功执行了一个部分或者Range(范围)的请求 |
300 | Multiple Choices | 返回这个状态码时会返回一个选项列表;供客户端选择其须要的文档页码/内容。 |
301 | Moved Permenently | 请求的URL已经被移除时使用。响应的Location首部中应该包含该资源如今所处的URL |
302 | Found | 客户端使用首部给出的URL临时定位资源。未来的请求仍应使用老的URL |
303 | See Other | 告诉客户端应该使用另外一个URL来获取资源。 |
304 | Not Modified | 资源未被修改。带有这个状态码的响应不该该包含实体的主体部分。 |
305 | Use Proxy | 必须经过代理来访问资源 |
306 | (未使用) | 当前未使用 |
307 | Temporary Redirect | 临时定位资源。未来的请求应该使用老的URL |
400 | Bad request | 告知客户端它发送了一个错误的请求 |
401 | Unauthorized | 与适当的首部一块儿返回,客户端在获取对资源的访问权以前,对本身进行认证。 |
402 | Payment Required | (已保留,可是未使用) |
403 | Forbidden | 请求被服务器拒绝。 |
404 | Not Found | 服务器没法找到一个请求的URL |
405 | Method Not Allowed | 发起请求中带有所请求的URL不支持的方法。 |
406 | Not Acceptable | 客户端能够指定参数来讲明他们愿意接收什么类型的实体。 |
407 | proxy Authentication Required | 对资源进行认证的代理服务器 |
408 | Request Timeout | 客户端请求完成时间过长,服务器能够回送状态码关闭连接 |
409 | Conflict | 请求冲突 |
410 | Gone | 服务器曾经拥有这个资源 |
411 | Length Required | 服务器要求在请求报文中包含Content-Lenth首部时使用。 |
412 | Precondition Failed | 条件请求,条件失败时候使用 |
413 | Request Entity Too Large | 客户端发送实体主体部分比服务器可以处理的大。 |
414 | Request URL Too Long | 客户端发送请求的URL比服务器可以处理的要长。 |
415 | Unsupported Media Type | 服务器没法理解或者没法支持客户端请求 |
416 | Requested Range Not Satisfiable | 请求报文所请求资源不在指定范围,吃范围无效或者没法知足 |
417 | Exception Failed | 服务器没法知足请求的首部包含的指望 |
500 | Internal Server Error | 服务器遇到一个妨碍为请求提供服务的错误 |
501 | Not Implemented | 客户端发起请求超出服务器的能力范围 |
502 | Bad' Gateway | 做为代理或者网关使用的服务器从请求响应连接上收到一条伪响应 |
503 | Sevice Unacailable | 服务器暂时没法为请求提供服务(未来能够) |
504 | Gateway TimeOut | 响应来自网关或者代理,在等待另外一服务器对其请求进行响应时超时了 |
505 | HTTP Version Not Suppported | 服务器收到的请求是其没法支持的版本(早期版本) |
今天更新到这里,最近准备期末考,考完会好好写学习笔记,一块儿加油~~~