Http请求与Http响应详解

原创 2016年08月29日 09:41:33

一、Http请求

Http协议是超文本传输协议,用于在互联网请求资源。

1、请求方法Url/版本
现有Http协议支持7种请求方法GET\POST\HEAD\OPTIONS\PUT\DELETE\TARCE

  • GET      请求获取由Request-URI所标识的资源。
  • POST Request-URI所标识的资源后附加新的数据。
  • HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
  • OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
  • PUT 请求服务器存储一个资源,并用Request-URI作为其标识。
  • DELETE 请求服务器删除由Request-URI所标识的资源。
  • TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。
2、请求头信息(Request Header)
  • Location:响应报头域用于重定向接受者到一个新的位置。
  • Server: 响应报头域包含了服务器用来处理请求的软件信息。
  • Content-Encoding:实体报头域被使用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,因而要获得Content- Type报头域中所引用的媒体类型,必须采用相应的解码机制。
  • Content-Language:实体报头域描述了资源所用的自然语言。Content-Language允许用户遵照自身的首选语言来识别和区分实体。
  • Content-Length:实体报头域用于指明正文的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的ASCII码存储传输。
  • Content-Type:实体报头域用语指明发送给接收者的实体正文的媒体类型。例如:
  • Content-Type: text/html;charset=ISO-8859-1
  • Set-Cookie:设置Cookie,记录状态用于下次访问。
  • Accept-Language: zh-cn,zh;q=0.5  (浏览器支持的语言类型)
  • Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7(浏览器支持的字符编码)
  • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8(浏览器支持的MIME类型)
  • Accept-Encoding: gzip, deflate(浏览器支持的压缩编码)
  • User-Agent: Mozilla/5.0 (使用的用户代理)
  • Host: 域名
  • Connection: Keep-Alive
  • Content-type:内容的MIME类型,如果要请求json数据则可以设置application/json
3、请求正文信息
username=jinqiao&password=1234
以下是用chorme做的一个http请求的截图

由图可以看出,第一行是请求头信息,其中请求方法、请求url、请求协议分别被空格隔开,剩下的为请求头信息,包括了编码,主机、Cookie等信息。而请求正文信息,因为这个是Get请求,其请求参数直接接在Url后面。若为Post请求,那么在头信息结束之后还有一个请求正文信息,用于传递请求得参数。
4、Post请求和Get 请求的区别
1、传递参数长度
由于Get 请求的请求参数是在Url后面接着的,所以其参数长度收Url长度的限制,而Post 请求的参数可以放在请求正文当中,所以其长度一般来说都不受限制(受限于传输最大数据的大小)。
2、信息的安全性
Get请求的参数编码在Url上,所以可以直接看Url就能看到请求信息,所以其对于私密信息来说不太安全,而Post方法放在请求体当中,所以相对安全一些,当然对于密码等信息,传输过程中最好还是加密。
3、幂等性
幂等性的定义(Http1.1原文):Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.
从定义上看,HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。
HTTP GET方法用于获取资源,不应有副作用,所以是幂等的。
HTTP POST方法用于创建资源,会改变服务器资源,所以不是幂等的。


二、Http响应

Http响应与Http请求类似,也包括三个部分,分别是状态行、响应头、响应体。
1、状态行(HTTP/1.1 200 OK)
状态行包括协议版本号、状态码、状态描述。
状态代码:状态代码由3位数字组成,表示请求是否被理解或被满足。
状态描述:状态描述给出了关于状态代码的简短的文字描述。
状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。


第一个数字有五种可能的取值:
- 1xx:   指示信息—表示请求已接收,继续处理。
- 2xx:   成功—表示请求已经被成功接收、理解、接受。
- 3xx:   重定向—要完成请求必须进行更进一步的操作。
- 4xx:   客户端错误—请求有语法错误或请求无法实现。
- 5xx: 服务器端错误—服务器未能实现合法的请求。
   状态代码 状态描述    说明
   200      OK    客户端请求成功
   400         Bad Request   由于客户端请求有语法错误,不能被服务器所理解。
   401         Unauthonzed   请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
   403   Forbidden   服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
   404   Not Found   请求的资源不存在,例如,输入了错误的URL。
   500     Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
   503      Service Unavailable   服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
2、响应头

  • Location:响应报头域用于重定向接受者到一个新的位置。
  • Server: 响应报头域包含了服务器用来处理请求的软件信息。
  • Content-Encoding:实体报头域被使用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,因而要获得Content- Type报头域中所引用的媒体类型,必须采用相应的解码机制。
  • Content-Language:实体报头域描述了资源所用的自然语言。Content-Language允许用户遵照自身的首选语言来识别和区分实体。
  • Content-Length:实体报头域用于指明正文的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的ASCII码存储传输。
  • Content-Type:实体报头域用语指明发送给接收者的实体正文的媒体类型。例如:
  • Content-Type: text/html;charset=ISO-8859-1
  • Set-Cookie:设置Cookie,记录状态用于下次访问。
3、响应体
如图所示:

Http请求有三个部分组成,分别是请求方法/版本、请求头信息、请求正文信息。

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

http消息体和响应体

HTTP基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。HTTP允许传输任意类型的数据对象,HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后...

Http请求和Http响应详细解析

http://www.cnblogs.com/linjiqin/p/3560152.html(转载) 一次完整的HTTP请求所经历的7个步骤 HTTP通信机制是在一次完整的HTTP通信过程中,We...

HTTP详解(1)-工作原理

1. HTTP简介          HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效...
  • hguisu
  • hguisu
  • 2013年03月16日 23:24
  • 47507

HTTP请求行、请求头、请求体详解

HTTP请求

HTTP请求和响应过程

1.HTTP协议   Internate的基本协议是TCP/IP(传输控制协议和网际协议)。而目前使用的FTP,HTTP都是建立在TCP/IP上的应用层协议。不同的协议对应不同的应用。而HTTP协...
  • mazhaer
  • mazhaer
  • 2016年10月30日 13:48
  • 1070

http请求与响应全过程

1、首先,在浏览器里输入网址: 2、浏览器根据域名解析IP地址: 3、浏览器与web服务器建立一个 TCP 连接 4、浏览器给Web服务器发送一个http请求: 5、服务器的永久重定向响应: 6、浏览...
  • lzghxjt
  • lzghxjt
  • 2016年05月24日 00:15
  • 11256

HTTP请求详解

1. HTTP请求格式              做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对...

HTTP请求头详解

HTTP由两部分组成:请求和响应。当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息。当服务器收到这个请求时将返回一个响应...
  • kfanning
  • kfanning
  • 2010年12月08日 08:35
  • 78408

Linux删除文件后没有释放空间

遇到一个线上问题,MySQL查询错误,经过定位是MySQL tmpdir 指定的/tmp空间满了。 然后我删除了一个大问题,结果还是无法查询数据库。df -h看了一下,磁盘仍然被占满了。 ...

python模块及包的导入

一. module(模块) 通常模块为一个文件,直接使用import来导入就好了。可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Http请求与Http响应详解
举报原因:
原因补充:

(最多只允许输入30个字)