【面试】http协议知识
一、什么是HTTP协议
HTTP协议是一种应用层协议,HTTP是HyperText Transfer
Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和
Web服务器之间的数据交换。我们在使用IE或Firefox浏览网页或下载Web资源时,通过在地址栏中输入,开头的4个字母http就相当于通知浏览
器使用HTTP协议来和host所确定的服务器进行通讯。
HTTP协议诞生于上世纪90年代初;第一个被广泛使用的版本是HTTP0.9。这个最初的版本非常简陋,它只向服务器发送一个非常简单的请求,而服务器
也会返回一个很简单的响应以及相应的HTML文本。在随后的HTTP1.0中,增加了很多在HTTP0.9中没有的特性,如增加了资源重定位,大量的状态
响应码等。在最新的HTTP1.1中,对HTTP1.0做了更进一步的改进,除了增加了一些请求方法外,最大的改进就是可以使HTTP保持连接状态。这对
于一些频繁传输数据的应用是非常有益的。由于HTTP协议已经达到了它的目标,因此,负责制定规范的W3C已经停止了对HTTP的改进,所
以,HTTP1.1将是HTTP协议的最后一个版本。
无论你是从事网络程序开发,还是Web开发,或是网站的维护人员;都必须对HTTP协议有一个比较深入的了解。因此,HTTP协议不仅是Internet
上应用最为广泛的协议,也是应用协议家族中比较简单的一种入门级协议;而且所有的Web服务器无一例外地都支持HTTP协议。这也充分地说明,对于那些开
发网络程序,尤其是开发各种类型的Web服务器的开发人员,透彻地掌握HTTP协议将对你所开发的基于HTTP协议的系统产生直接的影响。
二、HTTP的工作方式
HTTP协议采用了请求/响应的工作方式。基于HTTP1.0协议的客户端在每次向服务器发出请求后,服务器就会向客户端返回响应消息(包括请求是
否正确以及所请求的数据),在确认客户端已经收到响应消息后,服务端就会关闭网络连接(其实是关闭TCP连接)。在这个数据传输过程中,并不保存任何历史
信息和状态信息,因此,HTTP协议也被认为是无状态的协议,图1描绘了HTTP1.0协议的通讯过程。
在HTTP1.0协议中,当Web浏览器发出请求时,就意味着一个请求/响应会话已经开始。在请求、响应结束后,服务器就会立刻关闭这个连接。这种
会话方式虽然简便,但它会带来另外一个问题。如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,如JavaScript
文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。如果这样的资源很多的话,就会加重服务器的负担,同时也会
影响客户端浏览器加载HTML等Web资源的效率。
在对上述的缺陷进行改进和完善后,HTTP1.1协议进入了我们的视线。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接
支持。当客户端使用HTTP1.1协议连接到服务器后,服务器就将关闭客户端连接的主动权交还给客户端;也就是说,在客户端向服务器发送一个请求并接收以
一个响应后,只要不调用Socket类的close方法关闭网络连接,就可以继续向服务器发送HTTP请求。当HTML中含有其他的Web资源时,浏览器
就可以使用同一个网络连接向下载这些资源,这样就可以大大减轻服务器的压力。图演示了这一过程。
HTTP1.1除了支持持久连接外,还将HTTP1.0的请求方法从原来的三个(GET、POST和HEAD)扩展到了八个(OPTIONS、GET、
HEAD、POST、PUT、DELETE、TRACE和CONNECT)。而且还增加了很多请求和响应字段,如上述的持久连接的字段
Connection。这个字段有两个值,Close和Keep-Alive。如果使用Connection:Close,则关闭HTTP1.1的持久连
接的功能,要打开HTTP1.1的持久连接的功能,必须使用Connection:Keep-Alive,或者不加Connection字段(因为
HTTP1.1在默认情况下就是持久连接的)。除了这些,还提供了身份认证、状态管理和缓存(Cache)等相关的请求头和响应头。
【面试】http协议知识的更多相关文章
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- PHP面试 PHP基础知识 十(网络协议)
网络协议 HTTP协议状态码 状态分为五大类:1XX.2XX.3XX.4XX.5XX 1XX:信息类状态码 表示接受请求正在处理 2XX:success 成功状态码 请求正常处理完毕 3XX:重定 ...
- Web开发HTTP协议知识_常用http方法、http状态码等(前端开发和面试必备))
http请求由三部分组成,分别是:请求行.消息报头.请求正文. HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连 ...
- java面试01-网络知识
1.网络七层协议 第一层:物理层 机械.电子.定时接口通信信道上的原始比特流传输 第二层:数据链路层 物理寻址,同时将原始比特流转变为逻辑传输线路 第三层:网络层 控制子网的运行‘如逻辑编址.分组传输 ...
- 死磕面试 - Dubbo基础知识37问(必须掌握)
作为一个JAVA工程师,出去项目拿20k薪资以上,dubbo绝对是面试必问的,即使你对dubbo在项目架构上的作用不了解,但dubbo的基础知识也必须掌握. 整理分享一些面试中常会被问到的dubbo基 ...
- TCP/IP协议知识科普
简介 本文主要介绍了工作中常用的TCP/IP对应协议栈相关基础知识,科普文. 本博客所有文章:http://www.cnblogs.com/xuanku/p/index.html TCP/IP网络协议 ...
- http协议知识整理(转)
HTTP 协议 作为web开发人员,了解一些http协议的知识很有必要.本文简单介绍了HTTP协议的知识,若有错误的地方,望大家指正. 1.HTTP协议是什么? http协议是一个应用层的协议.规定了 ...
- http协议知识整理
HTTP 协议 作为web开发人员,了解一些http协议的知识很有必要.本文简单介绍了HTTP协议的知识,若有错误的地方,望大家指正. 1.HTTP协议是什么? http协议是一个应用层的协议.规定了 ...
- 面试 04-HTTP协议
04-HTTP协议 一面中,如果有笔试,考HTTP协议的可能性较大. #前言 一面要讲的内容: HTTP协议的主要特点 HTTP报文的组成部分 HTTP方法 get 和 post的区别 HTTP状态码 ...
随机推荐
- Windows10环境搭建Elasticsearch+Kibana+Marvel
环境: Windows10企业版X64 Elasticsearch-2.4.1 Kibana-4.6.1 Marvel-2.0+ 步骤: 安装Elasticsearch:官网下载Elasticsear ...
- Java开发面试
有很多文章说面试相关的问题,有国内也有国外的,但是我相信不少人,特 别是新人看完后还是觉得比较虚比较泛,似乎好像懂了,但是一遇到面试还 是有些手无足措或者重复犯一些错误.本篇文章正是结合实际经 ...
- 【转载】Arcengine效率探究之二——属性的更新
文转载自hymyjl2010<Arcengine效率探究之二——属性的更新> 修改一批要素的属性有多种方法,当数据量较大时,若选择不当可能会大大影响速度. 一.IRowBuffer 方 ...
- vue2.0学习(二)
1.关于模板渲染,当需要渲染多个元素时可以 <ul> <template v-for="item in items"> <li>{{ item. ...
- C和指针 第七章 习题
7.1 hermite递归函数 int hermite(int n, int x) { if (n <= 0) { return 1; } if (n == 1) { return 2 * x; ...
- 巧用dimens适配多个分辨率
让应用自动适配多个分辨率的屏幕,是每个android程序员的基本功,就好像前端工程师熟练编写CSS Hack一样.适配工作中一个重要的工作就是对页面的调整. 对于页面的适配,有很多的方法和技巧.比 ...
- git 教程(15)--分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...
- Linux 下测试网卡性能命令iperf 的用法
很多文件系统都自带iperf 命令,所以不用作多的移植工作. 如下查看他的帮助信息. Qt@aplex:~$ iperf -h Usage: iperf [-s|-c host] [options] ...
- Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...
- Javascript 执行环境及作用域
执行环境是javascript中最为重要的一个概念. 执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为. 每个执行环境都有一个与之关联的变量对象(variable object),环境 ...