如果被问到 HTTP 协议,你真的能讲清楚吗?
前段时间,在和许久未见的老同学聊天时,突然被问到 http 协议到底是什么?脑海里面第一时间想起来的就是 request 请求、response 响应之类的词汇,但是这样讲他真的能知道是什么吗?我反问自己,于是找了相关的资料攻读一番。其实,大多数程序员经常都是在每天努力的搬砖,我相信,很少有人认真的研究过 http 协议到底是什么?
用官方的话来形容 http 协议又被称之为 超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议,它是网络互联的基础。我们通常知道 http 协议,说白了只是知道其如何使用在编程中,但其实 http 协议的底层实现极其复杂,它是通过网络七层架构或者说是网络五层架构通过一层一层的延伸到最上层的应用层协议。网络架构不是我们所研究的重点,但是起码得知道 tcp 协议的基本原理,为什么这里又提到了 tcp 协议,因为 tcp 协议也是属于应用层的一种协议,并且 http 协议就是对 tcp 协议的一种封装。
接下来,我们看看 http 协议是怎么工作的。一个 http 请求在发送到服务端之后,首先会建立一个 tcp 的套接字连接,紧接着服务端会收到来自客户端的请求报文、服务端对报文完成解析、就是知道这个请求想干什么,然后服务端将其客户端请求所需要的的内容信息返回给客户端、同时也会返回 tcp 的连接状态等信息,客户端拿到信息之后进行解析,在此之前响应也已经完成、相应的连接也会得到释放。注意:如果是对域名进行请求,在 tcp 套接字建立之前还会先进行域名服务器的访问完成域名解析。
下面用几个有趣的图来说明一下( 图片引用自:博客园 | 作者:爱文飞翔 ),通过图片说明 http 协议的请求过程。
上面两个有趣的图反映了 http 协议大致的请求过程。
另外,http 协议是一种无状态的协议。也就是说,http 协议自身不对请求和响应之间的通信状态进行保存、不做持久化的处理,在完成了一次请求、响应操作之后会断开连接。
在日常的编码中,http 请求主要定义了八种执行请求的方法。也就是朋友在问起时我脑海里面想到的关于 http 请求的 POST、GET、PUT、DELETE 等,这些内容只是 http 请求过程可以用于操作服务器资源的方法而不是 http 请求的概念或者原理性的东西。
更多精彩前往老王说编程>>>
如果被问到 HTTP 协议,你真的能讲清楚吗?的更多相关文章
- Java 訪问权限控制:你真的了解 protected keyword吗?
摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...
- 【转】再有人问你Http协议是什么,把这篇文章发给他
一.HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相 ...
- 面试官问我HTTP,我真的是
面试官:今天要不来聊聊HTTP吧? 候选者:嗯,HTTP「协议」是客户端和服务器「交互」的一种通迅的格式 候选者:所谓的「协议」实际上就是双方约定好的「格式」,让双方都能看得懂的东西而已 候选者:所谓 ...
- 你真的了解load方法么?(转载)
本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Ma ...
- C#的HTTP协议中POST与GET的区别
引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来.但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态 ...
- [ASP.NET] Http协议GET与POST
引言 HTTP 协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来.但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状 ...
- TCP/IP协议详解概述
TCP/IP协议详解卷1--第一章概述--读书笔记 作者:vpoet 日期:2015/06/25 注:本系列的文章只是作者对TCP/IP协议的理解,难免会出现纰漏或者不完整,当然也有可能很肤浅,希望大 ...
- Android 面向协议编程 体会优雅编程之旅
Android中面向协议编程的深入浅出 http://blog.csdn.net/sk719887916/article/details skay编写 说起协议,现实生活中大家第一感觉会想到规则或者约 ...
- 网络协议 终章 - GTP 协议:复杂的移动网络
前面都是讲电脑上网的情景,今天我们就来认识下使用最多的移动网络上网场景. 移动网络的发展历程 你一定知道手机上网有 2G.3G.4G 的说法,究竟这都是什么意思呢?有一个通俗的说法就是 ...
随机推荐
- Linux中ftp服务器搭建
一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...
- Python - 字符串常用函数详解
str.index(sub, start=None, end=None) 作用:查看sub是否在字符串中,在的话返回索引,且只返回第一次匹配到的索引:若找不到则报错:可以指定统计的范围,[start, ...
- C语言变量类型
#include <stdio.h> // C 语言中,任何数据类型都不可以直接存储一个字符串.那么字符串如何存储? //在 C 语言中,字符串有两种存储方式,一种是通过字符数组存储,另一 ...
- stream之map的用法
一.Stream管道流map的基础用法 最简单的需求:将集合中的每一个字符串,全部转换成大写! List<String> alpha = Arrays.asList("Monke ...
- height设置100%不起作用
详细讲解了原因:http://www.webhek.com/post/css-100-percent-height.html
- [HNOI2011]XOR和路径 题解
设 \(f(x)\) 表示从 \(x\) 节点走到 \(n\) 的期望.有 $$f(x)=\sum_{{x,y}}\frac{f(y)\oplus w(x,y)}{{\rm deg}(x)}$$ 由于 ...
- 【LOJ 109 并查集】 并查集
题目描述 这是一道模板题. 维护一个 n 点的无向图,支持: 加入一条连接 u 和 v 的无向边 查询 u 和 v 的连通性 由于本题数据较大,因此输出的时候采用特殊的输出方式:用 0 或 1 代表每 ...
- tomcat与springmvc 结合 之---第19篇(下,补充) springmvc 加载.xml文件的bean标签的过程
writedby 张艳涛,上一篇写了springmvc对<mvc:annoXXXX/>标签的解析过程,其实是遗漏重要的细节,因为理解的不深入吧 今天接着解析<bean>标签 & ...
- elementUI的el-input和el-select宽度 一致
在用vue时,用到了element组件的 el-input 和 el-select(多选框)组件,但是宽度显示不一样,查看了多选框的css,发现element-style是写死的 添加style=&q ...
- 自制车速记录仪「GitHub 热点速览 v.21.31」
作者:HelloGitHub-小鱼干 如果你有一辆普通的自行车,那么就可以使用下 X-TRACK 这个项目制作一个自己的测速器,记录你的行驶轨迹还有车速,体验一把硬件发烧友的乐趣.如果你有一个非 ma ...