HTTP协议------->资源和URL
1.前言
最近在研究http,希望结合书本,对网上资料进行整合,用“人话”聊聊这个玩意儿~
计划用近十篇文章,详尽的说清楚以下一些问题:
- URL和资源、HTTP报文是什么东西?
- HTTP是怎样进行链接管理的?
- HTTP有什么结构(web服务器、代理、缓存、网关、HTTP-NG)?
- 识别、认证和安全问题(客户端的识别、cookie机制、基本认证机制、摘要认证)是怎么做的?
- HTTP的编码和国际化的问题
- 内容的发布和分发(web主机托管、发布系统、重定向与负载均衡、日志使用与跟踪)是怎么运行的?
废话就不多说了,这一章主要做一个简单概述HTTP,然后讲明白第一个问题!
2. HTTP:web基础
HTTP的作用就是把遍布全世界的web服务器上的信息(文本文件、HTML页面、mpeg电影、音频文件...资源)迅速搬迁到web浏览器(客户端)上去。简单做了个图,可看出,http也就是一个数据传输协议,桥梁的作用。
Fig1. HTTP,Client,Server
有几个概念要弄清楚:
- MIME type: HTTP会给每一种要通过web浏览器的对象打上MIME类型的数据格式标签;浏览器会根据不同的MIME类型来决定如何处理这个对象。
- URI: (Uniform Resource Identifier)统一资源标识符;世界范围内唯一标识并且定位信息资源,有两种形式:URL与URI;
- URL: (Uniform Resource Locator)统一资源定位符;(例如:https://www.cnblogs.com/Mairr/ 这就是一个URL啦!)
- URN: (Uniform Resource Name)统一资源名称;(还在试用阶段,现在还是用URL,所以我们会不加以区分URI和URL,直接认为是同一个东西,其实URL只是URI的子集)
2.1 URL与资源
2.1.1 浏览互联网的资源
举个例子,我们是怎么通过URL浏览互联网上的资源的,比如:https://pic.cnblogs.com/avatar/1194681/20171108220649.png
URL三连: 怎么做?(方案http://)---->在哪呢?(服务器位置pic.cnblogs.com)---->什么东西?(资源路径/avatar/1194681/20171108220649.png);所以URL找到网上资源是通过上述三步完成的(方案---->主机---->路径)。当然,方案不止是时HTTP一种,比如文件传输协议(FTP)、流视频传输协议(rtsp)...
2.1.2 URL的语法
讲的这么专业,其实也就是URL三连嘛~
- URL的方案----->使用什么协议(HTTP,FTP、SMTP(邮件的传输协议))
- 服务器的位置----->可以通过主机名:www.cctv.com,也可以通过IP地址加端口号:161.58.228.45:80(我随便写的一个,别介意)
- 路径
要说明的是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>/ |
2.2 HTTP报文
2.2.1 web的结构组件
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代理。
2.2.2 报文流和报文组成
(1) 报文流
报文是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头,描述了报文内容和含义,后面跟着可选的数据部分。HTTP使用“流入”和“流出”来描述事务处理的方向。报文流入源端服务器,工作完成后流回用户的Agent代理中。HTTP报文像流水一般向下流动。如下图所示:
(2) 报文的组成
每条报文包含一条来自客户端的请求或者服务器端的响应。他们由三个部分组成:对报文进行描述的起始行、包含属性的首部块、包含主体部分。报文的主体是一个可选的数据块。与起始行和首部不同的是主体可以包含文本或者二进制数据,也可以为空。
报文分为请求报文和响应报文。下面是格式:
请求报文格式 |
响应报文格式 |
<method> <request-URL> <version> |
<version> <status> <reason-phrase> |
<headers> |
<headers> |
<entity-body> |
<entity-body> |
下面是对各个部分的简单描述:
- 方法(method):客户端对服务器资源执行的动作。如GET,HEAD,POST。
- 请求URL(request-URL):命名了所请求的资源路径。
- 版本(version):报文所使用的HTTP版本,格式:HTTP/<major>.<minor>;其中,major是主版本号,minor是次版本号;都是整数。
- 状态码(status-code):这三位数字描述请求过程中所发生的情况。(成功/出错等)
- 原因短语(reason-phrase):数字状态码的可读版本,包含行终止序列之前的所有文本。
- 首部(header):可以有0个或者多个首部,每个首部包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后一个CRLF(回车换行)。
- 实体的主体部分(entity-body):实体的主体部分包含一个由任意数据组成的数据块。并不是所有报文都包含实体的主体部分,有时,报文只是以一个CRLF结束(后面文章会介绍实体)。
下面展示两个请求和响应的报文demo:
2.2.3 报文的常用方法和状态码
(1) 报文的常用方法
- GET:请求服务器发送某个资源;
- HEAD:与GET方法很类似,但是服务器在响应中只返回首部;
- PUT:与GET相反,PUT方法向服务器写入文档;
- POST:向服务器发送表单(html...);
- TRACE:客户端发送的请求可能要穿过防火墙、代理、网关...TRACE方法允许客户端在最终将请求发送给服务器时,查看它变成的样子;
- OPTIONS:OPTIONS方法请求WEB服务器告知其支持的各种功能。
- DELETE:请服务器删除请求URL所指定的资源。
(2) 状态码
HTTP分为5类状态码,这里做一个简单总结:(比较重要的状态码,后边更新的文章会详细介绍)
- 100~199---->信息性状态码
100 | Continue | 受到请求初始部分,请客户端继续。 |
101 | Switching Protocols | 服务器正在根据客户端指定,将协议切换成Update首部所列的协议 |
- 200~299---->成功状态码
200 | OK | 请求没问题,实体的主体部分包含了所请求的资源 |
201 | Created | 已创建对象的URL |
202 | Accepted | 请求已被接受,但服务器还未对其执行任何动作 |
203 |
Non-Authoritative Information |
实体首部包含的信息不是来源于源服务器,而是来自资源副本的一部分。 |
204 | No Content | 没有实体的主体部分 |
205 | Reset Content | 另一个用于浏览器代码 |
206 | Partial Content | 成功执行了一个部分或者Range(范围)的请求 |
- 300~399---->重定向状态码 (比较重要)
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~499:客户端错误状态码
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~599:服务器错误状态码
500 | Internal Server Error | 服务器遇到一个妨碍为请求提供服务的错误 |
501 | Not Implemented | 客户端发起请求超出服务器的能力范围 |
502 | Bad' Gateway | 作为代理或者网关使用的服务器从请求响应链接上收到一条伪响应 |
503 | Sevice Unacailable | 服务器暂时无法为请求提供服务(将来可以) |
504 | Gateway TimeOut | 响应来自网关或者代理,在等待另一服务器对其请求进行响应时超时了 |
505 | HTTP Version Not Suppported | 服务器收到的请求是其无法支持的版本(早期版本) |
今天更新到这里,最近准备期末考,考完会好好写学习笔记,一起加油~~~
HTTP协议------->资源和URL的更多相关文章
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- .NET(C#):浅谈程序集清单资源和RESX资源
原文:.NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- 网络基础 HTTP协议之http url简介
HTTP协议之http url简介 by:授客 QQ:1033553122 http url简介 http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_ ...
- Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...
- springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误。
springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误. 1.场景 如果在web.xml中servlet-mapping的url-pattern设置的是 ...
- HTTP协议----URI,URL,持久连接,管道与Cookie
URI与URL有什么不同呢? URI:Universal Resource Identifier统一资源标志符 URL:Universal Resource Locator统一资源定位器 URI是用来 ...
- k8s系列---ingress资源和ingress-controller
https://www.cnblogs.com/zhangeamon/p/7007076.html http://blog.itpub.net/28916011/viewspace-2214747/ ...
- Velero:备份、迁移Kubernetes集群资源和PV
Velero基本介绍 官方文档:https://velero.io/docs/v1.4/ 基本工作原理: 不管需求是实现什么,比如:集群迁移.恢复.备份,其核心都是通过velero client CL ...
- [已解决]从微软合作伙伴资源和MSDN下载系统和软件Microsoft download Manager无效
有个itellyou,更新了所有MSDN的软件包.如果自己有微软的注册账户,还是从微软官网下载比较好.而且对自己账户里的系统和itellyou里的做了对比.发现SHA1码不相同,估计官方分配的序列号也 ...
随机推荐
- js判断手机或Pc端登陆.并跳转到相应的页面
<script src="~/Web/js/jquery-1.10.1.min.js"></script> <script> $(functio ...
- 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题
问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...
- 利用阿里云Centos7建站过程
以下可能不尽详述,如有问题欢迎指出 准备过程:1. 阿里云主机一台2.域名一个 3.github个人帐号开始: 1.以root帐号登录云主机 2.安装apache [root@192 ~]# yum ...
- 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶
本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
- POJ1837--二维背包
Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13525 Accepted: 8474 Description ...
- 前端chrome浏览器调试
引言 "工欲善其事,必先利其器" 恩,这句话我觉得说的特别有道理,举个例子来说吧,厉害的化妆师都有一套非常专业的刷子,散粉刷负责定妆,眼影刷负责打眼影,各司其职,有了专业的工具才能 ...
- 如何用九条命令在一分钟内检查Linux服务器性能?
一.uptime命令 这个命令可以快速查看机器的负载情况.在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量.这些数据可以让我们对系统资源使用有一个宏观 ...
- svn up出现类似svn: Error converting entry in directory '.' to UTF-8问题解决
执行svn up命令报错如下 # svn up svn: Error converting entry svn: Valid UTF- data (hex:) followed by invalid ...
- kubernetes入门实践
k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...
- android:自己定义组合控件Weight(高仿猫眼底部菜单条)
在我们实际开发其中.会碰见一些布局结构类似或者同样的界面.比如应用的设置界面.tabbutton界面等. 这时候.对于刚開始学习的人来说,xml里面一个个绘制出来也许是最初的想法.可能随着经验的积累, ...