http与https

6 篇文章 0 订阅

HTTP 通信协议的组成

请求 URI 定位资源

URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。可 见 URL 是 URI 的子集。

URL格式是,如

http://www.gupaoedu.com:80/java/index.html?name=mic#head

对应为schema://host[:port#]/path/.../?[url-params]#[ query-string]

scheme 指定应用层使用的协议(例如:http, https, ftp)

host HTTP 服务器的 IP 地址或者域名

port# HTTP 服务器的默认端口是 80,这种情况下端口号可以省略。如果使 用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/

path 访问资源的路径

query-string 查询字符串

# 片段标识符(使用片段标识符通常可标记出已获取资源中的子资源(文档内 的某个位置))如:#head 在页面上添加锚点的方法为:<a name=”head”></a>或使用<div id=”head” >。

MIME Type

描述消息内容类型,常见的几种类型

文本文件:text/html,text/plain,text/css,application/xhtml+xml,application/xml

图片文件:image/jpeg,image/gif,image/png.

视频文件:video/mpeg,video/quicktime

可以通过两种方式来设置文件的渲染类型,第一种是 Accept,第二种是 Content-Type

Accept: 表示客户端希望接受的数据类型,即告诉服务器我需要什么媒体类型的数据,此时 服务器应该根据 Accept 请求头生产指定媒体类型的数据

Content-Type: 表 示 发 送 端 发 送 的 实 体 数 据 类 型 , 比 如 我 们 应 该 写 过 类 似 的 : resposne.setContentType(“application/json;charset=utf-8”)的代码,表示服务端返回的数据 格式是 json。

如果 Accept 和 Content-Type 不一致,假如说 Accept 要接收的类型是 image/gif,但是服务 端返回的数据是 text/html,那么浏览器将会无法解析。

状态码

200:一切正常

301:永久重定向

404:请求资源不存在

500:服务端内部错误

定义了 8 种方法来表示对于不同请求的操作方式

GET:一般是用于客户端发送一个 URI 地址去获取服务端的资源(一般用于查询操作),Get 不支持的传输数据有限制,具体限制由浏览器决定

POST:一般用户客户端传输一个实体给到服务端,让服务端去保存(一般用于创建操作) PUT:向服务器发送数据,一般用于更新数据的操作

DELETE:客户端发起一个 Delete 请求要求服务端把某个数据删除(一般用于删除操作)

HEAD:获得报文首部、

OPTIONS:询问支持的方法、

TRACE:追踪路径、

CONNECT:用隧 道协议连接代理

推荐:REST 架构风格(百度吧)

1. REST 是面向资源,每一个 URI 代表一个资源 2. 强调无状态化,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他 请求中使用 3. 强调 URL 暴露资源时,不要在 URI 中出现动词 4. 合理的利用 http 状态码、请求方法。

请求报文

请求报文格式包含三个部分,(起始行、首部字段、主体)

 响应报文

响应的报文格式也是一样,分为三部分

如果传输的文件过大怎么办

服务器上返回的资源文件比较大,比如有些 js 文件大小可能就有几兆。文件过大就会影响传 输的效率,同时也会带来带宽的消耗。怎么办呢?

1. 常见的手段是,对文件进行压缩,减少文件大小。那压缩和解压缩的流程怎么实现呢? 首先服务端需要能支持文件的压缩功能,其次浏览器能够针对被压缩的文件进行解压缩。浏 览器可以指定 Accept-Encoding 来高速服务器我当前支持的编码类型 Accept-Encoding:gzip,deflate 那服务端会根据支持的编码类型,选择合适的类型进行压缩。常见的编码方式有:gzip/deflate

2. 分割传输 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主 体分块的功能称为分块传输编码(Chunked Transfer Coding)。

每次请求都要建立连接吗?

在最早的 http 协议中,每进行一次 http 通信,就需要做一次 tcp 的连接。而一次连接需要进 行 3 次握手,这种通信方式会增加通信量的开销。

所以在 HTTP/1.1 中改用了持久连接,就是在一次连接建立之后,只要客户端或者服务端没有 明确提出断开连接,那么这个 tcp 连接会一直保持连接状态 持久连接的一个最大的好处是:大大减少了连接的建立以及关闭时延。 HTTP1.1 中有一个 Transport 段。会携带一个 Connection:Keep-Alive,表示希望将此条连接 作为持久连接。 HTTP/1.1 持久连接在默认情况下是激活的,除非特别指明,否则 HTTP/1.1 假定所有的连接都 是持久的,要在事务处理结束之后将连接关闭,HTTP/1.1 应用程序必须向报文中显示地添加 一个 Connection:close 首部。 HTTP1.1 客户端加载在收到响应后,除非响应中包含了 Connection:close 首部,不然 HTTP/1.1 连接就仍然维持在打开状态。但是,客户端和服务器仍然可以随时关闭空闲的连接。不发送 Connection:close 并不意味这服务器承诺永远将连接保持在打开状态。 管道化连接: http/1.1 允许在持久连接上使用请求管道。以前发送请求后需等待并收到响应, 才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就 能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

Http 协议的特点

Http 无状态协议

HTTP 协议是无状态的,什么是无状态呢?就是说 HTTP 协议本身不会对请求和响应之间的 通信状态做保存。 但是现在的应用都是有状态的,如果是无状态,那这些应用基本没人用,你想想,访问一个 电商网站,先登录,然后去选购商品,当点击一个商品加入购物车以后又提示你登录。这种 用户体验根本不会有人去使用。那我们是如何实现带状态的协议呢?

客户端支持的 cookie

Http 协议中引入了 cookie 技术,用来解决 http 协议无状态的问题。通过在请求和响应报文 中写入 Cookie 信息来控制客户端的状态;Cookie 会根据从服务器端发送的响应报文内的一 个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。

服务端支持的 session

服务端是通过什么方式来保存状态的呢? 在基于 tomcat 这类的 jsp/servlet 容器中,会提供 session 这样的机制来保存服务端的对象状态,服务器使用一种类似于散列表的结构来保存信 息,当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户端 的请求是否包含了一个 session 标识- session id; 如果已包含一个 session id 则说明以前已经为客户端创建过 session,服务器就按照 session id 把这个 session 检索出来使用(如果检索不到,会新建一个); 如果客户端请求不包含 sessionid,则为此客户端创建一个 session 并且生成一个与此 session 相关联的 session id, session id 的值是一个既不会重复,又不容易被找到规律的仿造字符 串,这个 session id 将会返回给客户端保存

Https 协议基本分析

由于 HTTP 协议通信的不安全性,所以人们为了防止信息在传输过程中遭到泄漏或者篡改, 就想出来对传输通道进行加密的方式 https。 https 是一种加密的超文本传输协议,它与 HTTP 在协议差异在于对数据传输的过程中,https 对数据做了完全加密。由于 http 协议或者 https 协议都是处于 TCP 传输层之上,同时网络协 议又是一个分层的结构,所以在 tcp 协议层之上增加了一层 SSL(Secure Socket Layer,安 全层)或者 TLS(Transport Layer Security) 安全层传输协议组合使用用于构造加密通道; Ssl 是 netscape 公司设计的(Secure sockets layer),后来互联网标准化组织 ISOC 接替了 NETScape 公司,发布了 SSL 的升级版 TLS。接着 TLS 的版本又进行了多次升级; 实际上我 们现在的 HTTPS 都是用的 TLS 协议,但是由于 SSL 出现的时间比较早,并且依旧被现在浏 览器所支持,因此 SSL 依然是 HTTPS 的代名词。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值