HTTP协议

1. 概念

在前面的文章,我们知道TCP/IP四层模型中,下三层是主要负责数据的传输处理,但是没有涉及到解析,关于解析主要由应用层来处理。
HTTP协议是应用层协议,是一个属于应用层的面向对象的协议,由于其间接,快速的方式,适用于分布式超媒体信息系统.

1.1 HTTP协议的主要特点

  1. 支持客户、服务器模式。
  2. 简单快速。
    客户面向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有:GET,HEAD,POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度快。
  3. 灵活。
    HTTP允许传输任意类型的数据对象,正在传输的类型需要加上Content-Type加以标记 。
  4. 无连接。
    无连接的含义是每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,及立即断开链接。采用这种方式可以节约很多时间。
  5. 无状态。
    HTTP协议是无状态协议,无状态是指协议对于事物处理没有记忆能力,缺少状态以为如果后序处理前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。

2. 认识URL

2.1 URL就是我们俗称的网址

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
URL的一般语法格式为:(带方括号[]的为可选项)

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

注:protocol(协议)、hostname(主机名)、port(端口号)、path(路径)、parameters(参数)、query(查询)、fragment(信息片断)
eg:
在这里插入图片描述

2.2 urlencode和urldecode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了。因此这些字符不能随意出现。
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式 。
在这里插入图片描述

urldecode就是urlencode的逆过程。

3. HTTP协议之请求

http请求由四部分组成:

请求行,消息报头,空行,请求正文

3.1 请求行

首行: [方法] + [url] + [版本]
如:
Method Request-URI HTPP-Version CRLF
其中:

Method 表示请求方法;
Reques-URI(我们可以把这个整体看成URL)是一个同一资源定位符;
HTTP-Version表示请求的HTTP协议版本;
CRLF表示回车和换行。

HTTP有很多请求方法,最常用的是GET方法和POST方法,但我们有必要了解一下其它的方法:
在这里插入图片描述

我们可以这样理解:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

3.2 Header

请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔

3.3 空行

遇到空行表示Header部分结束

3.4 Body

空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个 Content-Length属性来标识Body的长度。

4. HTTP协议之响应

HTTP响应也是四个部分组成:
分别是:

状态行,消息报头,空行,响应正文.

4.1 状态码

首行: [版本号] + [状态码] + [状态码解释]
如:
HTTP-Version Status-Code Reason-Phrase CRLF
其中:

HTTP-Version表示服务器HTTP版本信息;
Status-Code表示服务器发回响应状态代码;
Reason-Phrase表示状态代码的文本描述。

状态代码由三种数字组成,第一个数字定义了响应的类别,有五种可能取值:
在这里插入图片描述

了解一下常见的状态码:

含义
200OK客户请求成功
400Bad Request客户端请求由语法错误,nunnery被服务器所理解
403Forbidden服务器收到请求,但是拒绝提供服务
404Not Found请求资源不存在,eg:输入了错误的URL
500Internal Server Error服务器发生不可预期的错误
503Server Unavailable服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

eg:HTTP/1.1 200 OK (CRLF)

4.2 Header

Header: 请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;

4.3 空行

遇到空行表示Header部分结束

4.4 Body

空行后面的内容都是Body.
Body允许为空字符串. 如果Body存在, 则在Header中会有一个 Content-Length属性来标识Body的长度; 如果服务器返回了⼀一个html页面, 那么html页面内容就是在 body中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值