【译】为什么要了解HTTP
原文地址: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的更多相关文章
- RxJS + Redux + React = Amazing!(译一)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...
- Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
- RxJS + Redux + React = Amazing!(译二)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- CSharpGL(31)[译]OpenGL渲染管道那些事
CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...
- [译]基于GPU的体渲染高级技术之raycasting算法
[译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...
- Entity Framework 6 Recipes 2nd Edition(9-4)译->Web API 的客户端实现修改跟踪
9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...
- Entity Framework 6 Recipes 2nd Edition(10-1)译->非Code Frist方式返回一个实体集合
存储过程 存储过程一直存在于任何一种关系型数据库中,如微软的SQL Server.存储过程是包含在数据库中的一些代码,通常为数据执行一些操作,它能为数据密集型计算提高性能,也能执行一些为业务逻辑. 当 ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- [译]Angular2 和TypeScript -- 一次简要的预览
原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者: Yakov Fain Posted o ...
随机推荐
- [Poi2012]Festival 题解
[Poi2012]Festival 时间限制: 1 Sec 内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...
- PHP---微信JS-SDK获取access_token/jsapi_ticket/signature权限签名算法,php/thinkphp实现微信分享自定义文字和图片
PHP---微信JS-SDK获取access_token/jsapi_ticket/signature权限签名算法, php/thinkphp实现微信分享自定义文字和图片. 一.先看微信JS-SDK文 ...
- panic: time: missing Location in call to Time.In
docker容器发布go项目出现以下问题: panic: time: missing Location in call to Time.In COPY --from=build /usr/share/ ...
- mysql协议分析1---报文的格式和基本类型
navicat 和 mysql 是一对好基友,每天都有非常频繁的交流,主人在navicat上写下每条sql语句,轻轻的点了下执行按钮,navicat就飞快的把主人的指令传送到mysql那里,mysql ...
- Java类什么情况下被初始化?
1.创建类的实例(new 的方式).访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法 2.反射的方式 3.当初始化一个类的时候,如果发现其父类还没有进行初始化,则需先触发其父类的初始 ...
- HTTP_4_返回结果的HTTP状态码
状态码:返回请求结果. 状态码种类繁多,以下总结常用的状态码: 类别 信息性状态码 1XX 服务器接受请求,继续处理 成功状态码 200 OK 请求处理成功,并返回资源(响应报文中 ...
- Linux学习笔记06之DNS
一.DNS概念:Domain Name System(域名系统) 是互联网上作为域名和IP地址相互映射的一个分布式数据库 二.DNS功能: 完成IP地址和域名之间的一个映射 三.DNS分类: 1.静态 ...
- 日常用shell命令
递归更改文件夹权限:chmod -R 767 文件名 mac启动apache sudo apachectl start/restart mac停止apache sudo apachectl stop ...
- 【iOS】安装 CocoaPods
1. 打开 terminal 2. 移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3. 使用新的源 $ gem sources ...
- 【转载】C/C++中long long与__int64的区别
在C99标准(详情请猛击:C语言的发展及其版本)中,增加了对64位长整型数据的支持,它的类型就是 long long,占用8个字节. 由于C99标准发布较晚,一些较老的C/C++编译器不支持,新编译器 ...