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. c# 调用Go 动态库

    [StructLayout(LayoutKind.Sequential)] public struct GoMem { public IntPtr data; public UInt64 len; p ...

  2. Python3 Socket

    Socket socket介绍 socket意为套接字,是应用层与传输层TCP/IP,UDP之间通信的中间软件抽象层,它是一组接口.使用时只需遵循socket的格式与规定去编程,让socket组织数据 ...

  3. ABBYY FineReader 与资源管理器的集成使用

    ABBYY FineReader 15(Windows系统)与 Windows 资源管理器的集成使用后,在不打开软件的情况下,可通过右击启动快捷菜单开启. 通过与Windows资源管理器的集成,用户可 ...

  4. 思维导图MindManager属性功能怎么合理使用

    在MindManager中为主题添加相应的标注可以使读者更好的理解主题内容,增强导图的可读性,因此,如何在MindManager中为主题添加标注也就成了我们的关注点. 巧妙使用这款思维导图软件的属性功 ...

  5. MathType如何打出带圆圈的点

    学习了圆的知识后,知道可以用带圆圈的点表示圆,比如"⊙O"表示圆O,即圆心为O的圆.那么要怎么在MathType中打出带圆圈的点? 方法一.直接在工具栏上选择输入 打开MathTy ...

  6. C#设计模式-装饰器模式(Decorator Pattern)

    引言 当我们完成一个软件产品开发后就需要对其进行各种测试,适配快速迭代下质量的保障.当有一个完善的产品的对象后,如果我们想要给他添加一个测试功能,那么我们可以用一个新的类去装饰它来实现对原有对象职责的 ...

  7. 提交的忠金融的bug

  8. 2018年第九届蓝桥杯【C++省赛B组】B、C、D、F、G 题解

    B. 明码 #STL 题意 把每个字节转为2进制表示,1表示墨迹,0表示底色.每行2个字节,一共16行,布局是: 第1字节,第2字节 第3字节,第4字节 .... 第31字节, 第32字节 给定一段由 ...

  9. kali修改配置文件后并保存

    vim是进入配置文件并修改 修改完按Esc进入控制模式,再:w保存 :wq是保存并退出

  10. 20191226_rpm命令

    安装rpm包: [root@localhost ~]# rpm -ivh test.rpm rpm查询命令: [root@localhost ~]# rpm -qa | grep mysql mysq ...