Http协议之基础知识

简介:

写在前面的话

昨晚接到阿里巴巴的电话,是CDN运维工程师岗位的面试内容。从这个角度上来说,我得承认阿里巴巴在互联网上的专业性,很多集团都没有为CDN单独开设一个运维工程师的岗位,而阿里巴巴却这么做,可见阿里巴巴在互联网上的细节和挖掘程度的确是全国前列的水平。


既然是CDN运维,何为CDN?CDN就是内容分发网络,要知道服务器是固定的,但是服务器上的软件是可以更新/调优的,通过更改软件的配置也能尽大的达到网页快速响应的效果。CDN运维工程师的要求不多,但是较难,因为每一块挖掘都很深,主要几个大块是:http协议,tcp/ip协议,DNS协议,cdn基础和nginx等软件的应用。所以我就趁热打铁看了一些文章,写一下自己的心得。如果阿里巴巴还有第二次电话面试的机会,我可以比上一次多说一点。


Http是啥?

Http就是HyperText Transfer Protocol(超文本传输协议)的缩写,它是一个应用层的协议也是一个无状态协议。(ftp也是应用层协议,tcp是传输层协议,ip是网络层协议)


何为应用层协议?也就是说http协议是在tcp这个传输层协议基础之上实现的,有时也会承载在CLS和SSL协议之上的,使用ssl的话,这个时候http协议就成了https协议,https更安全一些。http的端口是常见80端口,https端口是443端口


何为无状态协议?http协议是“请求——>响应”这个模式工作的,客户端点击鼠标发送“我要看这个网页”请求,服务器收到请求,然后做出响应。但是客户端再次点击鼠标发送新的请求,服务器会重新响应。也就说每一次请求和相应跟上一次相应是否成功是没有关系的。


用户点一点鼠标就能一张网页一张网页的翻阅,操作很简单,但是原理步骤却不是那么容易的,具体的步骤如下:

1)点击某个网页超级链接,这个时候http请求发送到服务器,http协议开始执行;

2)客户端向服务器发出请求:“我需要url,协议版本号,MIME信息”;

3)服务器接收到请求,把上面能提供的都提供了,如果成功,状态码是200或者是其他2字头的。如果失败,那状态码就是404;

4)客户端索要的信息返回成功,以网页的形式出现在客户的屏幕上,双方断开连接。如果返回信息失败,返回404错误信息到客户的屏幕上,双方断开连接。


浏览器是啥?

浏览器就是IE,浏览器是火狐,浏览器是360,浏览器是UC,浏览器是chome,浏览器是opera。不同的厂家生产出不同的浏览器,但是浏览器究竟在整个数据传输中扮演什么角色呢?


比如客户机向web服务器(apache、nginx and so on)发送“我要看‘西甲新闻’这个网页”的要求,web服务器收到之后,如果都正常的话,web服务器就会把前端码农们编写好的“西甲新闻”的网页源代码返送给客户端,然后客户端收到这个网页之后,使用浏览器把这些源代码“翻译”成我们常见的网站。整个网站都出现在屏幕上之后,客户端和web服务器断开了链接。(基本上这又是重复了一遍上面的四步骤。)


由此可见浏览器的主要任务就是将前端码农们编写的html文件转化成可视的一张又一张图片和文字,然后组合成一个网页,供我们翻阅浏览。浏览器和web服务器都遵从http协议,但是要知道浏览器是可以发送HTTP协议的,但是HTTP协议不一定非要浏览器才能发送,用cmd里的telnet命令也可以,但是使用telnet发送了请求,服务器返回了应答,得到的是一个网页的源代码,也就是html的代码,没有经过浏览器的翻译,也就而不是我们常见的网页的样子。


win10的telnet

很多人都把自己的win7/8升级成了10,微软为了保证自己系统的开机时间,在win 7的版本就把telnet默认禁用掉了。到了win10做的更绝,直接把tcp的服务端给阉割掉了。所以很多用户即使在“启用或关闭windows功能”里对telnet服务器打了勾,在本地服务里也看不到telnet,在cmd里使用telnet自然也会被提示“不是内部或外部命令"。遇到这种情况,怎么办呢?win10自带一个“应用商店”,类似apple store,在里面搜索telnet,会有两个软件,一个就是原来的telnet,收费的,12美元多,可以免费试用30天,真心叫人骂娘。另一个就是"Remote Terminal",这个是免费的,就可以用它。


使用telnet实验

在windows里启动cmd,然后随便telnet一个目标,比如百度网。

telnet www.baidu.com 80

输入之后,按下ctrl+[启动“回显”功能。然后输入如下内容:

GET /index.html html/1.1

这个东西就是“请求行”,其中GET叫做“请求方法”,/index.html是请求资源路径,html/1.1是http协议版本。这句代码的意思就是“用GET这个请求方法和http1.1的版本来请求index.html的内容”。

两次回车之后,得到如下图片:

wKiom1bZlSrCPUBTAAOgNchSW3U546.jpg

显而易见,得到了返回的信息以及百度首页的源代码。


先说请求方法,GET不是唯一的请求方法,还有如下几个:

POST(添加某内容)

OPTIONS(查询性能选项以及可执行那些方法)

TRACE(远程诊断服务器)

DELETE(删除)

CONNECT(使用其他代理进行传输)

PUT(修改某内容)

PATCH(对于某项进行更改)

HEAD(类似于GET,但是不返回大片大片的网页源代码信息,比如仅仅是确认一个照片依旧存在)

还有什么LOCK,UNLOCK,MOVE,COPY等其他的方法,一共是14个方法左右。这些方法不一定全部都会被远程服务器所识别,但是GET和POST是肯定会被识别的。


继续说http版本,现在的版本基本都是1.1,1.0和0.9版本已经淘汰了。


上面这个request信息仅仅是一个请求行。request还会有“请求头信息”和“请求主信息”。

请求头信息的模样是类似这样的,可以在浏览器里使用“审查元素”:

Accept-Language: zh-cn,zh;q=0.5    #浏览器的语言是中文

Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7    #浏览器的编码是GB2312

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    

#浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 */*,优先顺序是它们从左到右的排列顺序。

Accept-Encoding: gzip, deflate    #浏览器支持的方法是gzip

User-Agent: Mozilla/5.0 (compatible; 域名)    #浏览器的代理

Host: 域名    #浏览器请求的网址

Connection: Keep-Alive    #链接的状态是Keep_Alive


请求主信息在GET方法里是可以省略的,但是在POST方法里确实必不可少的,因为post本身就是要添加内容,主信息就是要添加的内容。但是http的添加不像是记事本直接往里写东西。它需要先指定type,这个type有点类似ajax的一个东西,同时还要注定输入的字符长度,最后才是输入内容。比较鸡贼的是,type先设定长度,一旦输入的内容达到了长度将会自动停止并且上传到服务器,哪怕内容其实没有输入完毕。


至于返回的信息,看上面那张图就显而易见了。第一行的http/1.1就是确认http协议的版本,之后跟着的200就是状态码。1字头的状态码是消息,2字头的状态码基本都是0K,3字头的是需要代理转接,4字头基本都是请求出错,比如说400就是请求语法有错误,403是forbidden,404是not found,5字头和6字头的状态码是服务器出了错误,比如500就是服务器有错误,需要管理员检查一下服务器的配置,503是服务器暂时没有链接到,稍等一会可能会链接成功。



具体各状态码信息:http://baike.baidu.com/link?url=lwIIa3dEAIXeS201K_sXZRcgv7sf9d9UoPMysGrdvGIEQXexAC5BcHzbU8yl8WnYan8sUOSfrmdO3He6F07GfK



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1736004



相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
1月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
79 7
|
24天前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
52 11
|
24天前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
|
24天前
|
缓存 安全 网络协议
HTTPS协议的历史发展
HTTPS协议的历史发展
35 8
|
25天前
|
安全 应用服务中间件 Linux
判断一个网站是否使用HTTPS协议
判断一个网站是否使用HTTPS协议
34 4
|
1月前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
1月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
84 3
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
51 13
|
1月前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
1月前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】

热门文章

最新文章

下一篇
DataWorks