无论是
1)通过JQuery的ajax方式,发起一个http url请求。
2)通过Firefox的HttpRequester插件(参数可以写入Content to Send、Headers、Parameters传递给后端),发起一个http url请求。
3)通过在浏览器地址栏,输入一个地址(http://127.0.0.1:8080/tesProject/user/modify?id=XXXXX),发起一个http url请求。
最原生的http url请求的过程是这样的,无论以上是哪一种http url请求,执行过程其实都是一样的:
通常情况下,HTTP协议的工作原理很好理解,用户通过客户端向服务端发起一个请求,创建一个TCP连接,指定端口号,默认是80,然后连接到服务器工作。在那个端口监听浏览器请求。一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回一个响应状态,比如"HTTP/1.0 404 OK",同时会返回特定的数据内容,如请求的资源,错误代码,其它状态信息等等。
HTTP协议的报文格式
HTTP协议的请求报文
当浏览器向服务器发送一个请求到Web服务器,它发送一个数据块,或请求信息,
HTTP请求信息包括3部分:
请求方法URI协议/版本;
请求头(Request Header);
请求正文;
下面是一个HTTP请求的示例:
GET/test.jsp HTTP/1.1 Accept:image/test.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate username=linuxidc&password=linuxidc
(1)请求方法URI协议/版本
请求的第一行是“方法/内容URL协议/协议版本名称”:
GET/test.jsp HTTP/1.1
上面的代码中,“GET”说明请求方法,“/test.jsp”表示网络资源,中间空格,最后说明协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种不同的请求方法。例如:HTTP1.1允许支持七种请求方法(也叫“动作”):GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。日常开发中,GET和POST是最常用的方法,主要在相关的Web开发中。
URL路径指定了要访问的网络资源。一般来说,我们需要的是相对路径,因为确定资源位置,知道网络资源相对于服务器的根目录的路径就可以,所以以“/”开头。在头信息结束时,声明了通信过程中HTTP协议版本的使用版本。
需要注意,方法名称很重要的一点是严格区分大小写。有些时候,某个请求所针对的资源可能不支持对应的请求方法,会通过不同的状态码给出响应。例如,服务器将返回一个状态码405(方法不允许),当请求服务器或方法不理解不支持相应的时间,返回一个状态码501(没有实现)。
(2)请求头(Request Header)
请求头包含了一些客户环境和请求的内容信息。例如,请求头可以声明浏览器内核和语言使用,请求的长度等。
Accept:image/test.image/jpeg.*/* Accept-Language:zh-cn Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible:MSIE5.01:Windows NT5.0) Accept-Encoding:gzip,deflate.
(3)请求正文
请求正文和请求头要有空行。这个空行必须存在,说明结束请求头传输,开始传输正文请求。请求正文中一般包含很多信息,例如用户提交的用户名和密码之类的登陆信息:userlogin=linuxidc¤tpwd=linuxidc
在真实应用中,协议的请求正文可以包含大量的信息,而不是如示例的HTTP请
求中一样,请求正文只有简单的一行数据。
HTTP协议的响应报文
和请求报文类似,HTTP响应主要也是3个部分构成:
(1)协议状态版本代码描述
(2)响应头(Response Header)
(3)响应正文
下面是一个HTTP响应的示例:
HTTP/1.1 200 OK Server:Apache Tomcat/7.0.1 Date:Mon,6Oct2014 13:23:42 GMT Content-Length:102 <html> <head> <title>HTTP响应文件<title> </head> <body> 这是HTTP响应文件! </body> </html>
客户端向服务器发送请求,和请求报文类似,服务器会以状态行响应。
响应报文包括:HTTP协议的版本、结果编码以及其他的必要信息,如实体信息等。响应类别不同,响应报文里可以包含或者不含实体内容。
HTTP响应报文的首先是以状态行开始,这些可以参考示例的代码。
响应头也就是报文首部,和请求头首部一样,包含重要的信息,例子中我们可以看到,比如日期时间和服务器类型以及内容长度和数量等。 |