【HTTP】简单了解HTTP
本来打算写一篇文章的,来介绍一下HTTP,结果发现想要写的内容太多了,那就分开写吧,正好这一系列的文章,我觉得应该能申请一个专栏了,不说废话了,正文开始
我们都知道HTTP是一种协议,那么你对它了解有多少呢?今天就来聊聊HTTP
两个容易混淆的概念 |
URL(Uniform Resource Local):统一资源定位符
URI(Uniform Resource Identifier):统一资源标识符
从命名中,大概可以猜出来,URL是URI的子集。因为URL只是负责资源定位,但是URI才是掌管着资源的大权
URI的格式:登录信息认证(可选)
服务器地址(必须指定)
服务器端口(可选,若省略,则是默认的)
带层次的文件路径(指定特指资源)
查询字符串(可选)
片段标识符(标记出已获取资源中的子资源,可选)
告知服务器的HTTP方法 |
HTTP是一种不保持状态的协议,即无状态协议。比如你使用CSDN账号登录了你的博客,如果不保持状态,当你访问别人的博客要评论时,需要再次登录自己的账号。这样的状态肯定不是我们想要的,所以为了实现期望的保持状态功能,我们引入了cookie技术(这篇文章关于cookie与session做了一个比较,感兴趣可点击:session共享)
那么,我们就需要告知服务器,我们想要做什么。告知服务器意图的HTTP方法有以下:
名称 | 说明 |
---|---|
GET | 获取资源,用来请求访问已被URI识别的资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径,不常用,易引发XST(Cross-Site Tracing,跨站追踪)攻击 |
CONNECT | 要求用隧道协议连接代理 |
获取部分内容的范围请求:
以前的用户是没有待遇使用现在这种高速的带宽来访问互联网的,下载一个稍微大一点儿的文件就已经很吃力了,如果在下载过程中再遇到网络中断情况,就必须重新开始下载。想想也是挺崩溃的,对吧?所以为了解决这种问题,需要一种可恢复的机制,而要实现该功能需要指定下载的实体范围。像这样指定范围发送的请求叫做范围请求(Range Request)。
范围请求,就要来说说内容协商机制。内容协商机制就是客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。使用到的技术一般有服务器驱动协商,客户端驱动协商和透明协商。
GET与POST |
GET与POST方法比较相似,在这里做一下说明与比较:
GET方法:查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
POST方法:查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
GET | POST | |
---|---|---|
后退按钮/刷新 | 无影响 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data,为二进制数据使用多重编码 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度的限制 | 有限制。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) | 无限制 |
对数据类型的限制 | 只允许 ASCII 字符 | 无限制,也允许二进制数据 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分.另外,在发送密码或其他敏感信息时绝不要使用 GET | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中 |
可见性 | 数据在URL中对所有人都是可见的 | 数据不会显示在URL中 |
通信数据转发程序:代理、网关、隧道 |
正如小标题所示,来说说代理、网关和隧道。
代理服务器的基本行为就是接收客户端发送的请求后,转发给其他服务器。代理不改变URI。
那么我们为什么要使用代理服务器呢?代理服务器可以利用缓存技术,减少网络带宽流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。代理有多种使用方法,按两种基准分类:一是否使用缓存,二是否会修改报文。
缓存代理:代理转发响应时,缓存代理会预先将资源的副本(缓存)保存在代理服务器上。带代理再次接收到对相同资源的请求时,就可直接将之前缓存的资源作为响应返回。
透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之称为非透明代理。