2.2 HTTP请求报文(request message)

HTTP请求报文(request message

客户端和服务器建立TCP连接以后,客户端随后会发送一个HTTP请求报文到服务器,请求服务器的服务;

HTTP请求报文的格式一般如下:

请求行(request line)(起始行)

“请求行”是HTTP请求报文的第一行,只有三个内容(字段):

  1. 方法(参见HTTP 请求方法
  2. URL;请求资源的URL,即请求目标,表明了要操作的资源;它和报文头(请求头)的 Host 属性(字段)组成完整的请求 URL;
  3. 协议名称及版本号,即HTTP的版本号

    报文所使用的HTTP版本,格式为:HTTP/<major>.<minor>;其中主要版本号(major)和次要版本号(minor)都是整数

三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”,表示一行的结束;

HTTP 报文的第一行用于区分当前报文是请求报文还是响应报文,在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line)

HTTP请求报文和响应报文格式的区别就是开始行不同;

请求头部(header,首部、头部)

请求头部用来说明一些信息(例如描述客户端或者服务器的属性、被传输的资源以及应该实现连接);

请求头部可以有好几行,每一行都表示一个头部(header)信息,但也可以不使用;

  1. 每一头部(header)信息都由字段名和它的值组成,标准规定字段名是大小写不敏感的,但是不同程序在解析字段名时可能是大小写敏感的;
  2. 字段名和它的值用冒号(:)分隔,即格式为:“属性名:属性值”;而且在冒号后(域值前)可以添加任何数量的空格(一般会有一个空格);
  3. 每一行在结束的地方都要有“回车”和“换行”,表示一个头部信息的结束;

                <name>:<value><CRLF> 

HTTP 请求报文的头部字段主要分为(详细参见:HTTP头部字段):

整个请求头部结束时,还有一空行(“CR”和“LF”)将请求头部和后面的报文主体分开;

请求数据(请求体、报文主体(message body))

报文主体是报文要发送的数据,是第一个空行以后的所有部分;详细参见:实体、实体主体和报文主体

在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段;

注意:

  1. 由于HTTP是面向文本的(text-oriented),因此报文中的起始行和首部都只能是一些ASCII文本;而报文主体是一个可选的数据块,与起始行和首部不同的是主体可以是由任意数据组成的数据块(例如:文本或二进制数据),也可以为空;
  2. 若HTTP首部字段重复了的话,不同的浏览器处理机制不一样;有些浏览器会优先处理第一次出现的字段;有些浏览器会优先处理最后一次出现的字段

实例讲解

下面是一个完整的HTTP请求报文的例子:

GET /dir/index.htm HTTP/1.1                        {请求行使用了相对URL}

Host: www.xyz.edu.cn                                   {此行是首部行的开始,这行给出主机的域名}

connection: close                                          {告诉服务器发送完请求的文档后就可释放连接}

User-Agent: Mozilla/ 5.0                               {表明用户代理是使用火狐浏览器Firefox}

Accept-Language: cn                                    {表示用户希望优先得到中文版本的文档}

                                                                      {请求报文的最后还有一个空行}

请求资源的URL是相对URL(即省略了主机的域名),因为首部行(第2行)给出了主机的域名;

第3行是告诉服务器不使用持续连接,表示浏览器希望服务器在传送完所请求的对象后即关闭TCP连接;

这个请求报文没有实体主体;

浏览器地址栏输入www.baidu.com,打开控制台,查看Request Headers,看到如下信息:

GET / HTTP/1.1

Host: www.baidu.com

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Referer: 百度安全验证.....

Accept-Encoding: gzip, deflate, sdch, br

Accept-Language: zh-CN,zh;q=0.8

Cookie: BIDUPSID=670A04B660AAF2716D3120BEAF946A11; BAIDUID=2454D4....

RA-Ver: 3.0.8

RA-Sid: CA623F7A-20150914-060054-2b9722-5fde41

第一行为请求行: GET / HTTP/1.1 方法是GET,协议版本http1.1

  • 28
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值