HTTP协议详解

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客服端服务器模型。HTTP通常承载于TCP协议之上,有时也承载于TLS或SSL之上,这时候,就成了常说的HTTPS。默认HTTP的端口号是80,HTTPS的默认端口是443。HTTP协议的模型就是客户端发出请求,服务器端回送响应,它是一个无状态的协议,同一个客户端的多次请求之间没有对应关系。

HTTP协议的工作:

首先,客户端发出一个请求(Request)给服务器,服务器在接受这个请求后将生成一个响应(Response)返回给客户端。一次HTTP操作称为一个事务,分为四个过程:

1)客户端与服务器建立连接;

2)客户机发出一个请求给服务器,格式为:统一资源标识符(URL)、协议版本号、MIME信息(包括请求修饰符、客户机信息以及可能的内容);

3)服务器收到请求后,给予相应的响应信息,格式为:状态行(信息的协议版本号、一个错误或成功的代码),然后是MIME信息(包括服务器信息、实体信息以及可能的信息);

4)客户端收到服务端返回的响应信息并显示在用户的显示屏上,然后客户端与服务器断开连接。

我们可以通过查看PFC2616文档或者使用抓包软件来看到HTTP协议,常用的抓包软件主要有IRIS、wirkshark等,专门抓取http包的软件主要有HttpWatch、IE Analyer、Fiddler、Chalrles等。在浏览器中使用filefox的拓展filebug查看http请求。

一、请求

发送请求前,需要先建立连接,连接是一个运输层的实际环流,它建立在两个相互通信的应用程序之间。在HTTP协议中,request和response头中都可能出现一个connection的头,它决定客户端与服务器通信时对于长链接该如何进行处理。如果不希望支持长链接,可以在header中指明connection的值为close;服务器端可同样设置,设为close后,指明当前正在使用的tcp连接在处理完毕后会被断开,客户端下一个请求的时候需要重新连接。

HTTP请求由三部分构成:请求行、消息报头以及请求正文

请求行以一个方法符号开头,以空格空开,后面跟着请求的URL和协议的版本,格式如下:

Method Request-URL HTTP-Version CRLF

参数说明:

Method:请求方法

Request-URL:一个统一资源标识符。

HTTP-Version:请求的HTTP协议版本

CRLF:回车和换行

请求方法有多种,各个方法的解释如下:

GET:请求获取equest-URL所标识的资源

POST:在Request-URL标识的资源中附加新的数据

HEAD:请求获取由Request-URL所标识的资源的响应消息报头

PUT:请求服务器存储一个资源,并用Request-URL作为其标识

DELETE:请求服务器删除Request-URL所标识的资源

TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT:保留以备将来使用

OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

二、响应

在接受和接受客户端请求后返回响应信息,也是由三部分构成:状态行、消息报头、响应正文。

状态行代码如下:

HTTP-Version  Status-Code  Reason-Phrase CRLF

参数说明:

HTTP-Version:HTTP协议版本

Status-Code:服务器发回的响应状态代码

Reason-Phrase:状态代码的文本描述

状态代码由三位数字组成,第一个数字表示响应的类型,有五种可能取值:

1XX:指示信息-请求已接受,继续处理

2XX:成功-请求已被成功接收、理解和接受

3XX:重定向-请求有语法错误或请求无法处理

4XX:客户端错误-请求有错误或者请求无法实现

5XX:服务器端错误-服务器未能实现合法的请求

常见状态代码以及文本描述:

200OK:客户端请求成功

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

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

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

404 Not  Found :请求资源不存在

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

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

三、报头

HTTP消息报头包括:普通报头、请求报头、响应报头、实体报头。每个报头域组成形式如下:

名字+:+空格+值

1)普通报头中有少数报头域用于所有的请求和响应信息,但并不用于被传输的实体,只用于传输的信息(如缓存控制、连接控制等);

2)请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(UA以及Accept等);

3)响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URL所标识的资源进行下一步访问的信息(Location);

4)实体报文定义了关于实体正文和请求所标识的资源的元信息。

比较重要的报头如下:

Host:头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。HTTP1.1请求必须包含主机头域,否则会以400状态吗返回。

User-Agent:简称UA,包含发出请求信息的用户信息。通常UA包括浏览者的信息,主要是浏览器的版本和操作系统。这个UA是判别用户所用设备的重要依据。

Accept:告诉服务器可以接受的文件格式

Cookie:Cookie分两种,一种是客户端发出的,报头为Cookie,另一种是服务器发出的,报头为set-cookie。它们的主要区别是,cookie报头可以有多个value值,而且不需要指定domain等;而set-cookie只能有一个cookie的value值,需要指明domain和path等。

Cache-Control:指定请求和响应遵循的缓存机制。

Referer:头域允许客户端指定请求URL的源资源地址。

Content-Length:内容长度

Content-Range:响应的资源范围。可以在每次请求中标记资源请求的范围。在连接断开重连时,客户端只需要请求未下载的资源部分,实现断点续传。迅雷就是基于这个原理

Accept-Encoding:指定可以接受的编码方式

自定义报头:在HTTP1.1正式规范中没有定义的头字段。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值