HTTP相关知识

  • 作者:zyh
  • 分类:计算机网络
  • 发表日期:2020-07-14 16:01:20
  • 阅读(153)
  • 评论(0)

好几天没更新博客了,今天来聊一聊HTTP相关的知识,因为最近在学HTTP协议,所以写这篇博客也是为了巩固一下学过的知识。肯定不会太全面,想到哪就写哪吧。

我认为学习是一个双向的过程,不仅要输入还要学会输出。因为脑子的容量有限,一味地输入会导致当前新知识的输入进来,而那些比如说一天前学的还没记得太深刻,会被新输入的挤走。如此往复,就形成了恶性循环。

输出是一个很严谨的过程,因为你要把你学的知识给表达出来,可能是面向全网或者自己记在备忘录中。在这个表达或者写的过程中,为了使我们表达的东西严谨,还会重新的去查找一些资料,这个过程我觉得还是很重要的。就像老话说的好记性不如烂笔头,一个道理。

如果对HTTP感兴趣可以去看看《图解HTTP》这本说,图文并茂,对初学者还是很有好的,我接下来用到的图片基本上也都来自《图解HTTP》。

1. 基本概念

HTTP是一个离我们比较近的一个网络协议了,位于OSI五层模型中的最顶层,应用层。

HTTP是超文本传输协议,也就是HyperText Transfer Protocol,可以简单地分为‘超文本’‘传输’‘协议’。

详解超文本传输协议

(1)超文本

要理解超文本首先要理解文本,文本在互联网早起只是简单的字符文字,但是现在文本已经扩展为图片、视频、压缩包等,这些在HTTP眼里都叫做文本

接下来在看超文本,加上一个‘超’字看起来就感觉很高级,比如咱们人,加上‘超’就是超人,就很牛逼,这个超文本就是超越了普通文本的文本,但并不是超级的意思。他是文字、图片、视频等的混合体,最关键是有超链接,能从一个超文本跳转到另一个超文本。

HTML就是最常见的超文本,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等链接,经过浏览器的解析后,呈现给我们的就是一个有画面、有文字的网页了。

(2)传输

所谓传输,很好理解,就是在两点之间来回传送东西。比如把一堆东西从甲点搬到乙点,或者从乙点搬到甲点,是一个双向的过程。

HTTP协议就是一个双向协议

就比如说我们上网,想用百度搜点东西是吧,那我们浏览器就是请求方 A, 百度这个网站就是应答方 B。双方约定用HTTP协议来通信,于是我们在浏览器的搜索栏上输入www.baidu.com这就相当于把请求的数据发送给网站,然后网站再把我们希望收到的数据返回给浏览器,其实返回的数据是一些HTML代码或者一些JS代码,最后由浏览器渲染在屏幕上,就可以看到百度的首页了。

虽然数据是在AB两点之间传输的,但也允许有中转或接力,比如代理服务器。

比如坐在最后一排的某个男生,想给第一排的某个女生穿纸条,纸条上具体的内容是啥,大家就发挥自己的想象力吧。那么在这个过程中就要经过这两点之间的同学(中间人),并且在每次中转的时候还要告诉这个是给XXX的。

在HTTP里,这些中间人也要遵守HTTP协议,只要不打扰基本的数据传输,就可以添加任意额外的东西。

(3)协议

协议也很好理解,在生活中也很常见,比如说刚毕业的时候会签一个三方协议。生活中的协议本质上与计算机中的协议是相同的。只要是签署了这个协议或者遵守这个协议,那就一定要按照协议来办,总的来说就是一种规范把。

HTTP是一个用在计算机世界里的协议,它使计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。

总结:HTTP是一个在计算机世界里专门在两点之间传输图片、文字、音频、视频等超文本数据的约定和规范。

好了,关于超文本传输协议到这就总结完了,其实我们会发现,如果直接把超文本传输协议直接放在你面前你可能会一脸懵逼,但是拆开来说还是挺通俗易懂的。

 

HTTP常见状态码

下面来说说HTTP常见的状态码,其实我们最常见的还是404。

1xx

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,一般很少用到。

2xx

2xx 类状态码表示请求服务器资源成功,也是我们愿意看到的。

200 OK 是最常见的成功状态码,表示从客户端发来的请求在服务端被正常处理了。如果不是HEAD请求,服务端返回的响应头都会有body数据。

204 No Content 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,另外也不允许返回任何实体的主体。比如,当浏览器发出请求处理后,返回204响应,那么浏览器显示的一面不发生更新。

206 Partial Content 是应用与HTTP分块下载或断点续传,表示响应返回的body数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

3xx

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用心的URL重新发送请求获取资源,也就是所谓的重定向。响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

301 Moved Permanently 永久重定向,该状态码表示请求的资源已被分配了新的URI,需要用新的URL再次访问。

302 Found 临时重定向,该状态码表示请求的资源还在,但暂时需要用另一个URL来访问。

303 See Other 该状态码表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。

304 Not Modified 不具有跳转的含义,表示资源未被修改,重定向已存在的缓冲文件,也称缓存重定向。304虽然被划分在3xx类别中,但和重定向没关系。

4xx

4xx 类状态码表示客户端发送的请求报文有误,服务器无法处理,也就是错误码的含义。

400 Bad Request 该状态码表示请求报文中存在语法错误,但只是一个非常笼统的错误。

403 Forbidden 该状态码表示对请求资源的访问被服务器拒绝了,服务器没有必要给出拒绝的详细理由。不是客户端的请求出错。

404 Not Found 该状态码表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

5xx

5xx 类状态码表示客户端请求报文是正确的,但是服务器处理是内部发生了错误,属于服务器错误。

500 Internal Server Error 该状态码表示服务端在执行请求是发生了错误,与400类似,是个笼统的错误码,服务器到底发生了什么错误,我们并不知道。

501 Not Implemented 表示客户端请求的功能还不支持。

503 Service Unavailable 该状态码表示服务器暂时处于超负载或者正在进行停机维护,现在无法处理请求。

状态码到这里我们就介绍完了,其实对于这些状态码我们只要记住大概就可以了。

2. GET 与 POST

GET 与 POST的区别

Get方法的含义是请求,也就是从服务器获取资源,这个资源可以是静态的文本、图片、页面、视频等。

比如,你们浏览我的网站,打开这篇博客,浏览器就会发送GET请求给服务器,服务器就会返回文章的所有文字、图片及资源。

POST方法则相反,它向URI指定的资源提交数据,提交的数据就放在报文的body里

比如,你们浏览这篇博客,觉得写的还行,此时点赞已经不能满足了,总想说两句,在底部评论完之后点击提交,这时浏览器就会执行POST请求,把大家评论的内容放进报文body里,然后拼接好POST请求头,通过TCP协议发送给服务器。POST请求多用于账号密码的提交。

GET和POST都是幂等和安全的吗?

先说一下幂等和安全的概念:

在HTTP协议中,所谓安全指的是,请求方法不会破坏服务器上的资源。

所谓幂等指的是,多次执行相同的操作,结果都是相同的。

在了解了概念之后,再来看GET和POST都是幂等和安全的吗?

首先先说GET请求,我们知道GET请求是请求服务器的资源,因为他是只读操作,无论操作多少次,服务器上的资源都是安全的,并且每次操作的结果都是相同的,所以GET请求是幂等且安全的

其次在来看POST请求,因为POST请求是提交数据,既然是提交数据,那就会对服务器上的资源进行修改,所以是不安全的。同时提交多次数据就会创建多个资源,所以也是不幂等的。

3. HTTP 与 HTTPS的区别

1. HTTP的端口号是80,HTTPS的端口号是443。

2. HTTPS需要向CA(证书权威机构)申请数字证书,以此来保证服务器的身份是可信的。

3. HTTP的连接建立相对简单,经过TCP三次握手后就能进行HTTP报文的传输,而HTTPS在TCP三次握手之后,还需要进行SSL/TLS的握手过程,才可以进行加密报文传输,现在大多数浏览器都要求用HTTPS进行报文传输。

4. HTTP是超文本传输协议,信息是明文传输的,存在一定的安全风险问题。HTTPS则解决了HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。

 

 

今天就先写这些吧,只是一些简单的基础知识,关于HTTP还有很多要介绍,日后可能会陆续的补上。

提交评论

您尚未登录 :-( ,登录之后方可评论 登录 or 注册

评论列表

暂无评论