HTTP协议

HTTP协议是应用层的主要协议,虽然应用层的协议是有程序员自己设定,但是也有一些知名协议,可以直接使用。

1、HTTP 协议初识


HTTP协议是超文本传输协议,用于客户端与服务端之间的通信,请求访问文本或图像等资源的一端称为客户端,提供资源响应的一端称为服务端。在实际情况中,两台计算机作为客户端和服务端的角色可能会互换,但是无论如何,发送请求的一端是客户端,响应回复的一端是服务端。
在这里插入图片描述

1.1 HTTP是不保存状态的协议

HTTP是不保存状态的协议,即无状态。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
HTTP协议不做持久化处理的优点:更快的处理大量事务,确保协议的可伸缩性,减少服务器的CPU以及内存资源的消耗。

HTTP/1.1虽然是无状态协议,但是为了实现保持状态功能,引入了Cookie技术。
Cookie会根据从服务器daunt发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的请求,然后对比服务器上的记录,最后得到之前的状态信息。
在这里插入图片描述
上图展示了发生Cookie交互的情景。

Cookie与Session的区别:
Session是服务端为每个客户端建立的会话,将Session作为Cookie信息返回给客户端。
Session保存在服务端,Cookie保存在客户端
Cookie中保存的就是服务端希望下次客户端能够继续发送给自己的一些关键数据;
Session中保存的是服务端为客户端建立的会话信息,用于识别客户端。

1.2 持久连接节省通信量

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,在这样的情况下,当传输一个较大的文件或图片时,这样的请求就会造成多次TCP的连接建立和断开,增加通信量的开销。

持久连接
为了解决上述TCP连接的问题,HTTP/1.1和部分HTTP/1.0提出了持久连接的方法。
持久连接的特点:只要任意一点没有明确提出断开连接,则保持TCP连接状态。
持久连接的优点:减少TCP连接的重复建立和断开所造成的的额外开销,减轻服务器端的负载;减少开销的那部分时间,可以加快Web页面的显示速度。

管线化
在未实现持久连接的时候,发送请求后需要等待并收到响应,才能发送下一个请求。持久连接使管线化发送方式成为可能。
管线化技术的实现可以使请求发送后不需要等待响应就可以继续发送下一条请求,实现并行发送多个请求。

2、URI 和 URL


  • URI:统一资源标识符
  • URL:统一资源定位符
    URI用于字符串表示某一互联网资源,而URL表示资源的地点(互联网所处的位置),可见URL是URI的子集。
2.1 URL格式

在这里插入图片描述
协议方案名称
使用http: 或https: 等协议方案名称获取资源时要指定协议类型,不区分大小写,最后要附一个冒号(:);
认证信息
指定用户名和密码作为从服务器获取资源时必要的登录信息;
服务器地址信息
地址可以是baike.baodu.com这种DNS可解析的名称,也可以是192.168.1.1这类IPV4地址名,也可以是[0:0:0:0:0:0:0:1]这样用方括号括起来的IPV6地址名;
服务端口号
指定服务连接的网络端口号,http协议默认使用80端口,浏览器默认使用80端口,https默认使用443端口;
资源路径
指定服务器上的文件路径来定位特指的资源;
查询字符串
提交给服务器的信息,有key=val&key=val形式键值对组成;
片段标识符
使用片段标识符通常可标记出已获取资源中的子资源。

2.2 urlencode与urldecode

在URL中某些特殊字符(/ ? )已经赋予特殊意义不能随意出现,在使用之前先要对其进行转义。

转义规则:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
例如C++编码后的结果是C%2B%2B,将“+”转义为“%2B".

urldecode是urlebcode的逆过程,是对转义后的字符进行解码。

3、HTTP协议格式


首行:[方法]+[url]+[协议版本](以空格作为间隔,以\r\n作为结尾)
头部:由key:val形式的键值对组成,每个键值对以\r\n作为结尾、键值对之间用\r\n作为间隔,描述本次的请求/相应的关键信息。
空行:用\r\n表示
正文:Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

3.1 首行

请求方法

  • GET:主要用于获取资源
    用来请求访问已经被URL识别的资源,指定的资源经服务器解析后返回响应内容。
    如果请求资源是文本,则保持原样返回;如果请求资源向CGI(通用网关接口)那样的程序,则返回经过执行后的输出接口。
  • POST: 主要用于向服务器提交表单数据
    虽然GET也可以传输实体的主体,但是一般用POST方法来传输实体的主体,POST的主要目的不是获取响应的主体内容。
  • HEAD: 相较于GET只要头部不要正文
    HEAD方法与GET方法一样,只是不返回报文主体部分,用于确认URL的有效性及资源更新的日期时间等。
  • PUT: 传输文件
    由于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般不使用该方法。
  • DELETE: 删除文件
    按请求删除URL删除指定的资源。但是DELETE方法与PUT方法一样自身不带验证机制,所以一般不使用。
  • OPTIONS:询问支持的方法
    用于查询针对请求URL指定的资源支持的方法。
  • TRACE:追踪路径
    让Wab服务器端将之前的请求通信环回给客户端的方法。
    发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应。
  • CONNECT:要求用隧道协议连接代理

GET与POST的区别:
GET主要用于获取实体资源,请求没有正文,若要提交数据,需要将数据作为查询字符串放到URL中提交给服务器(GET可以提交数据,但是URL长度有限制,早起URL长度限制1k,现在大多是8k);
POST主要用于向服务器提交数据,并且数据存放在正文中。

在这里插入图片描述
URL
统一资源定位符–向哪个服务器请求哪个资源

协议版本

  • HTTP/0.9
    短连接,HTTP在传输层使用TCP协议,TCP是面向连接,发出请求,得到响应则通信结束关闭连接,只支持GET
  • HTTP/1.0
    支持长连接,并且新增了请求方法以及头部信息:POST/HEAD
  • HTTP/1.1
    在支持长连接的基础上支持管线化传输,并且新增的更多请求方法以及头部信息
  • HTTP/2
    新增了更多的特性,新增了服务器主动向客户端推送消息

响应状态码
在这里插入图片描述

  • 2XX --成功
    2XX 的响应结果表明请求被正常处理了。
    200 OK—表示从客户端发来的请求在服务器端被正常处理。
    204 NO Content—表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体部分。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
    206 Partial Content—该状态表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。

  • 3XX --重定向
    3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
    301 Moved Permanently—永久性重定向,该状态码表示请求的资源已被分配了新的URL,以后应使用资源现在所指的URL。
    302 Found —临时重定向,该状态码表示请求的资源已被分配了新的URL,希望用户(本次)能使用新的URL访问。
    303 See Other—该状态码表示请求对应的资源存在着另一个URL,应使用GET方法请求定向获取请求的资源。
    304 Not Modified—该状态码表示客户端发送附带条件的请求时,服务器端允许轻汽油访问资源,但不满足条件的情况。304状态码返回时,不包含任何响应的主体部分,与重定向没有关系。
    307 Temporary Redirect —临时重定向

  • 4XX客户端错误
    4XX的响应结果表明客户端是发生错误的原因所在。
    400 Bad Request—该状态码表示请求报文中存在语法错误,当错误发生时,需要修改请求的内容后再次发送请求。
    401 Unauthorized–该状态码表示发送的请求需要有通过HTTP认证的认证信息。
    403 Forbidden—该状态码表明对请求资源的访问被服务器拒绝了。
    404 Not Found—该状态码表明服务器上无法找到请求的资源。

  • 5XX 服务器错误
    5XX的响应结果表明服务器本身发生错误。
    500 Internal Server Error—该状态码表明服务器在执行请求时发生了错误。
    503 Servic Unavailable —该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值