HTTP面试题
Posted znlam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP面试题相关的知识,希望对你有一定的参考价值。
1.在浏览器输入URL到页面加载发生了什么?
- 域名解析: 网址到IP地址的转换
- TCP连接: 采用三次握手进行连接
- 发送HTTP请求: 构建HTTP请求报文通过TCP协议发送到服务器指定端口
- 服务端响应HTTP请求: 对HTTP协议进行解析,并返回数据
- 浏览器解析渲染页面
2.一次完整的HTTP请求经历的7个步骤
1. 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
2. Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。
3. Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
4. Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
5. Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
6. Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
3.HTTP的缓存机制
浏览器的缓存机制有三种:html5离线储存和本地缓存、HTML Meta标签、HTTP协议缓存
1.appcache、sessionStorage、localStorage等等。
2.<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
3.HTTP缓存:它是通过 HTTP 头信息来控制缓存的,HTTP 头信息可以让你对浏览器和代理服务器如何处理你的副本进行更多的控制。他们在 HTML 代码中是看不见的,一般由 Web 服务器自动生成。但是,根据你使用的服务器,你可以在某种程度上进行控制。
http://www.alloyteam.com/2012/03/web-cache-2-browser-cache/
4.cookies机制和session机制
5.HTTP优化方案
6.不同版本的HTTP区别
7.HTTP1.1引入分块传输编码提供的好处
8.长连接与短链接的区别,以及应用场景
9.常见web攻击
10.站内跳转与外部重定向的区别
11.304缓存原理
12.HTTP2.0
13.HTTP报文
14.
- 什么是HTTP协议
超文本传输协议,客户端和服务端之间数据传输的格式规范
- HTTP协议的特点
(1) 支持客户端/服务端模式
(2) 简单快速:客户向服务器请求服务时,只需传送请求方法和路径
(3) 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-type加以标记
(4) 无连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接(节省传输时间)Keep-Alive
(5) 无状态:对事务处理没有记忆能力;(返回请求数据后,缺少状态意味着如果后续处理需要前面的信息,则它必须重传)cookie、session
- HTTP协议的请求方式
(1) GET:请求访问已被URI识别的资源(可通过URL传参给服务器)
(2) POST:传输数据给服务器(与get方法类似)
(3) PUT:传输文件(报文主体中包含文件内容,保存到对应的URI位置)
(4) DELETE:删除文件(与put相反,删除对应URI位置文件)
(5) HEAD:获得报文首部(与get类似,只是不返回报文主体,一般用于验证URI是否有效)
(6) OPTIONS:查询相应URI支持的HTTP方法
- GET与POST请求的区别
(1) GET重点从服务器上获取资源;POST重点向服务器发送数据
(2) GET请求数据是通过URL请求,(?连接,多个请求数据间用&连接)POST将数据封存在请求实体中发送给服务器,这个过程用户不可见
(3) GET传输的数据量小,因为URL长度限制,但效率较高;POST可以传输大量数据,所以上传文件时只能用POST方式
(4) GET不是安全的,因为URL是可见的,可能泄漏私密信息;POST较GET安全性较高
(5) GET方式只支持ASCII字符,向服务器传输的中文字符可能会乱码;POST支持标准字符集,可以正确传递中文字符
- HTTP1.0与HTTP1.1的区别
HTTP1.0,当建立连接后,客户端发送一个请求,服务器返回一个信息后就关闭连接,浏览器下次请求时又要建立连接;HTTP1.1引入持续连接概念,客户端可以连续发送多个请求,不用等待每一个响应的到来
- 常见的HTTP协议状态
(1) 1XX:信息性状态码(接收的请求正在处理)
(2) 2XX:成功状态码(请求正常处理完毕)
(3) 3XX:重定向状态码(需要进行附加操作以完成请求)
(4) 4XX:客户端错误状态码(服务器无法处理请求)
(5) 5XX:服务器错误状态码(服务器处理请求出错)
---------------------------------------------------------------
200请求被正常处理
204请求被受理但没有资源可以返回
206客户端只请求资源的一部分,服务端成功的执行了这部分的GET请求;响应报文中包含由Content-Range指定范围的实体内容
301永久性重定向(请求的资源已被分配了新的URI,以后使用资源都使用新的URI,如指定的路径的最后忘记添加斜杠‘/’就会产生301状态码)
302临时重定向(请求的资源已经被分配了新的URI,希望用户本次使用新的URI访问)服务器返回的头部信息中包含一个Location字段,内容是重定向到的url
303与302功能相似,该状态码表示请求对应资源存在着另一个URI,应使用GET方法定向获取请求的资源
304发送附带条件的请求时,条件不满足返回,与重定向无关
307临时重定向,与302类似,不被强制使用GET
当301,302,303响应状态码返回时,几乎所有浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送
301、302标准是禁止将POST方法改成GET方法
400请求报文中存在语法错误
401请求需要认证
403请求资源禁止被访问(从未授权的发送源IP地址试图访问)
404服务器无法找到对应的资源
500服务器内部错误
503服务器正忙(处于超负荷或正在进行停机维修,现无法处理请求)
- HTTP协议的组成
(1) 请求报文
① 请求行:请求方法、URI、HTTP版本信息
② 请求首部字段
③ 请求内容实体
(2) 响应报文
① 状态行:状态码、状态码的原因语句、HTTP版本
② 响应首部字段
③ 响应内容实体
- HTTP协议首部字段
a、通用首部字段(请求报文与响应报文都会使用的首部字段)
- Date:创建报文时间
- Connection:连接的管理
- Cache-Control:缓存的控制
- Transfer-Encoding:报文主体的传输编码方式
b、请求首部字段(请求报文会使用的首部字段)
- Host:请求资源所在服务器
- Accept:可处理的媒体类型
- Accept-Charset:可接收的字符集
- Accept-Encoding:可接受的内容编码
- Accept-Language:可接受的自然语言
c、响应首部字段(响应报文会使用的首部字段)
- Accept-Ranges:可接受的字节范围
- Location:令客户端重新定向到的URI
- Server:HTTP服务器的安装信息
d、实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
- Allow:资源可支持的HTTP方法
- Content-Type:实体主类的类型
- Content-Encoding:实体主体适用的编码方式
- Content-Language:实体主体的自然语言
- Content-Length:实体主体的的字节数
- Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
以上是关于HTTP面试题的主要内容,如果未能解决你的问题,请参考以下文章
经验总结:Java高级工程师面试题-字节跳动,成功跳槽阿里!
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试