大数跨境

【干货来了】HTTP协议讲解

【干货来了】HTTP协议讲解 河北镌远网络科技有限公司
2019-11-21
0
导读:【干货来了】HTTP协议讲解

W

E

B

web服务:Web内容都是存储在Web服务器上的,Web服务器所使用的是HTTP协议;

web客户端:客户端向服务器发送 HTTP 请求, 服务器会在 HTTP 响应中回送所请求的数据;

web资源:Web 服务器文件系统中的资源;

**MIME 类型:**Web 服务器会为所有 HTTP 对象数据附加一个 MIME 类型,当 Web浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,看看它是否知道应该如何处理这个对象。这里举出了几个常见的HTTP对象以及他们的MIME类型;

如下图所示

HTML 格式的文本文档由 text/html 类型来标记

普通的 ASCII 文本文档由 text/plain 类型来标记

JPEG 格式的图片为 image/jpeg 类型

GIF 格式的图片为 image/gif 类型

image

URI:服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。
URL:URL是资源标识符最常见的形式,URL 描述了一台特定服务器上某资源的特定位置.现在,几乎所有的 URI 都是 URL。
URN: URI 的第二种形式就是统一资源名(URN),URN 是作为特定内容的唯一名称使用的,与目前的资源所在地无关。
HTTP方法:HTTP方法会告诉服务器要执行什么动作,以下是几个常见的方法。

状态码:每条 HTTP 响应报文返回时都会携带一个状态码。下面是几个常见的状态码。

详解URL

1. URI,URL,URN三者之间的关系

URI 是一类更通用的资源标识符,URL 实际上是它的一个子集。
URI 是一个通用的概念,由两个主要的子集 URL 和 URN 构成,URL 是通过描述资源的位置来标识资源的,而 URN则是通过名字来识别资源的,与它们当前所处位置无关。

目前来看,网络中使用的基本上都是URL。

2. URL简单结构

URL大致可分为3部分,此处以

http://www.joes-hardware.com/seasonal/index-fall.html为例:

第一部分:http。表示URL的方案,方案可以告知 Web 客户端怎样访问资源。不区分大小写
第二部分:www.joes-hardware.com。主机部分, 表示服务器的位置(如果知道域名与IP间的关系,会理解更好),这部分告知Web 客户端资源位于何处。

第三部分:/seasonal/index-fall.html。表示资源路径,路径说明了请求的是服务器上哪个特定的资源。

3. URL的详细语法

元素URL的语法格式为:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>,在这些中最重要的元素就是上文所说的方案(scheme),主机(host), 路径(path)。一般情况下了解这三个就够了。

主机与端口

主机——告诉应用程序是哪台机器装载了资源。
举个例子,当你在购买了云服务器想要为你的网站提供后台服务时,你需要申请一个服务器IP地址(如http://192.168.10.10)来作为主机名。
恰好你购买了一个域名,并将该域名与此IP绑定,那么此时这个域名也叫做你的主机名。如http://www.songyingxin.com
端口——指定了在这台机器的什么地方能找到能对目标资源进行访问的服务器。如Http协议的默认端口是80,表示你可以通过访问服务器的80端口获取相关资源。

用户名和密码

很多服务器都要求输入用户名和密码才会允许用户访问数据。常见的实例为FTP服务。

ftp://ftp.prep.ai.mit.edu/pub/gnu

ftp://anonymous@ftp.prep.ai.mit.edu/pud/gnu

ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pud/gnu

例子1:例子1中没有用户和密码组件。如果某方案(如FTP)要求输入用户名和密码,但用户没有提供,它通常会插入一个默认的用户名和密码。
例子2:例子2中使用anonymous作为用户名。其中@将用户和密码组件与URL的其他部分隔开(本例中@后的是主机名)。
例子3:例子3指定anonymous作为用户名,my_passwd作为密码,用户名和密码之间使用:分开。

路径

路径说明资源位于服务器的什么地方。可以将服务器看作电脑,对比一下你文件存储方式,路径说明了你文件的存储位置。

参数

参数部分由字符;将其与URL其他部分分割开来。参数为应用程序提供访问资源所需的所有附加信息。

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

这个例子中有两个路径段,hammers和index.html,二者都有参数。hammers路径段有参数sale,其值为sale,index.html段有参数graphics,其值为true。这部分并不常用。

查询部分

通过查询部分来缩小请求资源类型范围。在爬虫中你经常会用到参数部分。之后的部分为查询部分。查询与查询之间使用&分开

http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue

例子中我们使用了两个查询部分item=12731&color=blue,表示查询文件中item为12731,color为blue的条目。

片段

在《计算机网络》一书中称其为”锚“。片段用来表示一个资源内部的片段。
httP://www.song/xom/tools.html#name   # 查找tool.html文件中关于name 的那部分内容
HTTP 服务器通常只处理整个对象, 而不是对象的片段,客户端不能将片段传送给服务器(参见图 2-3)。浏览器从服务器获得了整个资源之后,会根据片段来显示你感兴趣的那部分资源。

详解HTTP报文

报文组成部分

HTTP报文包含三部分:

对报文进行描述的起始行(start line)
包含属性的首部(header)块
可选的、包含数据的主体(body)部分。

主体是一个可选的数据块。与起始行和首部不同的是,主体中可以包含文本或二进制数据,也可以为空。

报文语法

报文可以分为两类:请求报文,响应报文。如下图就很好的展示了请求报文和响应报文。

1.HTTP 请求报文

请求报文主要是对服务器请求对资源的一些操作。

1.1请求行

请求行也是请求报文的起始行,包含3个内容:请求方法,URL,协议版本。
请求方法:描述服务器应该执行的操作,如GET, PUT等方法
URL:即请求资源的地址
协议版本:即HTTP的版本。版本号说明了应用程序支持的最高 HTTP 版本。
想深入了解的小伙伴可以直达:HTTP协议的前世今生——各版本HTTP协议对比

注意:这些字段都由空格符分隔。一个简单的例子如下:

GET /source.jpg HTTP/1.1

 请求方法略解

当然,最常用的还是GET,POST这两种方法,一般情况下,搞懂这两种方法足以应付大多情况了。
如果想深入了解一下这些方法,可以参见:HTTP方法

1.2 请求头部(请求首部)

请求头部主要是用来说明服务器要使用的附加信息。本质上来说,它们只是一些名 / 值对的列表。如下图是我抓取的访问简书时的部分HTTP报文请求头部:
Host: www.jianshu.com
Connection: keep-alive
Accept: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)
HTTP首部语法极为简单,名字后面跟着冒号:,然后跟上可选的空格,再跟上字段值,最后是一个换行符
一点注意:将长的首部行分为多行可以提高可读性,多出来的每行前面至少要有一个空格或制表符(tab)。如:
Server: Test Server
 Version 1.0

因为请求首部是可以用户自定义的,比如你与网络打交道时就经常需要自己添加一些请求头部。所以,了解一些关于常用的请求头部是很有必要的。

1.3 请求实体(请求正文)

HTTP 报文的第三部分是可选的实体主体部分。实体部分就是 HTTP 要传输的内容。HTTP 报文可以承载很多类型的数字数据:图片、视频、HTML 文档、软件应用程序、信用卡事务、电子邮件等。

2. HTTP响应报文

对比请求报文与响应报文两张图你会发现二者很像。HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。

在响应报文中,只有第一部分的首部行与请求报文中的不同,其余部分无论是请求首部与响应首部,请求正文与响应正文在格式上都是一样的。

状态行

状态码包含三部分:HTTP协议版本号,状态码,状态信息描述。HTTP协议版本号不多说,状态码表示的是返回状态。如常见的404就表示请求失败。常见的状态码有:

200 OK                        //客户端请求成功

301 Moved Permanently         //请求的对象已经永久转移了,新的URL定义在响应报文的Location:首部行中。

400 Bad Request               //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden                 //服务器收到请求,但是拒绝提供服务

404 Not Found                 //被请求的文档不在服务器上

500 Internal Server Error     //服务器发生不可预期的错误

503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

505 HTTP Version Not Supported    //服务器不支持请求报文使用的HTTP协议版本

状态信息为状态码提供了文本形式的解释。状态信息和状态码是成对出现的。


关于我们:

河北镌远网络科技有限公司(Hebei JYCYBER TechnologyCo.,Ltd.)是一家集人才、技术和经验于一体的,提供全面网络安全解决方案的专业服务商。镌远科技致力于为各行业的网络安全需求提供软件研发和通用解决方案,业务领域主要包括基础服务、咨询业务、产品研发和安全培训四大版块,各版块相互独立又相辅相成,完美阐释了“专业服务、全程服务、延伸服务”的服务体系和“单一业务与长远目标相融合”的服务理念。

关注镌远科技,关注网络安全!

  河北地址:河北镌远网络科技有限公司

河北省邯郸市丛台区中华北大街193号慧谷大厦14层

总部地址:北京冠程科技有限公司

北京市昌平区科技园区东区产业基地企业墅上区一号楼九单元四层

实训基地:河北省石家庄市电子信息学校冠程科技研究与实训中心


欢迎扫描关注我们,及时了解更多关于网络安全相关知识

【声明】内容源于网络
0
0
河北镌远网络科技有限公司
河北镌远网络科技有限公司是一家集人才、经验、技术于一体的,提供全面系统集成解决方案的专业IT服务商。公司致力于为各个行业的业务信息化提供软件和通用解决方案、系统架构,系统管理和数据安全服务、以及IT咨询规划、系统集成与系统服务等专业化服务。
内容 582
粉丝 0
河北镌远网络科技有限公司 河北镌远网络科技有限公司是一家集人才、经验、技术于一体的,提供全面系统集成解决方案的专业IT服务商。公司致力于为各个行业的业务信息化提供软件和通用解决方案、系统架构,系统管理和数据安全服务、以及IT咨询规划、系统集成与系统服务等专业化服务。
总阅读554
粉丝0
内容582