HTTP协议详解

来源:互联网 发布:黑门市场 知乎 编辑:程序博客网 时间:2024/06/05 11:56

HTTP连接过程

HTTP协议在OSI七层模型中属于应用层,使用传输层的TCP/IP协议传输数据,客户端到服务器的每一个请求,都有4个步骤:

1.客户端默认在端口80打开与服务器的一个TCP连接(URL也可以指定其他端口)
2.客户端向服务器发送消息,请求指定路径上的资源。请求包括请求行、请求头、空行和请求正文
3.服务器向客服端发送响应。响应包括元数据的首部、响应头、空行和响应正文
4.服务器关闭连接


HTTP协议版本

当然,在不同版本的HTTP协议中,上面的连接过程有点不同。HTTP1.0的连接过程和上面一样,每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭。在HTTP1.1中,同一个连接中可以传送多个请求和响应,也就是在第1和第4步之间,第2和第3步可以反复多次,请求和响应可以分为多个块发送。


HTTP请求类型

根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

  • GET 请求获取由Request-URI所标识的资源。
  • POST 在Request-URI所标识的资源后附加新的数据。
  • HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
  • OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
  • PUT 请求服务器存储一个资源,并用Request-URI作为其标识。
  • DELETE 请求服务器删除由Request-URI所标识的资源。
  • TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。

HTTP请求格式

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:

① 请求方法 URI 协议/版本
② 请求头(Request Header)
③ 请求正文

下面是一个HTTP请求的例子:

1.请求方法 URI 协议/版本

请求的第一行是“方法 URL 协议版本”:GET/sample.jsp HTTP/1.1
如上面图片所示,“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

2.请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。请求头采用键值对的形式:Keyword:Value,关键字不区分大小写,值有时区分大小写,有时不区分。关键字和值都只能是ASCII码

HTTP请求头大全

3.请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

4.请求方法
HTTP请求方法我这里只讨论GET方法与POST方法

  • GET方法

    GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
    http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
    从上面的URL请求中,很容易就可以辩认出表单提交的内容(?之后的内容)。另外由于现代浏览器的限制,GET方法提交的数据是作为URL请求的一部分,所以提交的数据量不能太大。需要说明的是,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。

  • POST方法

    POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。


HTTP响应格式

HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

① 状态行
② 响应头(Response Header)
③ 响应正文

下面是一个HTTP响应的例子:

HTTP/1.1 200 OKServer:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:23:42 GMTContent-Length:112<html>    <head>    <title>HTTP响应示例<title>    </head>    <body>        Hello HTTP!    </body></html>

1.状态行
协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行,由协议版本、数字形式的状态代码、及相应的状态描述组成,各元素之间以空格分隔。

HTTP/1.1 200 OK
  • 状态代码:状态代码由3位数字组成,表示请求是否被理解或被满足。状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。

状态码有五种可能的取值:
1xx: 指示信息—表示请求已接收,继续处理。
2xx: 成功—表示请求已经被成功接收、理解、接受。
3xx: 重定向—要完成请求必须进行更进一步的操作。
4xx: 客户端错误—请求有语法错误或请求无法实现。
5xx: 服务器端错误—服务器未能实现合法的请求。

  • 状态描述:状态描述给出了关于状态代码的简短的文字描述。

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

Server:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:13:33 GMTContent-Type:text/htmlLast-Moified:Mon,6 Oct 2003 13:23:42 GMTContent-Length:112

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

<html>    <head>    <title>HTTP响应示例<title>    </head>    <body>        Hello HTTP!    </body></html>
0 0
原创粉丝点击