Linux网络中的HTTP协议
URL
我们平时说的网址其实就是URL(统一资源定位符),在网络中唯一定位服务器上的某个资源,向指定服务器请求指定资源。
urlencode和urldecode
urlencode(url编码):
像?/这样一些字符已经被url做特殊意义理解了,所以就不能随便出现。如果某个参数中带有这一类字符,就要先进行转义。
转义的规则: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
urldecode(url解码): urlencode的逆过程
HTTP协议格式
HTTP请求
- 首行: [方法] + [url] + [版本]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度
HTTP响应
- 首行: [版本号] + [状态码] + [状态码解释]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
-
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在
body中
HTTP的方法
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINE | 断开连接关系 | 1.0 |
HTTP的状态码
类别 | 意义 | |
---|---|---|
1xx | 信息性状态码 | 接收的请求正在处理 |
2xx | 成功状态码 | 请求正常处理完毕 |
3xx | 重定向状态码 | 需要进行附加操作以完成请求 |
4xx | 客户端错误状态码 | 服务器无法处理请求 |
5xx | 服务器错误状态码 | 服务器处理请求出错 |
常见状态码
- 200 – 请求成功
- 301 – 永久重定向,请求的资源被永久移动到新的URL中,客户端后来使用更新的URL
- 302 – 临时重定向,请求的资源被临时移动到新的URL中,客户端继续使用原有的URL
- 400 – 请求错误
- 404 – 请求的资源不存在
- 500 – 服务器内部错误
- 502 – 代理请求失败
- 504 – 代理请求超时
HTTP中常见的Header
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
- User-Agent: 声明用户的操作系统和浏览器版本信息
- referer: 当前页面是从哪个页面跳转过来的
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能