原文地址:Why should I care about HTTP?

原作信息:by Devon Campbell. Dec 15 '18 Originally published at raddevon.com on Dec 14, 2018

关键词:HTTP ,BEGINNERS

wiki地址: wiki


“HTTP”是URLs地址开头的前四个字母,对吧?这就是你构建网站所必须要知道它的原因。

就像理解二进制(binary)一样,它也会帮助你理解你在其他方面不会理解的问题。

他不是你必须要掌握的知识点(material:材质、物料),但是理解他会使你成为一个更全面的开发者。

作为我们软件所必须要遵循的基本通信协议(primary communication protocol),让我们来学习一下HTTP吧!

什么是HTTP?

HTTP就是超文本传输协议(Hypertext Transfer Protocol),他是一个为发送和接收(传输)web页面(超文本)而设定的规则(协议)。

尽管它被称作超文本传输协议(HTTP),但它还可以被用来发送许多除超文本以外的其他内容 - 比如,JSON和images。

HTTP是如何工作的?

HTTP通信发生在客户端和服务器之间。客户端发起HTTP请求,服务器响应客户端的请求。你的web浏览器就是一个HTTP客户端。

当你浏览一个web页面的时候,你的浏览器发送一个HTTP请求到一个能响应的服务器上,它(几乎)就是这么简单。

事实上,一个简单的web页面通常由多个请求组成。通常情况下,一个请求由一些HTML发起,然后服务器响应这个HTML请求。

浏览器开始渲染这个页面,紧接着会发起更多渲染这个页面时所需的其他资源的请求 —— 像JavaScript文件、CSS文件和图片等的请求。

请求的部分组成

下边就是访问RadDevon.com的主页时原始请求的样子:

GET / HTTP/2
Host: raddevon.com
User-Agent: curl/7.54.0
Accept: */*

当你在地址栏输入“raddevon.com”并按下回车后,你的浏览器就会发送这个请求到我的主机上,以下是部分内容:

  • GET —— 请求方法。它告诉服务器这个请求想要做什么。这个请求希望服务器能够返回一些数据。MDN有一个很好的请求方法参照表

  • / —— 我们请求的资源地址。由于我们请求的主页就在服务器的根目录下,所以“/”就是我们请求资源的地址。

  • HTTP/2 —— 协议。这说明了该特殊请求是基于http/2.0版本的协议发出的。

另外三行就是头信息,他们告知接收请求的服务器更多关于这个请求的信息。

  • Host是非常明显的。 他用来识别目标主机。

  • User-Agent 用来识别发送请求的客户端,我例子中是用一个简单的Unix命令行当作请求客户端发送的这个curl的请求。当你用浏览器发起一个请求的时候,这里就会展示浏览器的名字和版本。

  • Accept 告诉服务器,客户端可以接收的响应类型

这个网页中讲述了更多在你的网络请求中可以用到的请求头,我这里仅仅是本次请求发生时用到的。你甚至可以自己创建请求头来给服务器发送额外的信息。

除了头部信息以外,你的请求可能还会有一个身体。当一个表格被提交后,他的数据通常放在请求体中被发送给服务器。

我为什么需要去理解HTTP?

理解HTTP是怎么工作的,特别的,理解各种各样的请求状态码和他们各自的意思,能帮助你解决自己程序的问题、恰当的处理错误。

了解到你页面中用的每一个资源(脚本、图片、样式表、等等)都表示一个单独的请求也可以帮你优化自己程序的性能。

这篇文章帮助到你了嘛?我的目标是去帮助人们逐渐深入到web开发领域里来。

【译】为什么要了解HTTP的更多相关文章

  1. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  2. Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新

    因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...

  3. RxJS + Redux + React = Amazing!(译二)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...

  4. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  5. CSharpGL(31)[译]OpenGL渲染管道那些事

    CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...

  6. [译]基于GPU的体渲染高级技术之raycasting算法

    [译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...

  7. Entity Framework 6 Recipes 2nd Edition(9-4)译->Web API 的客户端实现修改跟踪

    9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...

  8. Entity Framework 6 Recipes 2nd Edition(10-1)译->非Code Frist方式返回一个实体集合

    存储过程 存储过程一直存在于任何一种关系型数据库中,如微软的SQL Server.存储过程是包含在数据库中的一些代码,通常为数据执行一些操作,它能为数据密集型计算提高性能,也能执行一些为业务逻辑. 当 ...

  9. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  10. [译]Angular2 和TypeScript -- 一次简要的预览

    原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者:  Yakov Fain Posted o ...

随机推荐

  1. 开设“C程序答疑解惑”的初衷

    博主经常在QQ群里.论坛里看到好多C语言初学者,甚至是有一定编程经验的人,咨询在编程中遇到的一些稀奇古怪的问题.博主对这些问题做过分析汇总,有些问题确实隐蔽的非常深,像break关键字用的不对啦,局部 ...

  2. 【小家Spring】老项目迁移问题:@ImportResource导入的xml配置里的Bean能够使用@PropertySource导入的属性值吗?

    #### 每篇一句 > 大师都是偏执的,偏执才能产生力量,妥协是没有力量的.你对全世界妥协了你就是空气.所以若没有偏见,哪来的大师呢 #### 相关阅读 [[小家Spring]详解Propert ...

  3. nu.xom:Attribute

    Attribute: 机翻 Attribute copy():生成一份当前Attribute的拷贝,但是它没有依附任何Element Node getChild(int position) :因为At ...

  4. Linux 系统的基本操作及工具的使用

    基本操作命令如:useradd.userdel.passwd.su 添加用户.删除用户.修改密码.切换用户 ls.ll.cd.cp.mv.chmod ps.kil.man mkdir.touch.ta ...

  5. Oracle将两张表的数据插入第三张表且第三张表中不存在

    1.由于是先查再插所以不能使用insert into table1() values(), 要使用insert into table1() select * table2,不能使用values. 2. ...

  6. Excel催化剂开源第30波-在Excel上尽情地使用LINQ

    对于笔者这样的数据分析工作者来说,对数据库有较深的掌握,当然少不了对SQL查询的深度使用,如果在编程的世界中,可以复用这样的能力,真的是一件多么令人高兴的事情. 在.Net的世界中,恰恰提供了这样的能 ...

  7. Android之无限轮播图源代码

    Android轮播广告图是大家经常用到的一个控件今天便撸了一把代码 实现步骤 使用Viewpager进行实现图片滑动 设置ViewPager的数据,让其无限切换 Activity代码 public c ...

  8. [系列] Gin框架 - 数据绑定和验证

    目录 概述 推荐阅读 概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方 ...

  9. 二、C#中数据库连接是用sqlconection 而access是用oledb对象例如:

    OleDBConnection conn =new OleDBConnection();(简单记一下) 重点是研究winform 中combobox 与datagridview 的联动问题: 首先是c ...

  10. Django实现web端tailf日志文件

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇<Django使用Channels实现WebS ...