HTTP协议学习笔记(1) --- 基本介绍

HTTP基本概念

  • HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。
  • HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
  • HTTP是一个无状态的协议。

在TCP/IP协议栈中的位置

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
这里写图片描述

默认HTTP的端口号为80,HTTPS的端口号为443。

HTTP的请求响应模型

HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
这里写图片描述

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。HTML5定义了WebSocket协议,它实现了浏览器与服务器全双工通信(full-duplex),可以借助它实现服务器向客户端推送消息。

HTTP工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:
1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

方法

HTTP支持几种不同的的请求命令,成为 HTTP方法。每一个请求报文中都包含一个方法,告诉服务器执行什么动作。

常见http方法描述
GET向特定的资源发出请求,获取指定资源
POST发送客户端数据到服务器(如表单提交)
DELETE从服务器删除指定资源
PUT向服务器指定资源上传最新数据(完整替换数据)
PATCH向服务器指定资源上传最新数据(局部更新数据)

此外,还有headtraceoptions等。

状态码

当服务器收到请求,返回的响应报文中会带有一个3位数字的状态码,告诉客户端请求是否成功。状态码分5类:

整体范围已定义范围描述
100-199100-101信息提示
200-299200-206成功
300-399300-305重定向
400-499400-415客户端错误
500-599500-505服务器错误

常见的状态:200表示成功; 302表示重定向;404表示找不到资源。

HTTP报文

报文是具有固定格式的数据块,由3部分组成:

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

请求报文格式

<method> <request-URL> <version>
<headers>

<entity-body>

响应报文格式

<version> <status> <reason-phrase>
<headers>

<entity-body>

只有起始行不同,主体是可选的。下图是一个报文例子:
这里写图片描述

Content-Type 字段

头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,所以有了Content-Type这个字段。
常见的类型:

  • text/plain
  • text/html
  • text/css
  • image/jpeg
  • image/png
  • video/mp4
  • audio/mp4
  • application/javascript
  • application/json

这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔。
除了预定义的类型,厂商也可以自定义类型:

application/vnd.debian.binary-package

上面的类型表明,发送的是Debian系统的二进制数据包。
MIME type还可以在尾部使用分号,添加参数。

Content-Type: text/html; charset=utf-8

上面的类型表明,发送的是网页,而且编码是UTF-8。
客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

Accept: /

上面代码中,客户端声明自己可以接受任何格式的数据。
MIME type不仅用在HTTP协议,还可以用在其他地方,比如HTML网页。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- 等同于 -->
<meta charset="utf-8" /> 

Content-Encoding 字段

由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。

  • Content-Encoding: gzip
  • Content-Encoding: compress
  • Content-Encoding: deflate

客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。

Accept-Encoding: gzip, deflate

参考资料:
《HTTP权威指南》
阮一峰-http入门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值