一、HTTP请求与响应过程
分为7个阶段,详细如下:
1. 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要三次握手建立TCP连接(一般TCP连接的端口号是80),之后才开始http请求。
2. Web浏览器向Web服务器发送请求行命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令,例如: GET / 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连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
二、用户请求页面的完整过程
(1)dns解析,获取ip地址及端口;
(2)建立TCP连接,3次握手;
(3)发送HTTP请求报文;
(4)服务器接收请求并作处理;
(5)服务器发送HTTP响应报文;
(6)断开TCP连接,4次握手
(7)浏览器解析返回数据,并渲染html页面
三、HTTP请求和响应格式
1. http请求格式由四部分组成:请求行、请求头、空行、消息体
请求行:是请求消息的第一行,由请求方式(GET/POST/DELETE/PUT)、请求资源路径、http版本号组成
请求头:请求头中的信息有和缓存相关的头(Cache-Control,If-Modified-Since)、客户端身份信息(User-Agent)等等
空行:空行表示消息头的内容到此为止,接下来该解析消息体了,(所以空行必不可少)
请求体:并不是所有的请求都有消息体。
2. http响应格式:状态行、响应头、空行、消息体
状态行:由http版本号、状态码、状态说明组成
响应头:响应头是服务器传递给客户端用于说明服务器的一些信息,以及将来继续访问该资源时的策略。
空行:空行表示消息头的内容到此为止,接下来该解析消息体了,(所以空行必不可少)
响应体:就是服务器返回的数据信息
四、OSI模型与TCP/IP协议
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,
国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,
即著名的OSI/RM模型(Open System Interconnection/Reference Model)。
它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:
五、服务器的http超时
就http来说,超时分为请求超时和响应超时,下面说一下超时的两种情况。
1、请求超时
比如现在网络超级不好,当客户端发起一个请求,通信层开始请求与服务器建立连接(包括在重试),如果在5S之内还没有连接到服务器,那么认为超时。
2、响应超时
当我们连接到服务器时,一般比如url参数(url?key=value)会直接提交到服务器,比如body类型的参数(Form、JsonBody、key=value&key1=value1等)我们会通过连接中的stream再手动写出去,当服务器接受到请求数据后开始【处理数据->响应】,这个【处理数据->响应】阶段就可能会发生响应超时,比如服务器去执行数据库操作,在5S内还没有对stream做出反馈,那么客户端就认为超时(少部分人对下载有误解,下载则不一样,因为一直有输出数据,也就是对stream做了反馈),主动断开和服务器的连接。
URLConnection类常见的超时处理就是调用其setConnectTimeout和setReadTimeout方法:
1、setConnectTimeout:设置连接主机超时(单位:毫秒)
2、setReadTimeout:设置从主机读取数据超时(单位:毫秒)
Http响应的状态码详解,参考链接: blog.csdn.net/m0_62617719…