计算机网络基础: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或者其他端口。
notion image

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)、空行(必须)和请求数据四个部分组成。
notion image
客户端请求消息

GET的请求消息

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

POST的请求消息

第一部分:请求行,第一行指明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
notion image
服务器响应消息
第一部分:状态行,由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...

© 刘口子 2018-2025