千家信息网

第十二章 http协议

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,12.1 http协议简介http(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计HTTP最初的
千家信息网最后更新 2024年11月23日第十二章 http协议

12.1 http协议简介

http(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext)。这成为HTTP超文本传输协议标准架构的发展根基。

超文本就是带有超链接的文本,超链接就是基于一些链接实现文档间跳转的文本。


http协议是一种无状态的协议(stateless):

服务器无法持续追踪访问者来源,为了解决此问题引入了cookie和session,实现追踪与保存用户的行为


12.2 http技术架构

http是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。

通过使用web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。

这个客户端被称作用户代理(User Agent)。

应答的服务器上存储着一些资源,比如HTML文件和图像,这个应答服务器被称作源服务器(Origin Server)。


在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和基于它支持的层。事实上,HTTP可在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。


通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器向客户端发回一个状态行,比如"HTTP/1.1 200 OK"和响应的消息,消息的消息团体可能是请求的文件、错误消息或者其它一些信息。HTTP使用TCP而不是UDP的原因在于打开一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据和错误纠正。


通过HTTP或者HTTPS协议请求的资源由统一资源标示符(Uniform Resource Identifiers)来标识。


12.3 http协议功能

http协议是用于从www服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分以及哪些部分内容首先显示(如文本先于图形)等。


http是客户端浏览器或其他程序与web服务器之间的应用层通信协议。在internet上的web服务器上存放的都是超文本信息,客户机需要通过http协议传输所要访问的超文本信息。http包含命令和传输信息,不仅可用于web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。


我们在浏览器的地址栏里输入的网站地址叫做URL(Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超链接时,URL就确定了林浏览的地址。浏览器通过HTTP将web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。


12.4 http协议版本

超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。在RFC 2145中描述了HTTP版本号的用法。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。

http协议的版本主要有以下这些:

HTTP/0.9:最原始版本,功能简陋。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,所以客户端无法向服务器传递太多信息。

HTTP/1.0:这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。支持MIME。

HTTP/1.1:增加了缓存功能,引入了长连接(默认采用),能很好的配合代理服务器工作 ,支持以管理方式同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/2.0:大幅度提升了web性能,减少网络延迟,通常用于https


HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:

a) 缓存处理

b) 带宽优化及网络连接的使用

c) 错误通知的管理

d) 消息在网络中的发送

e) 互联网地址的维护

f) 安全性及完整性


12.5 名词解释

HTML:HyperText Mark Language,超文本标记语言


URI:Uniform Resource Indentifier,统一资源标识符。用于定义全局范围内(包括但不仅限于互联网)去标记唯一的、定位一种资源访问路径的方式,或者命名方式,被称作统一资源标识符。这里的统一指的是路径格式上的统一。


URL:Uniform Resource Location,统一资源定位符,是URI的一个子集,用于描述在互联网上互联网资源的统一表示格式(protocol://host:port/path/to/file)

URL基本语法:

://:@:/;?#

params:参数,如http://www.idfsoft.com/bbs/index.html;gender=f,这里的gender=f就是一个参数

query:传递给关系型数据库页面的特定行为。如http://www.idfsoft.com/bbs/item.php?username=tom&title=abc,这个URL表示要查询的是username=name并且title=abc的条目

frag:用来定义一个较大页面中的某一个位置,而不是页面的开始处。说白点就是位置锚定


URN:Uniform Resource Naming,统一资源命名符,也是URI的一个子集


MIME:Multipurpose Internet Mail Extension,多用途互联网邮件扩展。

MIME可以将非文本数据在传输前重新编码为文本格式再传输给对方,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件


http事务:http协议的一次请求(request)和响应(response)的过程就称之为http事务


动态网页:包含静态内容和动态内容(动态内容需要执行)

服务器端存储的不是HTML文档,而是编程语言开发的脚本,脚本接受参数之后在服务器端运行一次,运行完成之后会生成HTML格式的文档,并把生成好的HTML文档传给客户端


Web资源:web resource。

静态文件:.jpg,.gif,.html,.txt,.js,.css,.mp3,.avi

动态文件:.php,.jsp


PV:Page View,打开了多少页面

UV:User View,独立IP量


12.6 http协议报文

http协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。


http协议的报文有请求报文和响应报文2种,其语法样式如下:

请求报文语法:

  

响应报文语法:

  

报文的第一行通常称作报文"起始行(start line)",后面的标签格式的内容称作首部域(Header Field),每个首部域由名称(name)和值(value)组成,中间用逗号分隔。

另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容。


method:请求方法,标明客户端希望服务器对资源执行的动作,常见的有以下几种:

GET:从服务器获取一个资源

HEAD:只从服务器获取文档的响应首部,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的

POST:向服务器发送要处理的数据。服务器端通常通过提供一个表单,客户端填入数据时会把内容放入entity-body中提交提交给服务器端

PUT:将请求的主体部分存储在服务器上。说白点就是上传数据

DELETE:请求删除服务器上指定的文档

TRACE:追踪请求到达服务器中间经过的代理服务器

OPTIONS:请求服务器返回对指定资源支持使用的请求方法

version:http的协议版本,格式如HTTP/.

status:响应状态码,用于标记请求处理过程中发生的情况,常见的响应状态码有以下几种:

1xx:100-101,纯信息提示

100:服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求,响应状态码为"Continue"

101:服务器转换协议,服务器将遵从客户的请求转换到另外一种协议,响应状态码为"Switching Protocols"

2XX:200-206,"成功"类的信息

200:请求资源正常。请求的所有数据通过响应报文的entity-body部分发送,响应状态码为"OK"

201:请求被创建完成,同时新的资源被创建,响应状态码为"Created"

202:供处理的请求已被接受,但处理未完成,响应状态码为"Accepted"

203:文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,响应状态码为"Non-authoritative information"

204:没有新文档。浏览器应该继续显示原来的文档。响应状态码为"No Content"

205:没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容,响应状态码为"Reset Content"

206:客户发送了一个带有Range头的GET请求,服务器完成了它

3XX:300-305,"重定向"类的信息

301:永久重定向,响应状态码为"Moved Permanently"

请求的URL指向的资源已经被删除,但在响应报文中通过首部Location指明了资源现在所处的新位置,客户端需要请求新位置的资源

302:临时重定向,我这里正忙,你要的资源在另一个地方也有,你先去那里要,响应状态码为"Found"

与301相似,但在响应报文中通过Location指明资源现在所处的临时新位置

304:客户端发出了条件式请求,但服务器端发现客户端请求的资源已被客户端缓存过且未发生改变,让客户端直接到缓存里去取。响应状态码为"Not Modified"

4XX:400-415,"客户端错误"类的信息

400:由于客户端请求有语法错误,不能被服务器所理解,响应状态码为"Bad Request"

401:需要输入帐号和密码认证方能访问资源,响应状态码为"Unauthorized"

403:请求被禁止,响应状态码为"Forbidden"

404:服务器无法找到客户端请求的资源,响应状态码为"Not Found"

5XX:500-505,"服务端错误"类的信息

500:服务器内部错误,响应状态码为"Internal Server Error"

502:代理服务器从后端服务器收到了一条伪响应,响应状态码为"Bad Gateway"

503:服务器当前不能够处理客户端的请求,在一段时间之后,响应状态码为"Service"

reason-phrass:解释status状态码的情况,你成功了,是什么成功了,你失败了,是什么失败了,是获取文件成功/失败还是上传文件成功/失败等等。

headers:用来标记请求或响应的属性

每个请求或响应报文可包含任意个首部;

每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值


格式:Name: Value


首部的分类

通用首部:可用在请求报文和响应报文中,常见的内容如下:

Date:报文的创建时间

Connection:连接状态,如keep-alive,close等

Via:显示报文经过的中间节点

Cache-Control:控制缓存的生效方法和机制

请求首部:只能在请求报文中使用,常见的内容如下:

Accept:通知服务器客户端可以接受的媒体类型

Accept-Charset:通知服务器客户端可以接受的字符集

Accept-Encoding:通知服务器客户端可以接受的内容编码格式,如gzip

Accept-Language:通知服务器客户端可以接受的语言

Client-IP:客户端的IP

Host:请求的服务器名称和端口号

Referer:包含当前正在请求的资源的上一级资源

User-Agent:客户端代理


条件式请求首部

Expect:期望服务器端发什么信息

If-Modified-Since:自从此处指定的时间之后请求的资源是否发生修改

If-Unmodified-Since:自从此处指定的时间之后请求的资源是否未发生修改

If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag不匹配

If-Match:本地缓存中存储的文档的Etag是否与服务器文档的Etag匹配

安全请求首部

Authorization:向服务器发送认证信息,如帐号和密码

Cookie/Cookie2:客户端向服务器发送cookie

代理请求首部:

Proxy-Authorization:向代理服务器认证

响应首部:只能在响应报文中使用

信息性:

Age:响应持续时长

Server:服务器程序软件名称和版本

协商首部:某资源有多种表示方法时使用

Accept-Ranges:服务器可接受的请求范围类型

Vary:服务器查看的其它首部列表

安全响应首部:

Set-Cookie:向客户端设置cookie

Set-Cookie2:向客户端设置cookie2

WWW-Authenticate:来自服务器的对客户端的质询认证表单

实体首部:标识实体的相关信息

Allow:列出对此实体可使用的请求方法

Location:告诉客户端真正的实体位于何处

Content-Encoding:内容的编码格式

Content-Language:内容使用的语言

Content-Length:主体的长度

Content-Location:实体真正所处的位置

Content-Type:主体的对象类型

缓存相关:

ETag:实体的扩展标签

Expires:实体的过期时间

Last-Modified:最后一次修改的时间

扩展首部

entity-body:请求时附加的数据或响应时附加的数据,有可能为空


请求报文示例:

GET / HTTP/1.1HOST:www.baidu.comConnection:keep-alive

响应报文示例:

HTTP/1.1 200 OKX-Powered-By:PHP/5.2.17Vary:Accept-Encoding,Cookie,User-AgentCache-Control:max-age=3,must-revalidateContent-Encoding:gzipContent-Length:6931


12.7 http周边

常见的协议查看、分析的工具:

tcpdump

tshark

wireshark


常见的http服务器程序:

httpd(apache)

nginx

lighttpd

应用程序服务器:可以处理动态文件

IIS

tomcat,jetty,jboss,resin

webshpere,weblogic,oc4j


常用的http压力测试工具:

ab:

语法:ab [options] URL

-n:总的请求数

-c:模拟的并发数

-k:以持久连接模式测试

webbench

http_load

jmeter

loadrunner

tcpcopy


ulimit -n #:调整当前用户所能够同时打开的文件数


web服务器资源路径映射方式:

docroot

alias

虚拟主机docroot

用户家目录docroot


并发访问响应模型(Web I/O):此处假定每个进程内只有一个线程

单进程I/O结构:启动一个进程处理请求,而且一次只处理一个,多个请求被串行响应

多进程I/O结构:并行启动多个进程,每个进程响应一个请求

复用I/O结构:一个进程响应多个请求

多线程模型:一个进程生成多个线程,每个线程响应一个用户请求

事件驱动

复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求


12.8 https

https其实就是将ssl或tls应用于http协议的结果,https监听于tcp/443端口


ssl会话的简化过程如下:

(1)客户端发送可供选择的加密方式,并向服务器请求证书

(2)服务器端发送证书以及选定的加密方式给客户端

(3)客户端取得证书并进行证书验证

如果信任给其发证书的CA:

a) 验证证书来源的合法性:用CA的公钥解密证书上的数字签名

b) 验证证书内容的合法性:完整性验证

c) 检查证书的有效期限

d) 检查证书是否被吊销

e) 证书中拥有者的名字,与访问的目标主机要一致

(4)客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换

(5)服务器用密钥加密用户请求的资源,响应给客户端

注意:SSL会话是基于IP地址创建,所以单IP的主机上,仅可以使用一个https虚拟主机


WEB服务器的主要操作:

建立连接--接受或拒绝客户端连接请求;

接收请求--通过网络读取HTTP请求报文;

处理请求--解析请求报文并做出相应的动作;

访问资源--访问请求报文中相应的资源;

构建响应--使用正确的首部生成HTTP响应报文;

发送响应--向客户端发送生成的响应报文;

记录日志--当已经完成的HTTP事务记录进日志文件

服务 服务器 客户 客户端 资源 报文 状态 信息 内容 文档 版本 传输 数据 进程 处理 浏览 文件 方法 格式 浏览器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 秦安县网络安全大队电话 定制加固服务器赚钱吗 网络安全靶机靶场什么意思 设置服务器ip地址oppo 陕西中禾美俞互联网科技 文档管理服务器版 长沙共毁网络技术有限公司 FTP服务器常用 苹果系统的服务器在哪 服务器租用哪家比较好 传奇输完账号密码服务器认证失败 银川软件开发技术项目实训中心 我的世界服务器后台怎么加插件 人力资源和网络技术培训班 vb检验sql数据库 贵阳金蝶erp软件开发 苏州固定资产管理软件开发 天津常见软件开发收购价格 model数据库主要作用 我的世界网易服务器32k怎么弄 华安媒体互联网基金是科技股 建党百年网络安全工作总结 互点软件开发 java服务器打印对话框 每次打开软件会显示网络安全 中经网统计数据库登录账号 用服务器做路由器 数据库基础及应用教学ppt 重庆云初网络技术有限公司 中国网络安全状况报告
0