浏览器网络请求——HTTP详解


HTTP 是什么

HTTP(Hyper Text Transfer Protocol): 超文本传输协议,是用层协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。

HTTP 发展历程

截至目前,http 经历了原始版本、http1.0、 http1.1、 http2.0 几个版本,新版本每次出现都针对上一个版本的不足进行加强

HTTP 1.0

1.0 版本有个很大的缺点:TCP连接不可复用,每进行一次 HTTP 通信,都需要进行一次TCP 连接、HTTP 通信、断开 TCP 连接流程,如下图,两次 HTTP 通信就要进行两个完整的流程

在这里插入图片描述

HTTP 1.1

为了解决1.0版本的TCP连接不可复用问题,在1.1版本中,提出了 长连接机制, 在一个 TCP 连接里可以进行多次 HTTP 通信,如下图。

在这里插入图片描述

但是1.1 版本和 1.0 都有个很大的问题:队头阻塞,由于服务的响应是串行的,前一个请求若未响应,会阻塞后一个响应的返回

HTTP 2.0

HTTP2.0 对性能做出了极大的改进主要包括:二进制分帧、头部压缩、服务端推送、多路复用

  • 二进制分帧

在 HTTP1.x 中,数据以文本的格式进行传输,解析起来比较低效。HTTP2.0 在传输消息时,首先会将消息划分为更小的消息和帧,然后再对其采取二进制格式的编码,确保高效的解析。

  • 头部压缩

HTTP2.0 中,客户端和服务器分别会维护一份相同的静态字典,这个字典用来存储常见的头部名称,以及常见的头部名称和值的组合。同时还会维护一份相同的动态字典,这个字典可以实时被更新。第一次相互通信过后,后面的请求只需要发送与前面请求之间头部不同的地方,其它的头部信息都可以从字典中获取。大大节省了网络开销。

  • 服务端推送

在 HTTP1.x 中,如果用户请求了资源 A,结果发现自己如果要用资源 A,那么必须依赖资源 B,这时他不得不再消耗一个请求。而 HTTP2.0 中,允许服务器主动向客户端 push 资源。也就是说当服务器发现客户端请求了资源 A,却忘了请求资源 A 依赖的资源 B 时,它可以主动将资源 B 顺手推送给客户端。

  • 多路复用

在 HTTP 2.0 中,一次连接建立后,只要这个连接还在,那么客户端就可以在一个链接中批量发起多个请求。同时,请求与请求间属于并行,不会互相阻塞。由此,彻底规避了队头阻塞问题。

常用方法

HTTP 协议常用的请求方法有 GET、POST、PUT、DELETE

  • GET :仅用作数据的读取,请求参数以query的形式拼接到url
  • POST :创建新资源或修改现有资源,请求参数以body的形式传递
  • PUT :PUT 在能力上和 POST 类似,区别在于 PUT 的 URI 指向是具体的某个资源,而不能指向资源集合。
  • DELETE:用于删除指定的资源

头部信息 (Headers)

http 在发出请求或者响应时,都会携带有header,其中存放了一些必要的信息,下面列举常用的头部信息。缓存相关的头将在后续文章介绍。 更多头部信息可以参考:httq请求头/响应头

请求头(request Headers)

  • Accept: 浏览器可接受的数据格式
  • Accept-encoding: 浏览器可接受的压缩算法,如gzip(服务器压缩,客户端解压,让传输的资源变小,速度更快)
  • Accept-Language: 浏览器可接收的语言,如zh-CN
  • Connect:keep-alive 一次TCP连接重复使用
  • Cookie同域每次请求资源都会把cookie带上
  • Host请求的域名
  • User-agent:简称UA,浏览器信息,标识是什么浏览器,是什么系统,供给服务器分析
  • Content-type:发送数据的格式(多存在于post请求中),如一般json数据为application/json ,图片或文件为multipart/form-data

响应头(response Headers)

  • Content-type:返回数据的格式,如application/json(json),text/html(html),text/css(css)、text/javascript(javascript)image/png

  • Content-length:返回数据的大小,多少字节

  • Content-Encoding返回数据的压缩算法,如gzip

  • Set-Cookie服务端需要通过该字段来修改浏览器中的cookie

状态码

1xx:成功接收了请求,但是处理过程还没结束,需要客户端再抛出一个请求才能完成整个过程。

2xx:表示成功接收请求、并且已经处理完毕。

  • 200 OK,标识客户端的请求已经被服务器正确处理

3xx:表示服务器虽然也处理了你的请求,但客户端还需要进一步的工作,才可以完成请求。

  • 301:永久性重定向,表示资源已被分配了新的 URL

  • 302:临时性重定向,表示资源临时被分配了新的 URL

  • 304,表示服务器校验后发现资源没有改变,提醒客户端直接走缓存来取资源

4xx:客户端错误,意味着请求出错了。

  • 400:请求报文存在语法错误

  • 403:对请求资源的访问被服务器拒绝(多半是没权限)

  • 404,资源不存在,可能是你的路径不对,也可能是这个资源在服务端已经被下掉了

5xx:服务器错误,意味着服务器内部的程序处理有问题。

  • 500:服务器在接受请求后进行处理的过程中,发生了内部错误

  • 502:网关错误

  • 504:网关超时

HTTP无状态理解:cookie与session

HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,简单的说:前一刻发出的 A 请求,与下一刻发出的 B 请求, B 是完全感知不到 A 请求过的,两个请求间毫无关系。

如果想维持状态信息,需要使用cookiesession

  • cooike

客户端第一次向服务器端发送请求时是没有cookie的,请求后服务器端会在cookie中存入一些数据。下次在访问相同的服务器就会带上cookie中的数据。

  • session

实际上是一个对象,存储在服务器端的内存中,在session对象中也可以存储多条数据,每一条数据都有一个sessionid作为唯一标识。

  • 以登录逻辑为例

1、 客户输入账号密码进行登录,服务器端进行验证,验证成功则生成sessionId,并且在session对象中存储当前用户信息。

2、 服务器端将sessionId写入客户端cookie中,当客户端下次访问服务器端时cookie会被自动发送给服务器端。

3、 服务器端在 cookie 中拿到 sessionId 然后在服务器端的 session 对象中查找 sessionId 进行验证,验证成功说明用户是登陆状态,则可以为其响应只有在登陆状态才能响应的数据。

总结

  • HTTP 是什么

  • HTTP 发展历程

  • 常用方法

  • 头部信息 (Headers)

  • 状态码

  • HTTP无状态理解:cookie与session

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本系列的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的讨论 —— 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘面纱,包括 XMLHttpRequest 对象。 五年前,如果不知道 XML,您就是一只无人重视的丑小鸭。十八个月前,Ruby 成了关注的中心,不知道 Ruby 的程序员只能坐冷板凳了。今天,如果想跟上最新的技术时尚,那您的目标就是 Ajax。 请访问 Ajax 技术资源中心,这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何新信息都能在这里找到。 但是,Ajax 不仅仅 是一种时尚,它是一种构建网站的强大方法,而且不像学习一种全新的语言那样困难。 目录 第 1 部分: Ajax 简介 3 1.1 老技术,新技巧 4 1.2 XMLHttpRequest 对象 4 1.3 获取 Request 对象 6 1.4 Ajax 世界中的请求/响应 8 1.5 连接 Web 表单 10 第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 11 1.1 XMLHttpRequest 简介 12 1.2 用 XMLHttpRequest 发送请求 18 1.3 处理服务器响应 22 第 3 部分: Ajax 中的高级请求和响应 28 1.1 深入了解 HTTP 就绪状态 29 1.2 显微镜下的响应数据 33 1.3 深入了解 HTTP 状态代码 36 1.4 其他请求类型 40 第 4 部分: 利用 DOM 进行 Web 响应 44 1.1 Web 程序员和标记 44 1.2 进一步了解 Web 浏览器 46 1.3 对象的值 49 1.4 DOM 简介 52 第 5 部分: 操纵 DOM 55 1.1 跨浏览器、跨语言 55 1.2 节点的概念 56 1.3 节点的属性 56 1.4 节点方法 58 1.5 API 设计问题 63 1.6 通用节点类型 63 1.7 文档节点 64 1.8 元素节点 64 1.9 属性节点 66 1.10 文本节点 67 1.11 什么节点类型? 67 第 6 部分: 建立基于 DOM 的 Web 应用程序 69 1.1 从一个示例应用程序开始 70 1.2 修改图片,麻烦的办法 74 1.3 替换图片,简单的办法 78 1.4 替换图片,(真正)简单的办法 80 1.5 事件处理程序 83 第 7 部分: 在请求和响应中使用 XML 85 1.6 XML:到底用没用? 85 1.7 使用 XML(真正) 86 1.8 从客户机到服务器的 XML 87 1.9 发送 XML:好还是不好? 91 第 8 部分:在请求和响应中使用 XML 92 1.1 服务器(有时)不能响应太多的请求 92 1.2 从服务器接收 XML 94 1.3 解释 XML 的其他可选方法 99 第 9 部分: 使用 Google Ajax Search API 100 1.1 使用公共 API 101 1.2 使用 Google Ajax Search API 的准备工作 101 1.3 Google 的 API 文档 104 1.4 最简单的 Google 搜索 Web 应用程序 104 1.5 Ajax 在哪里? 109 1.6 深度探索 Google 的 Ajax Search API 111 第 10 部分: 使用 JSON 进行数据传输 111 1.1 选择的意义 112 1.2 JSON 基础 113 1.3 在 JavaScript 中使用 JSON 114 第 11 部分: 借鉴最优秀的 Ajax 应用程序 117 1.1 Google 地图 117 1.2 TaDaList 119 1.3 Campfire 122 1.4 YourMinis 123 1.5 其他 Web 2.0 站点 126 第 11 部分:将 Ajax 带入 Eclipse 的 Ajax Toolkit Framework 的两个工具 127 1.1 Eclipse ATF 127 1.2 Dojo 128 1.3 Zimbra Ajax Toolkit 130 1.4 initiative 在前进 132 第 12 部分:面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 133 1.5 更好的购物车 133 1.6 Ajax 往返过程 134 1.7 分派 XMLHttpRequest 135 1.8 servlet 请求处理 137 1.9 用 JavaScript 进行响应处理 139 1.10 使用 Ajax 的挑战 141 第 13 部分:面向 Java 开发人员的 Ajax: Ajax 的 Java 对象序列化 143 1.11 从 Java 类产生 XML 144 1.12 自行进行序列化 144 1.13 XML 绑定框架 146 1.14 页面模板系统 148 1.15 不用 XML 的响应数据 149 1.16 JavaScript 对象标注 150 1.17 比较序列化技术 153 第 14部分:面向 Java 开发人员的 Ajax 结合 Direct Web Remoting 使用 Ajax 154 1.1 DWR 是什么? 155 1.2 关于示例 155 1.3 实现目录 156 1.4 测试部署 157 1.5 调用远程对象 158 1.6 实现购物车 160 1.7 调用远程的 Cart 方法 163 1.8 DWR 的利弊 165 第 15部分:面向 Java 开发人员的 Ajax: 探索 Google Web Toolkit 166 1.1 从简单的开始 167 1.2 构建 Weather Reporter 应用程序 168 1.3 用 GWT Shell 进行客户端调试 174 1.4 与服务器端组件进行通信 175 1.5 从客户机调用服务 178 1.6 服务器端验证的需要 179 1.7 用 JSNI 调用本机 JavaScript 181 1.8 为什么使用 GWT? 183

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值