总结下HTTP在笔试面试中的考点,参考自各大博客、书籍及师兄师姐给的资料,持续更新。。。
1.HTTP协议
即超文本传输协议(Hypertext transfer protocol),是一个基于请求与响应模式的、无状态的、应用层协议,常基于TCP的连接方式,默认端口号为80,HTTPS默认端口号为443
2.常见的HTTP请求方法
GET,用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST,用于传输信息给服务器,主要功能与GET方法类似
PUT,传输文件,报文主体中包含文件内容,保存到对应URI位置
HEAD,获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
DELETE,删除文件,与put方法相反,删除对应URI位置文件
OPTIONS,查询相应URI支持的HTTP方法
3.HTTP状态码
由三位数字组成,第一个数组定义了响应类别
1xx,指示信息,表示请求已经接收,继续处理
2xx,成功,表示请求被成功接收、理解、接受
3xx,重定向,要完成请求必须进行更进一步的操作
4xx,客户端错误,请求有语法错误或请求无法实现
5xx,服务器错误,服务器未能实现合法请求
常见的列举以下
200 OK 客户端发来的请求在服务器端被正常处理
204 No Content 请求成功处理,但没有资源可返回,浏览器显示的页面不发送更新
206 Partial Content 客户端只想要一部分
301 Moved Permanently 永久性重定向
302 Found 临时性重定向,禁止POST改为GET
303 See Other 明确表示用户应该采用GET方法获取资源
304 Not Modified 客户端发送附带条件的请求,资源已找到但未符合条件
307 Temporary Redirect 临时重定向
400 Bad Request 客户端请求有语法错误,不能被服务器理解
401 Unauthorized 请求未经授权
403 Forbidden 服务器收到请求但是拒绝提供服务
404 Not Found 请求资源不存在,eg,输入错误URL
500 Internal Server Error 服务器发生不可预期的错误
503 Service Unavailable 服务器当前不能处理客户端请求,一段时间后可能恢复正常
4.HTTP请求
第一部分,请求行,说明请求类型,要访问的资源及HTTP版本,method表示+URI+version
第二部分,请求头部,紧接着请求行
第三部分,空行,请求头部后面的空行是必须的
第四部分,请求数据即主体
get例子
post例子
5.HTTP响应
第一部分,状态行,HTTP协议版本号、状态码、状态消息
第二部分,响应报头,说明客户端要使用的一些附加信息
第三部分,空行,必须
第四部分,响应正文
6.get和post的区别
浏览器地址栏呈现结果不同,真正的是向服务器端发起请求的格式不同
区别一:
get重点从服务器上获取资源,post重点在向服务器发送数据
区别二:
get传输数据是通过URL请求,以fiels=value形式,置于URL之后,并用?连接,多个请求间用&连接
post传输数据通过HTTP的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程是用户不可见的
区别三:
get传输的数据量小,因为URL长度受限制,但效率高
post可以传输大量数据,所以上传文件时用post
区别四:
get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等
post较get安全性高
区别五:
get只能支持ASCII字符,向服务器传的中文字符可能会乱码
post支持标准字符集,可以正确传递中文字符
7.HTTP1.1和HTTP1.0的主要区别
(1)长连接,HTTP1.0需要keep-alive参数告知服务器需要建立一个长连接,而HTTP1.1默认支持长连接
(2)节约带宽,HTTP1.1支持只发送header信息,不带body,如果客户端有权访问,服务器就返回100,否则返回401,客户如果接受100,就发送body,否则就不发送body,节约贷款
(3)host,HTTP1.1在请求消息的报文头中加入了host域
(4)ETag头,HTTP1.1中引入了ETag头,它的值entitytag可以用来唯一描述一个资源,请求消息中可以使用if-none-match头域来匹配资源的entitytag是否有变化
(5)Cache-control,HTTP1.1新增了Cache-control头域,支持一个可扩展的指令子集
(6)Warning头域,HTTP1.0只定义了16个状态码响应,对错误或警告的提示不够具体,HTTP1.1引入了一个头域,增加对错误或警告信息的描述,且新增了24个状态响应码
8.HTTP1.1和HTTP2.0主要区别
(1)多路复用,HTTP2.0采用多路复用技术,同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级,每个请求或响应可以看做一个流,每个流是并发或者并行处理的,互不影响,而HTTP1.1采用流水线处理方式,虽然一个连接可以发送多个请求或者响应,但是后面的流必须等待前面的流,容易阻塞
(2)二进制格式,错误少,效率高
(3)报头压缩,由于tcp是慢启动,需要几个来回才能确定消息的参数信息和包的信息,压缩报头能节省很多时间
(4)服务器将响应主动推送到客户端的缓存中:比如浏览一个网页时,服务器返回HTML,服务器发送js、css、图片等资源前需要等待浏览器解析HTML并相应,如果服务器主动推送这些静态数据将提高效率
9.当输入www.google.com时,页面发生了哪些变化
(1)域名解析,检查顺序为:浏览器自身DNS缓存、OS自身的DNS缓存、读取host文件、本地域名服务器、权限域名服务器、根域名服务器,如果有且没有骨气,则结束本次域名解析,域名解析成功后,进行后续操作
(2)tcp的3次握手建立连接
(3)建立连接后,发起HTTP请求
(4)服务器端响应HTTP代码,浏览器得到HTTP请求的内容
(5)浏览器解析HTML代码,并请求HTML代码中的资源
(6)浏览器对页面进行渲染,展现在用户面前