码农小屋 码农小屋
  • 首页
  • 文章
    • Python
    • 计算机基础
    • C语言
    • Java
    • 数据库
    • Linux
  • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板
  • 注册
    登录
立即登录
  • 首页
  • 博客中心
    • 文章
    • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板

HTTP协议报文结构

独家记忆5月前

HTTP协议

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,是一种应用层的协议。

URL与URI的区别

统一资源标识符URI(uniform resource identifier):用来唯一标识一个资源,这个资源可以一个名字(URN)、一串编号、一个地址(URL)…...

统一资源定位符URL(uniform resource locator):用来唯一定位一个资源,这个资源是一个网络上地址。

URI是一种抽象,URL是URI的一种具体实现,URI是URL的超集,URI包含URL。

一个完整的URL

下面是一个完整的URL:

https://www.smallessay.com/niceblog/python

URL一般包含以下部分:

  • schema:协议部分,在Internet中可以使用多种协议,如HTTP,FTP。
  • host: web服务器的ip地址或者域名。
  • port: 服务端端口,http默认端口是80,https默认端口是443。
  • path: 资源访问路径。
  • query-string: 查询参数。

一次完整的HTTP请求过程

  1. 首先通过DNS对域名进行解析(如果是IP地址就不用解析了),DNS解析的顺序:浏览器缓存->操作系统缓存->hosts文件->DNS服务器。
  2. 通过TCP三次握手,浏览器与服务器端建立连接。
  3. 浏览器发起HTTP请求。
  4. 服务器响应HTTP请求。
  5. 浏览器解析html代码,并请求html代码中的资源(css/js/image)。
  6. 浏览器对页面内容进行渲染并展示。
  7. TCP四次挥手关闭连接。

HTTP响应报文格式

HTTP协议报文结构-码农小屋

响应报文示例:

HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Content-Length: 5
Date: Fri, 06 Nov 2020 21:18:21 GMT
Keep-Alive: timeout=60
Connection: keep-alive

hello

状态码类别:

类别说明
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

常见状态码:

状态码描述说明
100Continue上传大文件前使用
101Switch Protocols升级协议使用
102Processing服务正在处理
200OK成功返回响应
201Created有新资源在服务器端创建成功
301Moved Permanently资源永久性的重定向到另一个URI中
304Not Modified资源未被修改,可以复用缓存
400Bad Request请求格式错误
401Unauthorized用户信息认证失败
403Forbidden服务器没有权限执行此请求
404Not Found服务器没有找到对应的资源
405Method Not Allowed服务器不支持请求行中的method方法
500Internal Server Error服务器内部错误
502Bad Gateway代理服务器无法获取到合法响应
503Service Unavailable服务器尚未准备好处理当前请求

使用命令模拟http协议

使用Telnet模拟http协议。

# telnet 10.1.9.98 8899
Trying 10.1.9.98...
Connected to 10.1.9.98.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 200 
Content-Type: text/plain;charset=UTF-8
Content-Length: 5
Date: Fri, 06 Nov 2020 21:18:21 GMT
Connection: close

hello

使用文件描述符模拟http协议:

# cd /proc/$$/fd
# exec 8<> /dev/tcp/www.baidu.com/80
# echo -e 'GET / HTTP/1.0\n' >& 8
# cat <& 8
...
1
分享
独家记忆 作者
文章 27评论 2
赞赏
独家记忆
相关文章
  • 算法时间复杂度和空间复杂度简介
  • 计算机的基本组成
  • 线性表的顺序和链式存储结构
  • 数据结构——线性表
  • 数据结构——绪论
评论 (0)
再想想
    沙发抢一发
  • 专题
  • 文章
  • 友情链接
  • 留言板
Copyright © 2020-2021 码农小屋. 苏ICP备20033168号