Http请求与Http响应详解

一、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请求有三个部分组成,分别是请求方法/版本、请求头信息、请求正文信息。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值