计算机网络基础:HTTP协议
status
category
date
summary
slug
icon
tags
password
HTTP简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP工作原理
HTTP协议工作于客户端-服务端架构上,浏览器作为HTTP客户端通过 URI 向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是也可以改为8080或者其他端口。

URL与URI
HTTP使用URI(Uniform Resource Identifiers,统一资源标识符)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。
URL(Uniform Resource Locator,统一资源定位符)是互联网上用来标识某一处资源的地址。
HTTP URL的格式:
http://host[":"port][abs_path]
http表示要通过HTTP协议来定位网络资源;
host表示合法的Internet主机域名或者IP地址;
port指定一个端口号,为空则使用缺省端口80;
abs_path指定请求资源的URI;
如果 URL 中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
HTTP特点
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP消息结构
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行(必须)和请求数据四个部分组成。

客户端请求消息
GET的请求消息
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本
GET说明请求类型为GET;[/562f25980001b1b106000338.jpg]为要访问的资源;该行的最后一部分说明使用的是HTTP1.1版本。
第二部分:请求头部,用来说明服务器要使用的附加信息
HOST指出请求的目的地;User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础,该信息由你的浏览器来定义,并且在每个请求中自动发送等等。
第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行。
第四部分:请求数据也叫主体,可以添加任意的其他数据
这个例子的请求数据为空。
POST的请求消息
第一部分:请求行,第一行指明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

服务器响应消息
第一部分:状态行,由HTTP协议版本号,状态码,状态消息 三部分组成
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息
空行后面的html部分为响应正文。
HTTP请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
常用方法
HTTP1.1新增了五种请求方法:OPTIONS,PUT, DELETE, TRACE 和 CONNECT 方法。
方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。 |
OPTIONS | 允许客户端查看服务器的性能。 |
PUT | 用客户端向服务器传送的数据取代指定URI的内容。 |
DELETE | 请求服务器删除指定的页面。 |
TRACE | 请求查询服务器的性能,或者查询与资源相关的选项和需求,主要用于测试或诊断。 |
CONNECT | 预留给能够将连接改为管道方式的代理服务器,保留将来使用。 |
GET和POST的区别
GET请求(注意最后一行是空行):
POST请求:
提交数据的位置(安全性)
GET:请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以
?
分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD
。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD
,其中%XX
中的XX
为该符号以16进制表示的ASCII。POST提交:把提交的数据放置在是HTTP包的包体中。
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变,所以POST比GET更安全,更适合提交敏感数据。
传输数据的大小限制
首先,HTTP协议没有对传输的数据大小进行限制,也没有对URL长度进行限制。而在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35),因此对于GET提交时,传输数据就可能会受到URL长度的限制。
POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
总结
GET请求:
/test/demo_form.asp?name1=value1&name2=value2
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据
POST请求:
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求
HTTP状态码
状态码分类
HTTP状态码可根据第一位数字获取主要信息
分类 | 描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见的状态码
状态码 | 名称 | 描述 |
100 | Continue | 继续。客户端应该继续请求 |
101 | Switch Protocols | 切换协议。例如切换到新的 HTTP 版本 |
ㅤ | ㅤ | ㅤ |
200 | OK | 请求成功 |
201 | Created | 请求成功,并且已创建新的资源 |
206 | Partial Content | 处理了部分请求,返回了要求的数据范围 |
ㅤ | ㅤ | ㅤ |
301 | Moved Permanently | 永久移动。请求的资源被永久移动到新的地址,客户端以后应该使用新地址进行请求 |
302 | Found | 临时移动。客户端应该使用原有地址进行请求 |
303 | See Other | 查看其它地址。客户端在重定向时不能改变之前使用的 GET 请求方法,所以此状态码用于允许 POST 重定向 |
304 | Not Modified | 未修改。所请求的资源未被修改,服务端不返回资源,客户端可以继续使用之前缓存过的资源 |
ㅤ | ㅤ | ㅤ |
400 | Bad Request | 客户端语法错误,服务器无法理解 |
401 | Unauthorized | 客户端的身份需要验证 |
403 | Forbidden | 禁止访问,拒绝执行 |
404 | Not Found | 请求的资源不存在 |
ㅤ | ㅤ | ㅤ |
500 | Internal Server Error | 服务器内部发生错误 |
502 | Bad Gateway | 网关或者代理服务器,从远程服务器收到了一个无效响应 |
503 | Service Unavailable | 服务器暂时无法处理,例如正在维护或停机 |
Loading...