本篇总结关于http的相关知识,主要内容参考如下导图:

  主要讲解的内容有:

  1 URL与URI的区别。

  2 请求报文与相应报文的内容。

  3 GET与POST的区别。

  4 http的cookie、持久化、管道化、多部分对象集合、范围请求等

  后续会更新http其他的相关知识。

  关键词概念

  平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢?

  先看看官方的解释:

  URL:uniform resource location 统一资源定位符

  URI:uniform resource identifier 统一资源标识符

  这也就是说,URI是一种资源的标识;而URL也是一种URI,也是一种资源的标识,但它也指明了如何定位Locate到这个资源。

  URI是一种抽象的资源标识,既可以是绝对的,也可以是相对的。但是URL是一种URI,它指明了定位的信息,必须是绝对的。

  而我们平时所说的相对地址,仅仅是相对于另一个绝对地址而言。

  RFC:reqeust for comments 征求修正意见书

  RFC素有网络知识圣经之称,规定了网络中协议的基本内容。因此许多的不同系统的应用程序才可以互相访问。

  报文格式

  首先报文的格式如下:

  其中空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成。

  无论是请求报文还是响应报文都需要有报文首部,当然报文主体有的请求报文是没有的。

  一般来说,请求报文的格式如下:

  其中请求首部还包括其他的内容,不一一列举了。

  响应报文格式如下:

  下面我们看一下在不同的浏览器中http报文的内容:

  上图是chrome中http的内容,其中request headers描述了请求报文头部的内容,response headers描述了响应报文头部的内容。

  其中最长使用的属性是:

  1 URL, 即http访问的地址

  2 request method, 报文的请求方式

  3 status code, 状态码以及状态短语

  4 Accept Encoding, 内容编码

  5 Connection, 连接方式

  6 Cookie, 添加的cookie内容

  7 Host, 目标主机

  8 User-Agent, 客户端浏览器的相关信息

  9 Set-Cookie, 指定想要在Cookie中保存的内容

  常用的属性内容就是上面这些。

  在IE中捕获到的显示方式不同,但是内容都是相同的:

  http请求方式

  如何发送http有很多种方式,但是最常用的就是POST和GET。

  其他的有些出于安全性的考虑一般都不建议使用。那么POST与GET有什么区别呢?

  1 使用目标不同:

    POST与GET都用于获取信息,但是GET方式仅仅是查询,并不对服务器上的内容产生任何作用结果;每次GET的内容都是相同的。

    POST则常用于发送一定的内容进行某些修改操作。

  2 大小不同:

    由于不同的浏览器对URL的长度大小有一定的字符限制,因此由于GET方式放在URL的首部中,自然也跟着首先,但是具体的大小要依浏览器而定。

    POST方式则是把内容放在报文内容中,因此只要报文的内容没有限制,它的大小就没有限制。

  3 安全性不同:

    上面也说了GET是直接添加到URL后面的,直接就可以在URL中看到内容。

    而POST是放在报文内部的,用户无法直接看到。

  总的来说,GET用于获取某个内容,POST用于提交某种数据请求。

  按照使用场景来说,一般用户注册的内容属于私密的,这应该使用POST方式;而针对某一内容的查询,为了快速的响应,可以使用GET方式。

  

  无状态

  由于http是一种无状态的协议,因此无论是客户端还是服务器都不记录http的相关信息。

  这样设计一方面减轻了服务器端的负载,另一方面减小了http请求的开销。

  但是针对某些特殊的场景,需要时刻记录用户的相关信息,这该如何处理呢?

  Cookie恰好可以解决这个问题,Cookie的运行机制如下:

  Cookie是一种由服务器端确定,并保存在客户端浏览器中的内容。这样,就不需要每次都添加用户的相关信息,请求会自动添加cookie中对应的内容。

  持久化

  正常在发送http时,都需要建立TCP的连接,再发送报文。

  如果每次想要发送http报文都需要经过这个过程,那么时间大部分都会消耗在建立和断开连接的过程中。

  因此http中使用了connection属性,用于指定连接的方式。

  当设置成keep-alive,如上面所示的www.baidu.com的http头部信息所示,就会建立一条持久化的连接。

  不需要每次都建立连接,再中断。

  管道化

  如果一个http请求,请求了大量的图片等大文件,那么其他的http请求怎么办呢?

  不用怕,http可以一次发送多个http请求,然后等待响应连接。不需要排队等候,这样就加快了http的响应时间。

  内容编码

  由于某些报文的内容过大,因此在传输时,为了减少传输的时间,会采取一些压缩的措施。

  例如上面的报文信息中,Accept-Encoding就定义了内容编码的格式:gzip

  有下面几种方式:

  gzip:GNU压缩格式

  compress:UNIX系统的标准压缩格式

  deflate:是一种同时使用了LZ77和哈弗曼编码的无损压缩格式

  identity:不进行压缩

  多部分对象集合

  有的时候传输的内容,不仅仅是一些字符串,还有可能是一些图片,字符,音乐二进制等混杂的内容。

  这就需要使用多部分对象集合,multipart,例如在使用java编写web上传文件的代码时,需要在form中指定form的编码格式。

  设置form的enctype属性的值为multipart/form-data。

  这是因为默认的情况下form使用的编码格式是:applicatin/x-www-form-urlencoded,这种编码格式会把所有的内容进行编码,不适合上传文件这种情况。

  这两种编码格式的区别主要是:

  multipart/form-data 会以控件为基准,编码form中的内容。

  application/x-www-form-urlencoded 会把form中的内容编码成键值对的形式。

  范围请求

  有些场景下,http报文请求一些很大的图片,但是加载过程很慢。

  比如我们登录一些大图片的网址,会发现有时候图片是一块一块加载的。

  这就是因为设置了http请求的长度,这样就可以分块的加载资源文件。

  在请求报文中使用Range属性,在响应报文中使用Content-Type属性都可以指定一定字节范围的http请求。

  参考

  [1] URL与URI的区别:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

  [2] POST与GET的区别:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

  [3] GET与POST的长度限制:http://blog.csdn.net/blueling51/article/details/6935901

【web必知必会】——图解HTTP(上)的更多相关文章

  1. Android必知必会-使用okhttp的PUT方式上传文件

    注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望CSDN能更好的支持移动端. 背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp ...

  2. 第3节:Java基础 - 必知必会(上)

    第3节:Java基础 - 必知必会(上) 本篇是基础篇的第一小节,我们从最基础的java知识点开始学习.本节涉及的知识点包括面向对象的三大特征:封装,继承和多态,并且对常见且容易混淆的重要概念覆盖和重 ...

  3. 数据库学习之中的一个: 在 Oracle sql developer上执行SQL必知必会脚本

    1 首先在開始菜单中打开sql developer: 2. 创建数据库连接 点击左上角的加号 在弹出的对话框中填写username和password 測试假设成功则点击连接,记得角色要写SYSDBA ...

  4. 2015 前端[JS]工程师必知必会

    2015 前端[JS]工程师必知必会 本文摘自:http://zhuanlan.zhihu.com/FrontendMagazine/20002850 ,因为好东东西暂时没看懂,所以暂时保留下来,供以 ...

  5. [ 学习路线 ] 2015 前端(JS)工程师必知必会 (2)

    http://segmentfault.com/a/1190000002678515?utm_source=Weibo&utm_medium=shareLink&utm_campaig ...

  6. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

  7. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  8. .NET零基础入门09:SQL必知必会

    一:前言 仿佛到了更进一步的时候了,每一个程序员迟早都会遇到数据存储的问题.我们拿什么来存储程序产生的数据?举例来说,用什么来存储我们的打老鼠游戏每次的成绩呢?选择如下: 1:内存中.缺点,退出游戏, ...

  9. H5系列之History(必知必会)

    H5系列之History(必知必会)   目录 概念 兼容性 属性 方法 H5方法       概念     理解History Api的使用方式 目的是为了解决哪些问题   作用:ajax获取数据时 ...

  10. H5系列之地理位置(必知必会)

    H5之地理位置必知必会     [02]概念   规范地址:http://www.w3.org/TR/geolocation-API/     HTML5 Geolocation(地理定位)用于定位用 ...

随机推荐

  1. Android SDK 镜像站

    Android SDK镜像的介绍使用  http://www.androiddevtools.cn 镜像站地址   由于一些原因,Google相关很多服务都无法访问,所以在很多时候我们SDK也无法升级 ...

  2. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  3. Android课程---优化ListView列表视图

    activity_ui4.xml <?xml version="1.0" encoding="utf-8"?> <ListView xmlns ...

  4. php课程---练习连接数据库及增删改

    方式一:用php中的内置函数来做 (适用于5.1之前的版本) //1.生成连接 $conn = mysql_connect("localhost","root" ...

  5. Unity学习疑问记录之Apply Root Motion

    Should we control the character's position from the animation itself or from script. 如果我们勾选了Animator ...

  6. HTTP常见错误代码总结

    1.HTTP 401 用户验证失败.不允许继续访问 2.HTTP 403 禁止访问,访问web应用,没有指定要访问页面的名称 3.HTTP 404 请求的文件找不到,一般情况是在浏览器输入地址时,输入 ...

  7. jdk动态代理学习

    在jdk的好多底层代码中很多都使用jdk的动态代理,下面就写写简单的代码来look look. 老规矩先上代码: public interface SayDao { public String say ...

  8. Jquery EasyUI使用总结(一)

    1,弹出Iframe,新窗口 //打开编辑页面要加载的数据 function ShowDialog(id, url, width, height, onLoadFunc) { $("#&qu ...

  9. Codeigniter2.25部署Linux(php5.6)

    1).默认路由:修改system/core/Router.php 中第146行.如下图所示.ps:转换成小写我也是醉了...注释的代表是codeigniter作者写的,而上面的是我更改的 2).mod ...

  10. Servlet 生命周期、工作原理

    按照单例的编码规则,Servlet本身只是一个Java,结构并不是单例结构. 只是Web容器在维护这些Servlet的时候只给创建一个实例存在JVM中,用户请求服务时,服务器只调用它已经实例化好的Se ...