0.引用
Content-Type 表示数据传输类型
1.基本概念与知识
HTTP是超文本传输协议,也就是HyperText Transfer Protocol.
HTTP的名字「超文本协议传输」,它可以拆成三个部分:
(1)超文本
(2)传输
(3)协议
HTTP是一个用在计算机世界里的协议,它使用计算机能够理解的语言确立了一种计算机之间交流通信的规
范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范).
HTTP协议是一个双向协议.
2.POST与GET
Get方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等.
POST方法的含义是向URI指定的资源提交数据,数据放在报文的body里.
拓展概念:安全和幂等
在HTTP协议里,所谓的【安全】是指请求方法【不会破坏】服务器上的资源.
所谓的【幂等】,意思是多次执行相同的操作,结果都是【相同】的.
那么很明显GET方法就是安全且幂等的,因为它是只读操作,无论操作多少次,服务器上的数据都是安全的,
且每次的结果都是相同的.
POST因为是【新增或提交数据】的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创
建多个资源,所以不是幂等的.
GET和POST之间的区别:
GET方法的数据参数是暴露在起始行的URL中的,而POST方法的数据参数是在报文主体中的.
GET方法相对来说没有POST安全,因为它的数据参数可以直接从URL中获取,但是GET的效率更高.
GET方法的数据参数大小有一定的限制(1024)(原因也是因为它的数据参数是放在URL中的),而POST对
数据大小是没有限制的.
3.报文
从Web客户端发往Web服务器的HTTP报文称为请求报文(request message).
从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的HTTP报文.
HTTP请求和响应报文的格式很类似.
HTTP报文包括以下三个部分。·
(1)起始行报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况;
(2)首部字段起始行后面有零个或多个首部字段,每个首部字段都包含一个名字和一个值,为了便于解析,
两者之间用冒号(:)来分隔, 首部以一个空行结束, 添加一个首部字段和添加新行一样简单;
(3)主体空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服
务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而
主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序). 当然,主体中也
可以包含文本。
3.1 请求报文
3.1.1 请求报文实例
3.1.2 起始行
起始行
在请求报文中,起始行包括了3个部分:
(1)请求的方法(POST)
(2)请求的URL(/cgi-bin/qqshow_user_props_info)
(3)协议类型及版本(HTTP/1.1)
3.1.3 请求方法
请求方法
在本例中请求的方法是POST,http中请求方法有以下8种(其中比较常用的是GET,POST,HEAD):
1.OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务
器的功能性
2.HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应
内容的情况下,就可以获取包含在响应小消息头中的元信息。
3.GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头
和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数
据.
4.POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请
求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:
web_submit_data,web_submit_form
5.PUT
向指定资源位置上传其最新内容
6.DELETE
请求服务器删除Request-URL所标识的资源
7.TRACE
回显服务器收到的请求,主要用于测试或诊断
8.CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器.
3.1.4 请求报文头部所独有的信息
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
Cookie:客户端用它向服务器传送数据
Cookie2:用来说明请求端支持的cookie版本
3.1.5 请求报文头部中的常见字段
(1)Host
如:Host: www.A.com
客户端发送请求时,用来指定服务器的域名,有了Host 字段,就可以将请求发往同一台服务器上的不同网站;
(2)Content-Length
如:Content-Length: 1000
(3)Connection
如:Connection: keep-alive
HTTP/1.1 版本的默认连接都是持久连接,但为了兼容老版本的 HTTP,需要指定Connection首部字段的值为 Keep-Alive.
(4)Content-Type
如:Content-Type: text/html; charset=utf-8
例子表示的是中表示发送的是网页,而且编码是UTF-8.
(5)Accept
如:Accept: */*
例子表示的客户端声明自己可以接受任何格式的数据.
(6)Accept-Encoding
如:Accept-Encoding: gzip, deflate
字段说明数据的压缩方法,表示客户端支持的压缩方式.
3. 2 应答报文
3.2.1 应答报文实例
3.2.2 应答报文的起始行
应答报文的起始行也包含了3个部分
(1)协议类型及版本号
(2)状态码
(3)状态码的文字描述
3.2.3 应答报文的起始行中的状态码分析
HTTP状态码分类
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作
用。HTTP 状态码共分为以下 5 种类型:
类别 原因短语
1xx Information(信息状态码) 接受的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务端错误状态码) 服务器处理请求出错
2XX 请求成功
2XX 的响应结果表明请求被正常处理了。
200 OK
200表示请求在服务器端被正常处理了,在响应报文内,随状态码一起返回的信息会因方法的不同而发
生改变.
204 No Content
204表示服务器接收的请求已经成功处理,但是在返回的响应报文中不含实体的主体部分.另外,也不
允许返回任何实体的主体。当浏览器在发送请求后接收到204响应,它的显示页面不会发生更新.
通常应用在只需要客户端往服务端发送信息,而服务端不需要发送新信息的情况下使用.
206 Partial Content
206表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文内包含由Content-
Range指定范围的实体内容.
3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求.
301 Moved Permanently
永久重定向,301状态码表示请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI。也就
是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保
存.
302 Found
临时重定向,302表示请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问。和301
不同的是,这种资源的URI变更是临时的额,而不是永久的,因此不用去更新书签.
303 See Other
该状态码和 302 有着异曲同工之妙,表示由于请求对应的资源存在着另一个 URI,应使用GET方法定
向获取请求的资源.
如果浏览器原本是用POST方法去请求服务器,收到303状态码之后,会改用GET并访问资源新的URI.
304 Not Modified
304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。
例如,客户端请求的资源在客户端本地已有缓存,会在请求头部中加入“If-Modified-Since", "If-
None-Match"等字段,服务端根据这些字段信息判断这些资源信息是否经过修改,如果没有则返回 304
状态码,客户端可以直接使用缓存中的资源.
304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有
关系.
PS:附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-
Match,If-Range,If-Unmodified-Since中任一首部。
307 Temporary Redirect
临时重定向,和 302 Found 状态码有相同的含义.区别在于 307 不会强制浏览器将 POST 方法改为
GET 方法,而是遵循浏览器自身的标准.
4XX 客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在.
400 Bad Request
400 状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另
外,浏览器会像 200 OK 一样对待该状态码。
401 Unauthorized
401 状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。第一次
收到 401 状态码表示需要进行用户认证,第二次再收到 401 状态码说明用户认证失败。
403 Forbidden
403 状态码表明对请求资源的访问被服务器拒绝了,当未获得文件系统的访问授权,访问权限出现某
些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能发生 403 。
404 Not Found
404 是我们最常见的状态码之一,它表示服务器上无法找到请求资源。此外,也可能是服务器端在拒
绝请求且不想说明原因的时候使用。
5XX 服务器错误
5XX 的响应结果表明服务器本身发生错误。
500 Internal Server Error
500 状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故
障。
503 Service Unavailable
503 状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
3.2.4 响应报文首部提供的额外信息
Age:(从最初创建开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或时间重试
Server:服务器应用程序软件的名称和版本
Title:对HTML文档来说,就是HTML文档的源端给出的标题
Warning:比原因短语更详细一些的警告报文
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
Set-Cookie2:与Set-Cookie类似
WWW-Authenticate:来自服务器的对客户端的质询列表
3.2.5 响应报文中头部的常见字段
Content-Encoding 字段
Content-Encoding 字段说明数据的压缩方法,表示服务器返回的数据使用了什么压缩格式.