【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。
    那么我们为什么要使用代理服务器呢?代理服务器可以利用缓存技术,减少网络带宽流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。代理有多种使用方法,按两种基准分类:一是否使用缓存,二是否会修改报文。
    缓存代理:代理转发响应时,缓存代理会预先将资源的副本(缓存)保存在代理服务器上。带代理再次接收到对相同资源的请求时,就可直接将之前缓存的资源作为响应返回。
    透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之称为非透明代理。

  • 网关
  • 工作机制和代理十分相似。但网关能使通信线路上的服务器提供非HTTP协议服务。
  • 隧道
  • 隧道的目的是确保客户端能与服务器进行安全的通信。
    posted @ 2018-10-15 09:04  Developer_lulu  阅读(197)  评论(0编辑  收藏  举报