0
点赞
收藏
分享

微信扫一扫

应用层协议(HTTP协议)

皮皮球场 2022-06-30 阅读 56

HTTP 简介

但是就这样就可以了吗?当面试官问我们什么是HTTP协议时上面这个我们肯定能够说的出来但是这可能不是面试官想要的结果.面试官可能会在问什么是超文本控制协议?

我们可以将超文本传输协议拆分为三部分:

他们之间的关系如下:

 1.什么是超文本?

2.什么是传输?

3.什么是协议

URL

一个URL的构成如下:

1.协议方案名:

2.登录信息:

3.服务器地址

4.端口号

urlencode&urldecode

比如说我们搜索C++关键字时由于+号在URL当中是特殊符号而+号转换之后对于的16进制的值为:0x2B

注意:当我们输入中文时中文也没被URL编码

既然URL能对这些特殊字符进行编码那么服务器拿到这些字符的时候肯定要进行解码,这样服务器才能收到你传递的参数。也就是说urdecode是urlencode的一个逆过程。

HTTP请求协议格式

1.http的请求格式如下:

HTTP请求由四部分组成:

下面我们以请求行为列解释一下:

如何将HTTP请求的报头和有效载荷分离?

当应用层收到一个HTTP请求时必须将报头和有效载荷分离。我们可以根据HTTP请求的\n进行分离,我们可以按行读取读到\n时我们就知道HTTP的报头读取完了。

2.获取HTTP请求

在网络协议中应用层的下一层叫做传输层而HTTP协议的底层通常用的是TCP协议所以了我们可以自己编写一个简单的TCP服务器然后用浏览器访问我们编写的这个服务器。我们实现的这个服务器非常的简单直接将浏览器发过来的HTTP请求进行输出打印即可。这样我们就可以看到HTTP的基本构成了。

对于代码:

下面我们将服务器跑起来然后使用浏览器对我们编写的服务器进行访问:

 注意:

通过服务器打印出来的结果我们可以发现请求行当中的URL一般是不携带域名和端口号的这是因为在请求报头的Host字段中已经携带了。请求行中的URL代表你要访问对于服务器上的那个路径下的资源。而请求报头也正如我们上面所说的一样是以key:value的形式进行呈列的。

HTTP响应格式

http的响应由以下四部分构成:

同样的如何将响应的报头和有效载荷进行分离?和请求一样按行读取读到换行就说明报头读取完毕。

下面我们用我们的服务器给浏览器一个响应:

当服务器收到客户端的请求时会对HTTP请求报文进行一系列分析然后再给客户端进行响应。在这里为了简单我们的服务器只给客户端响应一些简单的html:

 当服务器收到请求时不官浏览器发来的是什么请求我们都把这个网页响应给浏览器其实也就是把这个html里面的内容放到响应正文里面。

对于代码:

当浏览器收到我们的响应时会对响应正文里面的内容进行解析,解析之后就是我们看到的内容:

同样的我们可以使用telnet指令向我们的服务器发起请求,这样也是可以得到响应的:

 HTTP的常见方法

 其中最常见的就是GET方法和POST方法:

1.GET方法

Get ⽅法的含义是请求 从服务器获取资源 ,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。 ⽐如,你打开我的⽂章,浏览器就会发送 GET 请求给服务器,服务器就会返回⽂章的所有⽂字及资源。

GET方法和POST方法都可以传参:

  • GET方法是通过url传参
  • POST方法是通过正文传参

从这里我们就可以知道POST方法比GET传递的参数要更多这是因为url的长度是有限的,POST可以通过正文传递更多的参数,还有就是POST方法比GET方法更私密。POST方法不会把你的参数回显到URL中所以了POST方法比GET方法更私密。

下面我们通过PostMan这个软件来演示POST和GET的区别

 下面我们使用POST方法通过PostMan

 对应结果

 我们发现确实和上面说的一样其中了这个Content-Lenght就是正文的长度标识响应正文的长度

总结:

HTTP状态码

http常见的状态码如下:

重定向是将网络请求重新定了一个方向转到其他的位置,此时服务器就只起到了引路的作用。重定向分为:临时重定向和永久重定向其他状态码

301(永久重定向)而状态码302和307表示临时重定向。临时重定向和永久重定向的区别:

下面我们进行重定向演示:

进行重定向时我们需要使用Location字段。Location字段表示你要重定向的目标网站我们在这里演示临时重定向将HTTP状态行的状态码改为307

然后再将对于的状态码描述改为对于的描述而后面的这个Location后面跟上你要重定向的网址比如我们设置为www.baidu.com

对于代码:

我们运行服务器我们使用telnet命令访问我们都服务器时并发送HTTP请求时:

 HTTP常见的Header

举报

相关推荐

0 条评论