HTTP简介
超文本传输协议(Hyper Text Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
HTTP概述
- HTTP即是一个客户端终端与服务器端之间,请求和应答的标准。
- HTTP可以在任何互联网协议或其他网络上实现。它假定了其下层协议提供可靠的传输。
HTTP工作原理
- HTTP协议定义了客户端如何从服务器请求页面,服务器如何传送页面给客户端。采用的是请求/相应模型,客户端发出请求报文(包含请求方法、URL、协议版本、请求头部、请求数据)。服务器则以状态行作为响应(内容包括协议版本、成功或错误代码、服务器信息、响应头部、响应数据)。
- HTTP请求/响应的流程如下:
- 客户端连接到服务器(客户端一般是指浏览器)
- 发送HTTP请求
- 服务器接收请求并返回HTTP响应
- 释放连接TCP连接(服务器端先关闭连接,客户端被动关闭连接。关闭时间取决于connection模式,close是响应完成立马执行,keepalive则会保持连接一段时间,期间可以继续接收请求。)
- 客户端浏览器解析HTML内容
HTTP特性
- HTTP协议是基于TCP/IP协议之上的应用层协议。
- 基于请求-响应的模式
请求必定是由客户端发出的,即连接必定由客户端发起。 - 无状态
协议本身不会保存传输的数据 - 无连接
指完成一次链接的反馈后,服务端马上断开链接,客户端被动断开链接,这样可以节省传输时间。另在http1.1中可以在发送请求时设置为持续链接,即固定时间内无传输之后再断开,可节省持续型连接的传输时间。
HTTP请求方法
HTTP方法是区分大小写的。
GET/HEAD 都是向服务发出请求指定资源的请求。不同的是HEAD不传回资源的本文部分,而值传回“关于该资源的信息”(元信息或元数据)
POST 提交数据,请求服务器处理,如上传文件、提交信息等。(该请求可以创建新的资源,或者修改现有的资源)
PUT 向指定资源位置上传其最新内容。
DELETE 请求服务器删除对应资源(Request-URI标识)
TRACE 显示服务器收到的请求。主要用于测试或者debug。
OPTIONS 传回服务器对应资源所支持的所有HTTP方法。用“*”代替名字可以用于测试服务器功能是否正常运作。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
GET/HEAD/POST关系与区别
- 通过抓包工具可以看到,当你需要上传数据如登陆、修改自定义图标、搜索等等操作时,使用的是POST指令。可以得知POST指令是专用于上传的。
- 而HEAD在我理解更多的时候是用于例如爬虫爬取数据时,并不会先GET整个文件,而是先获得一个标志物,再通过标志物判断是否GET文件。
- 至于GET,GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如tieba.baidu.com/f?kw=%C9%E3%D3%B0。POST方法是把提交的数据放在HTTP包的Body中.
HTTP状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
URL
- 传送协议。
- 层级URL标记符号(为[//],固定不变)
- 访问资源需要的凭证信息(可省略)
- 服务器。(通常为域名,有时为IP地址)
- 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
- 路径。(以“/”字符区别路径中的每一个目录名称)
- 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
- 片段。以“#”字符为起点
如在 http://www.luffycity.com:80/news/index.html?id=250&page=1 中
http ————————是协议
80 —————————是服务器默认网络端口,默认的时候可以省略
/news/index.html——是路径
?id=280&page=1——是查询
HTTP请求格式
- 第一部分:请求行,第一行,需要表明请求类型,请求对象,以及http协议版本。
- 第二部分:包含指出目的地的Host,客户端的数据等等
- 第三部分:空行,必须留一个空行
- 第四部分:请求主体。如POST需要上传什么、PUT需要上传什么之类的。
HTTP响应格式
- 第一部分:状态行,由HTTP协议版本号,状态码,状态消息 三部分组成。
- 第二部分:消息报头,用来说明客户端要使用的一些附加信息,如时间信息。
- 第三部分:空行,必须留一个空行
- 第四部分:响应正文,服务器返回给客户端的文本信息。