HTTP协议
超文本传输协议(HyperText Transfer Protocol, HTTP)。
特点:
- 无状态。不会进行信息的存储。
- 以请求 / 应答的方式运行。Request / Response。
- 可拓展。如自定义头部字段。
- 自描述。可以是文本、图片、视频。
- 与基于网络的超文本信息系统灵活互动。HTML
1.HTTP报文格式
三大部分
- 起始行(start line):描述请求和响应的基本信息。
- 头部字段合集(header):使用key-value的形式更详细地说明报文。
- 消息正文(entity):实际传输的数据。
起始行
for example:
请求 GET /index.html HTTP/1.1
响应 HTTP/1.1 200 OK
头部字段集合
for example:
如 Connection: keep-alive
消息正文
<html>
<head>
<title>hello world</title>
</head>
<body>
hello world
</body>
</html>
2.请求行报文格式
- 请求方法:如GET/POST,表示对资源进行的操作。
- 请求目标:通常是一个URI,标记了请求方法要操作的资源。
- 版本号:表示报文使用的HTTP的协议版本。
tips:
这里提到URI,就展开说说URI和URL的区别:URI(Uniform Resource Identifier)
是统一资源标识符,适用于标识某一互联网资源名称的字符串。该标识允许用户通过特定的协议对任何(本地或互联网)的资源进行交互操作。由
三个部分组成访问资源的命名机制、存放资源的的主机名和资源自身的名称。最后由路径统一表示出来。URL(Uniform Resource Locator)
统一资源定位符。是URI的子集,突出一个定位,即用定位的方式标识。
3.响应行报文格式
- 版本号:表示报文所使用的HTTP协议版本
- 状态码:一个三位数,表示处理的结果,如200是成功,500是服务器的错误。
- 原因:作为数字状态码的补充,是更详细的解释文字,帮助人理解原因
4. HTTP头字段
头部字段是key-value
的形式,key
和 value
之间用:
隔开,最后用 CRLF
换行表示字段结束。比如使用Content-type
进行数据的类型的协商,如Content-type:application/json
。不仅可以使用标准里的Host、Connection等已有头,也可以任意添加自定义头进行拓展。
tips:
- 字段名不区分大小写,不允许出现空格,可以使用
-
但不能使用_
,字段名紧接着:
不能有空格,但:
后的字段值前可以有多个空格。 - 字段顺序不会影响语义。
- 字段原则上不重复,但存在特殊情况如:如果这个字段本身的语义允许,比如你想设置多个
cookie
值,你可以使用多个Set-Cookie
。
5.常用头字段
- 请求字段:Host(标识当前的链接如哪个服务进行建立),Referer(防盗链相关)。
- 响应头:Server(服务器类型,nginx/apache)。
- 通用字段:Content-type(约定数据类型),Connection(链接的类型)