HTTP请求详解

HTTP请求详解

 

使用http协议进行前后端通信

web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议作为规范,完成从客户端到服务端等一系列运作过程。web是建立在HTTP协议上通信的。

 
1.HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列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连接,然后如果浏览器或者服务器在其头信息加入了这行代码

HTTP是一种无状态协议。 Connection:keep-alive TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
复制代码

 

2.HTTP请求格式
 
2.1  当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
l   请求方法URI协议/版本
l   请求头(Request Header)
l   请求正文
 
(1)请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:http://localhost:63342/webpack/index.html HTTP/1.1
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本,“HTTP/1.1代表协议和协议的版本。
 
(2)请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
 
 
(3)请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

 

插个知识点,简单讲一下get请求和post请求的区别:

1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来
2.使用Get请求长度有限制,发送数据量小;Post请求长度无限制,发送数据量大;
3.从性能角度上,发送相同的数据,GET请求的速度最多可达到POST的两倍。
4.使用Get请求能够被缓存,POST请获得的网络数据不能被缓存。

 

 2.2  HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
l 协议状态版本代码描述
l 响应头(Response Header)
l 响应正文
 
(1)协议状态版本代码描述
  协议状态代码它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):

(2)响应头(Response Header)

响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:

(3)响应正文

响应正文就是服务器返回的HTML页面:

 

插个知识点,列出一些常用的状态码含义:

复制代码
1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:
200 请求已成功,请求所希望的响应头或数据体将随此响应返回。

3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。
303 对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。
304 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。
  客户端收到304响应后,就会从缓存中读取对应的资源.

4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT Found,意味着请求中所引用的文档不存在。
400 1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。   2、请求参数有误。
403 服务器已经理解请求,但是拒绝执行它。
404 请求失败,请求所希望得到的资源未被在服务器上发现。
5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:
500 服务器内部错误,一般来说,这个问题都会在服务器的程序码出错时出现。
复制代码

 

3、URI和URL

URI用字符串标示某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。

URI要使用涵盖全部必要信息的URI、绝对URL以及相对URL。相对URL是指从浏览器中基本URI处理的URL,来先看下URI的格式

posted @ 2020-07-06 16:22  小夜猫啊  阅读(273)  评论(0编辑  收藏  举报