Linux 解析HTTP协议

文章目录

    • 认识 URL
    • 协议格式
      • get 和 post 的区别
      • 状态码
      • 常见的Header
      • cookie 和 session 的区别

所有的 HTTP 服务器和浏览器,都遵守 HTTP 协议。

认识 URL

URL(统一资源定位符):每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL,俗称网址。

Linux 解析HTTP协议_第1张图片解析:

  • 协议方案名:常见的有 http、https
  • 服务器地址:用来描述服务器的位置(IP地址)
  • 服务器端口号:如果是 HTTP 协议,默认的端口号是 80;如果是 HTTPS 协议,默认的端口号是 443。如果 url 中省略了,浏览器会自动加上对应的默认端口号
  • 文件路径:对应到服务器具体的资源
  • 查询字符串(query string):"?"用来分割路径和字符串。字符串是键值对结构,键和值之间用&分割

注意:如果 URL 里面存在特殊符号,就会造成歧义,此时需要进行编码和解码操作

URL 编码:把需要转码的字符转换成16进制,然后从右到左,取4位(不足4位直接处理),每2位作一位,前面加上 % ,编码成 %xy 的格式
举例: “+” 会转换为 “%2B”

URL 解码:解码就是编码的逆过程
举例: “%2B” 会转换为 “+”

协议格式

请求格式:

  • 首行(请求行):包括请求的方法、URL、版本号,三者之间用空格分割
  • Header:键值对结构,每个键值对占一行(用 \n 分割)
  • 空行:是 Header 的结束标记
  • Body(正文):允许为空,如果 Body 存在,里面会有一个Content-Length属性来标识Body 的长度

响应格式:

  • 首行(状态行):包括版本号、状态码、状态码描述,三者之间用空格分割
  • Header:键值对结构,每个键值对占一行(用 \n 分割)
  • 空行:是 Header 的结束标记
  • Body(正文):允许为空,如果 Body 存在,里面会有一个Content-Length属性来标识Body 的长度;如果服务器返回了一个 html 主页,那么 html 页面内容就在 body 中

方法包括:

方法 描述 支持的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
LINK 建立和资源之间的连接 1.0
UNLINK 建立和资源之间的连接 1.0

get 和 post 的区别

  • 对于HTTP的 get 请求,一般没有 body ;对于HTTP的 post 请求 ,一般有 body
  • get 提交的数据一般在 url 的 query string 中;post 提交的数据一般在 body 里
  • get 可以被缓存,而 post 一般不可以被缓存
  • get 一般设计为幂等,而 post 设计时不必考虑幂等
  • get 请求可以被浏览器收藏夹保存,而 post 一般不可以
  • 获取数据时,一般使用 get ;需要对数据进行操作时,一般使用 post

状态码

类别 原因短语
1xx Informational()信息性状态码 接受的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务器错误状态码) 服务器处理请求出错

常见的状态码

  • 200:访问成功
  • 302:重定向
  • 403:没找到资源
  • 404:访问的资源没有权限
  • 500:服务器内部错误,无法完成请求

常见的Header

  • Content-Type:描述正文的数据类型
  • Content-Length:描述正文的长度
  • Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上
  • User-Agent:声明用户的操作系统和浏览器版本信息
  • referer:当前页面是从哪个页面跳转过来的
  • location:搭配 3xx 状态码使用,告诉用户接下来要访问哪里
  • Cookie:用于在客户端存储少量信息,通常用户实现会话(session)功能

cookie 和 session 的区别

  • cookie 是一个键值对结构的字符串: 保存在客户端,来自于服务器(set-cookie字段)下次请求服务器时会自动带上 cookie。
  • session 是服务器位每一个客户端单独创建的会话,保存在服务器,里面有客户端的认证信息

https 协议是在 http 协议的基础上加了加密过程。

你可能感兴趣的:(Linux,网络,http,linux)