HTTP协议-http事务详解

来源:互联网 发布:mac 合上盖子不休眠 编辑:程序博客网 时间:2024/04/25 01:29

本篇参考了《深入理解计算机系统》的第12章-网络编程

一个完整的http 事务由http请求和http响应组成,其中,

http请求是由请求行(request line)和请求报头(request header)组成,并以一个空的文本行来终止报头列表(这说明报表是可以有多个的)。

http响应是由响应行(response line)和响应报头(response header)和响应主体(response body)组成,同请求报头类似,要终止响应报头的话,就在响应报头列表的后面跟随一个空行来终止。

 

注意:以下说明中出现的空格都是一个,只是为了更加清晰易读,才使用多个空格

请求行的形式:

       <请求方法>  <uri> <http版本>

       这种形式表明的意思是,以指定的“请求方法”到服务器上的uri指定的位置把相应的资源取回来。http版本应该是为了保持客户端和服务器端之间的http版本兼容性。

       例子1:GET  /index.html  HTTP/1.1

       例子2:GET /  HTTP/1.0

       <uri>在后面会有说明

请求报头的形式:

       <报头名称>:<报头数据>

     请求报头的作用应该是传输一些用于服务器的信息,比如,服务器需要了解到的客户端信息等。

       例子:

              host: www.sina.com

 

响应行的形式:

       <http版本>  <状态代码>  <状态消息>   

状态代码的一些主要编码会在后面给出。

       响应行的意思是告诉客户端本次响应的“http版本”是什么,以及响应的情况如何(以状态代码表示),状态消息只是跟状态代码同义的英文表达。

       例子1:HTTP/1.1 200 OK

       例子2:HTTP/1.1 404 NOT FOUND

响应报头的形式:

       跟请求报头形式一样。

       例子 1:Content-Type:text/html

                  Content-length: 4096

       例子 2:Content-Type:image/gif

响应主体的形式:

       就是用户请求的数据。

       具体形式依赖于响应报头中指定的 Content-Type

       比如当 Content-Type:text/html 时,响应主体就是通常所见到的 html 文档

 

URL及URI的相关说明

       比如一个url为 http://www.helloworld.com:80/index.html

       那么通常情况下,uri是指url中除开表示服务器网络位置(一般是服务器地址和端口)的相关信息后的那部分内容,如上面的url中,uri是 /index.html,

       另外要说到的是url的后缀,如上面的url中,url后缀是 /index.html,但url后缀应该不总是等于uri的,因为有最小的url后缀是 /,而对于这种url后缀,服务器会把它扩展为某个默认的文件名(一般通过配置服务器来达成这点),而获取到文件名之后,才会得到uri。另外,在浏览器中直接输入域名时,可以不用输入 / 的原因是浏览器自动帮你补上了这个 / 。

 

响应行中的状态代码: