04-HTTP协议

一面中,如果有笔试,考HTTP协议的可能性较大。

#前言

一面要讲的内容:

  • HTTP协议的主要特点

  • HTTP报文的组成部分

  • HTTP方法

  • get 和 post的区别

  • HTTP状态码

  • 什么是持久连接

  • 什么是管线化

二面要讲的内容;

  • 缓存

  • CSRF攻击

#HTTP协议的主要特点

  • 简单快速

  • 灵活

  • 无连接

  • 无状态

通常我们要答出以上四个内容。如果实在记不住,一定要记得后面的两个:无连接、无状态。

我们分别来解释一下。

#简单快速

简单:每个资源(比如图片、页面)都通过 url 来定位。这都是固定的,在http协议中,处理起来也比较简单,想访问什么资源,直接输入url即可。

#灵活

http协议的头部有一个数据类型,通过http协议,就可以完成不同数据类型的传输。

#无连接

连接一次,就会断开,不会继续保持连接。

#无状态

客户端和服务器端是两种身份。第一次请求结束后,就断开了,第二次请求时,服务器端并没有记住之前的状态,也就是说,服务器端无法区分客户端是否为同一个人、同一个身份。

有的时候,我们访问网站时,网站能记住我们的账号,这个是通过其他的手段(比如 session)做到的,并不是http协议能做到的。

#HTTP报文的组成部分

在回答此问题时,我们要按照顺序回答:

  • 先回答的是,http报文包括:请求报文和响应报文。

  • 再回答的是,每个报文包含什么部分。

  • 最后回答,每个部分的内容是什么

#请求报文包括:

  • 请求行:包括请求方法、请求的url、http协议及版本。

  • 请求头:一大堆的键值对。

  • 空行指的是:当服务器在解析请求头的时候,如果遇到了空行,则表明,后面的内容是请求体。

  • 请求体:数据部分。

#响应报文包括:

  • 状态行:http协议及版本、状态码及状态描述。

  • 响应头

  • 空行

  • 响应体

#HTTP方法

包括:

  • GET:获取资源

  • POST:传输资源

  • put:更新资源

  • DELETE:删除资源

  • HEAD:获得报文首部

HTTP方法有很多,但是上面这五个方法,要求在面试时全部说出来,不要漏掉。

get 和 post 比较常见。

put 和 delete 在实际应用中用的很少。况且,业务中,一般不删除服务器端的资源。

head 可能偶尔用的到。

#get 和 post的区别

区别有很多,如果记不住,面试时,至少要任意答出其中的三四条。

有一点要强调,get是相对不隐私的,而post是相对隐私的。

我们大概要记住以下几点:

1、浏览器在回退时,get不会重新请求,但是post会重新请求。【重要】

2、get请求会被浏览器主动缓存,而post不会。【重要】

3、get请求的参数,会报保留在浏览器的历史记录里,而post不会。做业务时要注意。为了防止CSRF攻击,很多公司把get统一改成了post。

4、get请求在url中传递的参数有大小限制,基本是2kb,不同的浏览器略有不同。而post没有注意。

5、get的参数是直接暴露在url上的,相对不安全。而post是放在请求体中的。

#http状态码

http状态码分类:

常见的http状态码:

部分解释:

  • 206的应用:range指的是请求的范围,客户端只请求某个大文件里的一部分内容。比如说,如果播放视频地址或音频地址的前面一部分,可以用到206。

  • 301:重定向(永久)。

  • 302:重定向(临时)。

  • 304:我这个服务器告诉客户端,你已经有缓存了,不需要从我这里取了。

400和401用的不多。403指的是请求被拒绝。404指的是资源不存在。

#持久链接/http长连接

如果你能答出持久链接,这是面试官很想知道的一个点。

  • 轮询:http1.0中,客户端每隔很短的时间,都会对服务器发出请求,查看是否有新的消息,只要轮询速度足够快,例如1秒,就能给人造成交互是实时进行的印象。这种做法是无奈之举,实际上对服务器、客户端双方都造成了大量的性能浪费。

  • 长连接:HTTP1.1中,通过使用Connection:keep-alive进行长连接,。客户端只请求一次,但是服务器会将继续保持连接,当再次请求时,避免了重新建立连接。

注意,HTTP 1.1默认进行持久连接。在一次 TCP 连接中可以完成多个 HTTP 请求,但是对每个请求仍然要单独发 header,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

#长连接中的管线化

如果能答出管线化,则属于加分项。

#管线化的原理

长连接时,默认的请求这样的:

	请求1 --> 响应1 -->请求2 --> 响应2 --> 请求3 --> 响应3
 

长连接中的管线化,请求是这样的:

	请求1 --> 请求2 --> 请求3 --> 响应1 --> 响应2 --> 响应3
 

管线化就是,我把现在的请求打包,一次性发过去,你也给我一次响应回来。

#管线化的注意事项

面试时,不会深究管线化。如果真要问你,就回答:“我没怎么研究过,准备回去看看~”

面试 04-HTTP协议的更多相关文章

  1. 不惧面试:HTTP协议(1) - 基础扫盲

    v博客前言 先交代下背景,之前在一家公司面试.NET开发,去了先是做一份笔试题,有一半是关于HTTP协议的,技术总监直接面试,也是问一大堆HTTP协议的知识点,可能跟该公司的产品有关,该公司属于互联网 ...

  2. 不惧面试:HTTP协议(3) - Cookie

    v博客前言 先交代下背景,写这个系列的原因是总结自己遇到的面试题以及可能遇到的题目,更重要的是,今年定的目标是掌握网络这一块的知识点,先是搞懂HTTP协议,然后是TCP/IP协议,再就是WCF如何运用 ...

  3. 关于面试总结8-http协议相关面试题

    前言 在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐 ...

  4. 网络协议相关面试问题-http协议相关面试问题

    HTTP协议简介: 一些基本概念: 协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则. HTTP协议:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML ...

  5. 前端面试:Http协议与浏览器

    Http与Https的区别 Http是明文传输的,Https协议是在Http协议上添加了SSL的加密协议,可以进行加密传输和身份验证. 其实就是说Http对网络传输完全是裸奔状态,也就没办法防范中间人 ...

  6. 【Java面试】TCP协议为什么要设计三次握手?

    一个工作5年的粉丝,最近去面试了很多公司,每次都被各种技术原理题问得语无伦次. 由于找了快1个月时间的工作,有点焦虑,来向我求助. 我能做的只是保证每天更新一个面试题,然后问他印象最深刻的一个面试题是 ...

  7. 【面试】http协议知识

    一.什么是HTTP协议        HTTP协议是一种应用层协议,HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写.HTTP可以通过传输层的TCP协议在客 ...

  8. 面试:http协议

    转自:http://www.cnblogs.com/ranyonsue/p/5984001.html#undefined HTTP简介 HTTP协议是Hyper Text Transfer Proto ...

  9. 斐迅面试记录—Http协议中的Header

    HTTP Request的Header信息 1.HTTP请求方式 如下表: 说明:  主要使用到“GET”和“POST”. 实例: POST /test/tupian/cm HTTP/1.1 分成三部 ...

  10. 面试准备 HTTP协议

    http协议的主要特点 简单快速  //某个资源是固定的 (统一资源符)UII 灵活  //http头部有个数据类型,完成不同数据类型的传输 无连接  //链接一次就会断开 无状态 //客户端和服务端 ...

随机推荐

  1. FL Studio乐理教程之调式音阶

    在我们使用FL制作音乐时,乐理是必不可少的制作基础,本篇教程将结合FL Studio为大家讲解基础乐理及在FL Studio20中的使用技巧. 添加一个乐器,打开Piano Roll(钢琴窗). 首先 ...

  2. JUC并发工具包之Semaphore

    目录 Semaphore (JDK) Timed Semaphore (Apache Commons) Semaphore vs. Mutex CodeRepo Semaphore (JDK) 我们使 ...

  3. zabbix 监控文件夹

    安装inotify wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar -zx ...

  4. P3287 [SCOI2014]方伯伯的玉米田

    首先可以证明,一定存在一种最优解,每次选择的区间结尾都是 \(n\).因为如果某一个区间结尾不是 \(n\),将其替换成 \(n\) 仍然保持单调不下降.接着都按这个策略拔高玉米. 令 \(f_{i, ...

  5. npm中的命令指令的参数的 简写介绍

    在使用npm时,使用的的缩写 install: 缩写为i,表示安装. --global: 缩写为-g,表示:全局标识,可以在任意目录中使用该工具.全局安装. --save: 缩写为-S,表示安装的包将 ...

  6. LeetCode 048 Rotate Image

    题目要求:Rotate Image You are given an n x n 2D matrix representing an image. Rotate the image by 90 deg ...

  7. Bootstrap(修改中)

    表格 斑马表格 <table class="table-striped"> </table> 鼠标经过表格的hover效果 <table class= ...

  8. Kafak探究之路- 内部结构小结

    1.框架与工作流 2 内部结构 kafka的每个主题分区的数据在 first-0(主题名-分区号)文件夹下,保存 n组xxx.log文件与xxx.index文件.log文件存发送消息的元数据,每个大小 ...

  9. 微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:6

    题目描述: 给定一个字符串,逐个翻转字符串中的每个单词. 说明: 无空格字符构成一个 单词 .输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括.如果两个单词间有多余的空格,将反转后 ...

  10. Python怎么控制将一个整数输出成指定长的十六进制数?

    使用format方法,在格式控制中进行控制,具体控制参数为: {:#016X} 其中: 大括号表示该处从后面的format的参数中取值 冒号表示格式控制开始 0表示长度不足16位补0 16表示长度 X ...