通信之术-HTTP协议概述
Posted 默事记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通信之术-HTTP协议概述相关的知识,希望对你有一定的参考价值。
通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,而我们今天要讲的是计算机与计算机之间的通信。
网络互联参考模型:OSI七层模型和TCP/IP的四层模型,OSI模型是制定的国际标准,而TCP/IP模型是落地并广泛使用的标准。
每一层使用不用的网络协议,网络协议又是什么?
人与人之间通信用的是语言,大家都遵守统一的约定,才能明白需要表达的含义。网络协议规定是计算机与计算机之间如何通信。网络协议三要素为:
语法:确定通信双方"如何讲",定义了数据格式,编码和信号电平等
语义:确定通信双方"讲什么",定义了用于协调同步和差错处理等控制信息
时序:确定通信双方"讲话的次序",定义了速度匹配和排序等
通俗的讲,两个人进行交流,约定都讲中文,对于字、词的含义理解是一致的,说话顺序是我问完你再答。
说了一部分网路知识,后面会单独写几篇关于TCP的文章。
此处应有链接:TCP知识
回到我们的正题
HTTP - Hypertext Transfer Protocol
超文本传输协议
我们先从宏观上看下http协议所处的位置,属于应用层。应用层是干什么呢?你可以理解为计算机里具体的应用,比如浏览器、邮箱等。比如浏览器通信使用的http协议,邮箱使用的smtp协议。这一层的协议主要是应用之间相互理解用的,比如你发了http报文格式的,浏览器就能认识。比如如果我只懂中文,你却偏偏要说英语,双方就无法沟通。
http协议是基于传输层tcp协议的,tcp是进程间端口到端口的通信。http通信实际是需要建立tcp连接的,http报文转为tcp报文在传输层传输。后面用wireshark给大家抓个tcp包看看。而再下一层的网络层是端与端的连接,比如通过IP访问到对方机器。
既然是传输协议,就涉及到客户端和服务端的交互,该协议采用的请求-响应模型。http从设计之初就是为了浏览器用的,浏览器向服务器发送http请求报文,服务器响应http报文,报文中包含html,浏览器解析html将内容内容展示到浏览器上。现在也普遍用于我们程序开发中的接口交互中,前端(h5、app)等请求服务端接口,服务端返回json报文。
带着问题去学习,这些也是面试高频题目
1> http1.0、http1.1、http2的区别?
http1.0 浏览器与服务器建立TCP连接,请求处理完后立即断开,建立和断开连接开销大。连接无法复用,每次都要三次握手,消耗资源影响性能。
http1.1的支持持久连接,在一个TCP连接上可以传输多次http请求和响应,http1.1线端阻塞(head-of-line blocking)问题待了解。
HTTP/2采用二进制格式而非文本格式。完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行。使用报头压缩,降低了开销。HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
2>http报文的组成?
单独写一篇吧,介绍抓包与报文详解。
详细介绍:抓包与报文详解
3>浏览器http协议工作流程?
1>浏览器分析url(统一资源定位符),表明要访问具体什么资源。
3>建立TCP连接,TCP的三次握手略。
4>浏览器发出http请求报文。
5>服务器接受请求,找到要访问的资源,构建响应报文。
6>TCP连接释放。
7>浏览器解析并展示响应报文。
4>http支持请求方法?
get、post恐怕大家再熟悉不过了。目前我在做的项目,前端请求后端会发起一次options请求,主要是为了验证接口连通性。当开始疑惑,为什么会有两次一样的请求,后来才发现第一次的是options的。
当使用get请求时,url的长度有限制,报文本身没有限制,是浏览器本身的限制。不同的浏览器长度限制不一样。
IE浏览器(Microsoft Internet Explorer) 对url长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。
firefox(火狐浏览器)的url长度限制为 65 536字符,但实际上有效的URL最大长度不少于100,000个字符。
chrome(谷歌)的url长度限制超过8182个字符返回414错误。
Safari的url长度限制至少为 80 000 字符。
5>http响应状态码有哪些?
常见错误码
2XX :成功
3XX : 重定向
304-服务器告诉客户,原来缓冲的文档还可以继续使用。
(If-Modified-Since)
4XX:客户端错误
400-Bad Request 服务器未能理解请求
403-Forbidden 对被请求页面的访问被禁止
404-没有找到目录或文件
405-Method Not Allowed 请求中指定的方法不被允许
406-服务器生成的响应无法被客户端所接受
414-Request-url Too long。get请求时,参数太长
5XX:服务器错误
500-服务器内部错误,遇到不可预知的情况
(程序报错异常未处理)
502-请求未完成,服务器从上游服务到一个无效的响应
(比如nginx代理配置不正确时)
503-Service Unavailable 服务器过载或当机
(秒杀大促时返回503)
504-Gateway Timeout 网关超时
(长时间没有响应,那个网关是指谁?)
详细状态码:http响应码参考
6>http和https的区别?
http默认使用80端口,https默认使用443端口。
http是明文传输,https需要证书,在ssl层进行加密传输。
https是无状态的,https可以构建基于身份认证的网络传输。
详细介绍:https实现原理
7>http短连接和长连接?
http是基于tcp的,实质上是tcp的长连接和短连接。
短连接:每次请求需要建立连接,通讯完就进行关闭。
长连接:在tcp连接上可以进行多次http的请求和响应。
从HTTP/1.1起,默认使用长连接,用以保持连接特性,响应头加入这行代码:Connection:keep-alive。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间。
talk is cheap!准备TCP学习章节进行试验展示浏览器tcp长连接通信。
8>http是无状态的,那如何实现会话保持?
无状态是指每次请求都是独立的,前一次请求和后一次请求没有任何关系。
保持会话的方式:
1、cookie 方式、url重写方式
2、session方式(cookie+session或者 token+redis)
3、jwt (json web token)流行的跨域身份解决方案
会话保持方案本质:返回客户端一个标识,客户端请求时再带上这个标识,服务端校验这个标识存在且有效,就知道是在会话期内。
讲给我老婆的大白话:比如你去某大楼拜访,每次拜访都要进行身份验证、登记、核实才放行,你每次去对方保安都认为你是新来的,这就是没有状态。后来大楼物业给你一个有有效期的通行证,你带着这个通行证在有效期内访问,就不用经过前面核实验证复杂的环节了。
详细介绍:会话保持方案
个人水平有限,理解有误的地方,请及时指正!
以上是关于通信之术-HTTP协议概述的主要内容,如果未能解决你的问题,请参考以下文章
JavaWebHttp网络协议包 --- 网络协议包概述;Http请求协议包内部空间;Http响应协议包内部结构;第二版互联网通信流程图