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



相关文章
|
1天前
|
缓存 安全 Linux
【探索Linux】P.33(HTTP协议)
【探索Linux】P.33(HTTP协议)
26 7
|
2天前
|
存储 算法 安全
[计算机网络]---Https协议
[计算机网络]---Https协议
|
2天前
|
存储 缓存 网络协议
[计算机网络]---Http协议
[计算机网络]---Http协议
|
8天前
|
前端开发 API 网络架构
RESTful接口与http协议状态表述
该文介绍了RESTful风格API的好处和设计原则。RESTful API以资源为中心,通过HTTP方法(GET, POST, PUT, DELETE)表示操作,利用状态码反馈操作结果。它简化了客户端与服务端的交互,提供了一种通用规范,减少沟通成本。设计要点包括:URI描述资源,HTTP方法体现操作,使用标准HTTP状态码,GET不改变数据,使用复数名词,支持复杂资源关系,可选实现HATEOAS,以及接口版本管理。
|
9天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
9天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议
|
12天前
|
网络安全
socks5代理连接成功无法访问http协议的站点
无法通过SOCKS5代理访问HTTP网站可能由多个原因引起,如代理服务器不支持HTTP、配置错误、防火墙阻拦、连接问题、身份验证失败、浏览器设置不当或服务器被封锁。检查并解决这些因素,若问题持续,需深入排查或联系服务提供商。
|
14天前
|
缓存 网络协议
HTTP 协议初探
HTTP 协议初探
33 1
|
19天前
|
安全 网络安全 数据安全/隐私保护
HTTPS协议
HTTPS协议
22 0
|
20天前
|
网络协议 安全 网络安全
Socks VS HTTP 谁才是最快的代理协议
Socks VS HTTP 谁才是最快的代理协议