首先理解一次完全的HTTP要求到相应的过程须要的步骤:

1. 域名解析

2. 发起TCP的3次握手

jsp收到http请求图解HTTP要求与响应 Docker

3. 建立TCP连接后发起http要求

4. 做事器端相应http要求,浏览器得到html代码

5. 浏览器解析html代码,并要求html代码中的资源

6. 浏览器对页面进行渲染呈现给用户

1.域名解析

便是将网站名称转变成IP地址:localhost-->127.0.0.1

像什么hosts文件,DNS域名解析等等可以实现这种功能

2.发起TCP的3次握手

在客户机和做事器之间建立正常的TCP网络连接时:

客户机首先发出一个SYN,

做事器利用SYN+ACK应答表示吸收到了这个,

末了客户机再以ACK相应。

这样在客户机和做事器之间才能建立起可靠的TCP连接,数据才可以在客户机和做事器之间通报。

下面一段内容引自一次完全的HTTP事务是若何一个过程?

拿到域名对应的IP地址之后,User-Agent(一样平常是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向做事器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接要求。
这个连接要求(原始的http要求经由TCP/IP4层模型的层层封包)到达做事器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接要求,解封包,一层一层的剥开),还有可能要经由Netfilter防火墙(属于内核的模块)的过滤,终极到达WEB程序(本文就以Nginx为例),终极建立了TCP/IP的连接。

3.发起HTTP要求(HTTP Request)

所谓的HTTP要求,也便是Web客户端向Web做事器发送信息,这个信息由如下三部分组成:

(1)要求行

例如:GET www.cnblogs.com HTTP/1.1

要求行写法是固定的,由三部分组成,

第一部分是要求方法:

除了常见的只有Get和Post方法,实际上HTTP要求方法还有很多,比如: PUT方法,DELETE方法,HEAD方法,CONNECT方法,TRACE方法

第二部分是要求网址,

第三部分是HTTP版本。

(2)HTTP头

HTTP头在HTTP要求可以是3种HTTP头:1. 要求头(request header) 2. 普通头(general header) 3. 实体头(entity header)

常日来说,由于Get要求每每不包含内容实体,因此也不会有实体头。

(3)内容

只在POST要求中存在,由于GET要求并不包含任何实体

4.做事器端HTTP相应(HTTP Response)要求

当Web做事器收到HTTP要求后,会根据要求的信息做某些处理(这些处理可能仅仅是静态的返回页,或是包含Asp.net, PHP, Jsp等措辞进行处理后返回),相应的返回一个HTTP相应。
HTTP相应在构造上很类似于HTTP要求,也是由三部分组成,分别为:

1.状态行

例如:HTTP/1.1 200 OK

第一部分是HTTP版本

第二部分是相应状态码

第三部分是状态码的描述

信息类 (100-199)

相应成功 (200-299)

重定向类 (300-399)

客户端缺点类 (400-499)

做事端缺点类 (500-599)

2.HTTP头

HTTP相应中包含的头包括:1. 相应头(response header) 2. 普通头(general header) 3. 实体头(entity header)。

3.返回内容

HTTP相应内容便是HTTP要求所要求的信息。
这个信息可以是一个HTML,也可以是一个图片。
相应的数据格式通过Content-Type字段来得到:Content-Type:image/png;或者我们熟习的Content-Type:text/html

下面是一些常见的Content-Type字段的值。

text/plain

text/html

text/css

image/jpeg

image/png

image/svg+xml

audio/mp4

video/mp4

application/javascript

application/pdf

application/zip

application/atom+xml

5.浏览器解析html代码,并要求html代码中的资源

有时候我们获取一个HTML页面,在对浏览器对HTML解析的过程中,如果创造额外的URL须要获取的内容,会再次发起HTTP要求去做事器获取,比如样式文件,图片。
许多个HTTP要求,只依赖一个TCP连接就够了,这便是所谓的持久连接。
也是所谓的一次HTTP要求完成。