很多同学可能刚接触编程,停留在for while if的阶段,觉得自己学Java或者C++也可能是Python并不用学习HTTP知识,但实际上,在日常工作中,不管是学习什么语言,都是要落地的,所谓落地就是让你的for while if能用在具体的工作中。比如大家一开始都可能尝试编一个加减乘除的计算器,这就是语言的落地。那么在落地中很少有人能避开网络编程,网络编程就离不开计算机网络技术里繁杂的知识。但实际上计算机网络技术中,日常能接触的,或者新手们日常能接触的部分,其实并没有那么多。既然是新手,抓住问题的梗概,了解技术主线,就是必须的,而HTTP就是主线中的重点,基本上日常编程一定会涉及到网络编程,涉及到网络编程,就一定涉及到HTTP。所以我们通过这一篇文章,全面快速的了解HTTP有关技术和概念,以及他们落地的有关例子,让我们的知识点不死板,不空虚,少废话。

1.HTTP简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议工作于客户端-服务端架构为上。HTTP使用统一资源标识符
*(Uniform Resource Identifiers, URI**)来传输数据和建立连接。Web服务器根据接收到的请求后,向客户端发送响应信息。*

既然是新手向,那咱们就就要一个一个概念的解释,知道这三个概念的可以直接跳过去。
在HTTP协议简介中,有大概三个可能大家不理解的名词。

  1. TCP/IP通信协议,这里死记硬背的概念大家可以去百度,有很多,用简介明了的话解释就是,就是网络传输必须使用一套规则,如果规则不同,大家交流就很费劲所以HTTP规定了使用TCP/IP协议,至于为什么用TCP/IP这套规则而不用其他规则,大家可以搜TCP/UDP的区别,为什么HTTP使用TCP协议,什么是IP协议等等。
  2. 客户端-服务端,客户端服务端是我们很常见的术语,你想象一下如果你要去百度搜‘天气’,那么你向百度网站发送‘搜索天气’这条指令的时候,你就是客户端,而百度负责处理这条语句,那他就是服务端,说白了就是一个吃饭的,一个服务员。
  3. URI,很多同学可能平时经常听人说URL,但是为什么这次说的是URI呢?首先URI是用来建立链接和传输数据的,说白了就是咱们平时找东西的网址(这么说并非严格,但是有助于理解),但是这个网址又分两种形式,一种是URN、一种是URL,即URN和URL都是URI的子集,具体区分大家可以去百度。

2.关于URL

为什么要说URL呢,因为我们日常工作中,很少有用URN来建立连接和传输数据的,所以我们在这里主要讲URL,有同学说URL有什么好讲的,不就是一个地址吗?这就是我刚才说为什么URL说成网址不够准确的原因,因为他除了网址还传输了很多内容。

转自:https://blog.csdn.net/jijianshuai/article/details/76144943(下面的简介也参考了这篇文章)
大家看图可以看出来,除了咱们日常的网址比如www.baidu.com,他还包含了其他东西。咱们一个一个部分介绍。

  1. 协议
    指定使用的传输协议,如:http、https、ftp,https可以理解为http的安全版,ftp是用来传输文件的协议,更多协议大家可以边用便了解。

  2. 登录信息
    指用户名和密码作为从服务器端获取资源时必要的登录信息,日常http很少用,但是ftp服务这里通常是必须的。。

  3. 服务器地址
    可以是域名www.baidu.com,也可以是ip:14.215.177.39,这部分才是真正的网址。

  4. 服务器端口
    可选,指定服务器连接的网络端口。所谓端口就是不管访问网站还是FTP还是数据库,往往一个服务器的IP是固定的,但是比如我输入ip14.215.177.39,在浏览器中默认访问80端口,就进入了他的HTTP网站,如果访问21端口,就可能进入这个服务器的FTP。

  5. 文件路径
    指定服务器上的路径来定位指定的资源,简单地说,就是我访问了你的首页,那你的更多页面本地可能在子文件夹,那么文件路径就可以访问到子文件夹的文件。

  6. 参数:
    用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,举个例子,如果你在百度搜索:CSDN,那么百度首页会帮你连接一个新的网址,www.baidu.com/?搜索内容=CSDN(这是个伪网址便于理解),那么百度的服务器就可以通过这个网址知道了你的搜索内容是CSDN,然后再去处理。

  7. 片段:
    片段用于指定网络资源中的片断。html页面中片段则是描点。比如在论坛里你点返回一楼,浏览器迅速跳转到一楼,这就是片段的作用。

3.HTTP主要特点

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

这里可以理解成快餐店和定制餐厅的区别,快餐店就汉堡、饮料、薯条三种零食,作用是解饿、解渴、解馋,所以点餐效率很高只有123三个选项,而定制餐馆问你的口味、数量、煎炒烹炸你喜欢哪种,所以每次沟通时间很长。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

反面例子SSH协议就只能够传输文本

3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

还是点菜,如果你想吃汉堡又不知道能不能吃饱,你就点一个汉堡,然后去吃,这时候别人就可以点他的菜,如果你吃完了还想吃一个那就再回来点,而不是边吃边在点餐这里等着要不要再点下一个占用资源

4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

我和朋友出去吃饭 不需要每次报上姓名 联系方式 等 朋友就知道我是谁 这是有状态的
而我去办事大厅 工作人员不会记得我是谁 每次去都要填表 出示身份证 这就是无状态的

5、支持B/S及C/S模式。

B/S,浏览器对服务端,C/S,客户端对服务端,比如baidu.com,既可以从浏览器里进入,又可以从百度手机客户端进入。

4.HTTP的作用

说了这么多,那么HTTP到底是干嘛的呢?
其实很简单,就是当你想访问一个网站时,通过网址/IP等URI,发送返回网页请求,那么服务器端会把网页返回过来,然后在你的电脑上翻译呈现出你想看到的画面。这就是HTTP的作用。

5.HTTP的请求Request

既然知道了HTTP的作用,那咱们从头开始,还是以baidu为例,当你想要访问百度的时候,你用浏览器打开了baidu.com这个网址,这时候你的电脑就会向百度发送一个请求Request,它包含一些信息比如请求方法、请求主体等。
很明显,你只知道你打开了百度,这些东西你没看到,你也不知道是啥玩意,这就是HTTP的作用,他替你传输并翻译这个请求。
把这些东西提交给百度以后,百度才知道你想干什么,才能回复给你重要的内容

6.回应Response

当年发送了一个request给你想去的服务器的时候,服务器不能不理你,就算不理你,也要给你回复一个拒绝你的消息,这个消息就是Response。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
他们分别告诉你,
1.回复的状态如何,就是搭理你不搭理你一会再搭理你等信息状态
2.服务器的一些附加信息 比如编码类型 日期时间
3.空行 用于隔断消息报头和正文
4.就是正文了 也就是你想看到的“网页”

7.状态码

刚才提到,你给服务器发请求,服务器会给你一个回复,其中最主要的内容就是状态码,因为他表示你这个请求之后的状态。就好像你给女神表白,成功、不成功、当备胎等等还是要有个回应的,躲不过去的。
下面是一些常见状态码

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

我们常说的404错误就来源于此啦。

8.流程

到此,我们已经基本总结了HTTP的工作流程。其实很简单:

本地输入IP或者网址(网址会被DNS服务器解析成IP)—和服务器建立连接—发送请求—服务器内部处理—服务器发送响应—断开连接—浏览器解释内容

其中比较重要的部分在上文都有基本的解析,但是其内部的原理讲三天也讲不完。其实学习计算机就是这样,很简单的东西,先掌握总的方法,再去扣细节的实现原理。

新人向:简洁介绍学习HTTP协议相关推荐

  1. 如何通过抓包实战来学习Web协议?

    我发现大部分技术人,多多少少都会遇到下面的困惑,比如: AJAX 跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么? 缓存可以提升性能,但什么样的 HTTP 消息才会被 ...

  2. 深入学习TCPIP协议

    下决心深入学习TCPIP协议 认真理解阅读<TCP-IP详解卷1 协议> 加油! 目      录 译者序 前言 第1章   概述 1 1.1   引言 1 1.2   分层 1 1.3 ...

  3. 【SMS】SMS协议介绍之SMS协议架构

    今天主要介绍SMS协议的协议架构,以供参考和学习. 图:SMS协议架构 SMS协议分为SM-AL(应用层).SM-TL(传输层).SM-RL(中继层)和SM-LL(低层)等四层结构. SM-AL层主要 ...

  4. 蓝牙核心技术介绍(蓝牙协议、架构、硬件和软件笔记)

    原文地址:http://www.cnblogs.com/zjutlitao/p/4742428.html 声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受 ...

  5. USB学习2-USB协议层数据格式

    本片博客是基于对韦东山老师的USB相关学习视频.<USB2.0>.<MindShare USB 3.0 Technology>.<vdocuments.mx_univer ...

  6. Blender中的Python脚本介绍学习教程

    Blender中的Python脚本介绍学习教程 MP4 |视频:h264,1280×720 |音频:AAC,48000 Hz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:1.63 ...

  7. 简洁的c++http协议获取内容(二)--获取服务器图片

    1 需求 获取http server的图片 用http协议获取server上的图片,前面有文章使用socket直接获取http内容之一,链接如下: 简洁的c++http协议获取内容一 使用简洁的方式目 ...

  8. 用进化的观点学习网络协议

    一般而言,我们比较习惯于用分层的观点来学习网络协议,这也是大学的教学方法.然而这种方式在前期如果有个地方理解不了只有死记硬背了.如果我们带着问题,并且试图去解决这些问题,最终恍然大悟,得到" ...

  9. Android HIDL 介绍学习之客户端调用

    应上一篇文章Android HIDL 介绍学习_Super Jang的博客-CSDN博客_安卓hidl读者的要求,本文更新客户端调用方法. hidl的客户端调用相比服务端的实现要简单很多,本次我们通过 ...

最新文章

  1. jQuery学习笔记--Helloworld
  2. Tungsten Fabric SDN — 零宕机(ZIU)自动化运维
  3. 有关算法方面的经典书籍推荐
  4. python field readonly_Python serializers.ReadOnlyField方法代码示例
  5. linux多核单进程,Linux的在多核处理器3个处理(每个进程在不同的核心上运行)之间共享存储器/ SMP...
  6. 利用AI技术自动测试游戏
  7. 算法:老鼠走迷宫问题
  8. 自适应网站设计对百度友好的关键:添加applicable-device标签(转)
  9. Microsoft® Silverlight™ Streaming by Windows Live™
  10. 运算放大器权威指南(Op Amps for Everyone)
  11. 常用Java编程软件有哪些
  12. 谷歌插件--SuperCopy(解决网页中文字不可复制的问题)
  13. 手机html微信登录,添加手机APP微信登录支持,微信公众号单页应用网页授权登录支持...
  14. 转:稻盛和夫:幸福的那些“法”,背后承载的“道”是什么?
  15. No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi
  16. 控制手柄分体式滑环在船用起重机中的运用
  17. 获取目标RDP登录凭据
  18. 打成jar包 在命令行下执行java工程
  19. 自动驾驶系统的传感器标定方法
  20. 高等数学笔记-苏德矿-第九章-重积分(Ⅰ)-二重积分

热门文章

  1. C# 调用 QnA Maker 实现一对一问答
  2. Solr8.6.3安装与配置
  3. 南瑞许继平高相继停牌,国家电网要加快整合了吗?
  4. 拍拍贷年化收益率的推算
  5. Android调用系统照相机拍照并自定义名称存储
  6. 异步通信还要设置波特率?_深入理解同步/异步通信
  7. eTom学习浅显理解
  8. 搭建Vue脚手架工程
  9. 【计算机组成原理】快到碗里来,轻松图解硬盘结构~
  10. web小游戏开发:蜘蛛纸牌(一)