基本概念
HTTP(超文本传输协议)是一种应用层协议,应用层协议的本质是保证一端发送的数据能够在另一端进行解析,http也是如此。
首先来认识一下url:
https://new.qq.com/rain/a/20230308A049I200
像上面这样的我们就叫做url:
但是有些网页长的不会这么简单,像百度:
其中的c++在上方的栏中变成了c%2B%2B,这正是字符被url特殊处理的情况,我们可以在网上见到很多这样的url解码或编码器,如:UrlEncode编码/UrlDecode解码 - 站长工具 (chinaz.com)
HTTP的特点
简单快速(客户端服务器模式,每次连接只处理一个请求)
无连接(虽然底层采用TCP进行传输,但是本身http是无连接的)
无状态(http不会记录上次访问的结果,没有记录能力)
HTTP的本质
http传输的报文格式:
我们可以通过自己构建一个http协议并使用、打印报头而得出:
其中,第一行/后面就是我们要请求的资源,当我们输入并访问时,会得到以下结果:
HTTP的状态码
有时候我们在访问网页的时候会出现404无法访问的标志,那么这个404又代表什么呢?
其实这个404正是我们的状态码,代表服务器无法处理你的请求(就向你找服务器要它根本没有的资源,这就是它无法处理的请求)
http中的状态码如下所示:(一般来说5**是服务器内部错误,不会给用户看到原因)
具体可以在这里进行查询:HTTP 状态码 | 菜鸟教程 (runoob.com)
这张表里又引入了一个陌生的概念:网络中的重定向是什么意思?
网络中的重定向
网络中的重定向分为永久重定向(301)和临时重定向(302、307)两种
永久重定向:新的网址完全继承旧的网址,同时上方的url也会变为新网址的url
临时重定向:创造新的网址但不会对旧网址有影响,跳转网页时上方的url还是源网址,但实际上以及跳转到了新网址中
一般来收如果只是临时性的网页维护,我们就可以使用临时重定向,如果想要回到源网址,把临时重定向的要求删除即可,如果是长久性的网络页面迁移,那么最好使用永久重定向。
HTTP的方法
如上图所示,HTTP的方法有很多种,但在使用过程中一般大多为GET和POST方法两种,已知我们上网可以大致上分为两个请求:一个是想从网上获取资源,一个是想向网上发送资源。
GET可以从服务器端获取资源,也可以向服务器端发送资源。POST一般只能向服务器端发送资源。
GET发送资源时,请求行会出现在url中,POST发送时只会出现在请求报头中
我们来创建一个需要登陆的网页来更好的诠释GET和POST的区别
GET发送资源时:
POST发送资源时
可以看出,同样访问一个网页时,GET方法会将文本框中的文本以明文的形式放入url中,无法保证数据安全,而且因为这个url包括了发送的数据,所以无法访问想要访问的资源,服务器查找不到。
POST会比GET更安全。
但是POST就一定安全了吗?我们可以查看服务器端打印出来的http报文:
可以看到在最后一行,还是可以看到用户的账号密码,如果这个POST被人截获,那么用户的账号密码就会被泄露,网络上很多可以直接捕获HTTP的软件,如:使用fiddle进行抓包:https://blog.csdn.net/jingjingshizhu/article/details/80566191
所以http本质上来说就是不安全的,我们需要引入https的概念,才能保证用户安全(当然这个安全也不是绝对的!)
自己写的http代码参考:network/http · fvh159/LinuxCode - 码云 - 开源中国 (gitee.com)