HTTP概述

HTTP

HTTP(超文本传输协议)

认识URL

平时我们俗称的 "网址" 其实就是说的 URL

urlencode和urldecode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下:

将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

例如:

"+" 被转义成了 "%2B"

urldecode就是urlencode的逆过程;

HTTP协议格式

HTTP请求

  1. 首行: [方法] + [url] + [版本]

  2. Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束

  3. 空行

  4. Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个

    Content-Length属性来标识Body的长度;

HTTP响应

  1. 首行: [版本号] + [状态码] + [状态码解释]

  2. Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束

  3. 空行

  4. Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在

    body中.

HTTP的方法

其中最常用的就是GET方法和POST方法。

HTTP的状态码

最常见的状态码, 比如:

200(OK)

301(永久重定向)

  • 表明目标资源被永久的移动到了一个新的 URI,任何未来对这个资源的引用都应该使用新的 URI。
  • 308 的定义实际上和 301 是一致的,唯一的区别在于,308 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。

302(临时重定向)

  • 状态码表示目标资源临时移动到了另一个 URI 上。由于重定向是临时发生的,所以客户端在之后的请求中还应该使用原本的 URI。
  • 由于历史原因,用户代理可能会在重定向后的请求中把 POST 方法改为 GET方法。如果不想这样,应该使用 307(Temporary Redirect) 状态码。

303

  • 303 状态码表示服务器要将浏览器重定向到另一个资源。从语义上讲,重定向到的资源并不是你所请求的资源,而是对你所请求资源的一些描述。
  • 比如303 常用于将 POST 请求重定向到 GET 请求,比如你上传了一份个人信息,服务器发回一个 303 响应,将你导向一个"上传成功"页面。

404

  • NOT FOUND 表示客户端请求的资源不存在

403 禁止访问

  • 禁止访问,服务器理解请求客户端的请求,但是拒绝执行此请求(比如权限不足,ip被拉黑。。。等一系列原因)

500

  • 表示服务器内部出错

503

  • 由于临时的服务器维护或者过载,服务器当前无法处理请求。. 这个状况是临时的,并且将在一段时间以后恢复。

HTTP常见Header

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
  • 此处我们使用 8080 端口号启动了HTTP服务器. 虽然HTTP服务器一般使用80端口, 但这只是一个通用的习惯. 并不是说HTTP服务器就不能使用其他的端口号.

  • 使用chrome测试我们的服务器时, 可以看到服务器打出的请求中还有一个 GET /favicon.ico HTTP/1.1

    样的请求。

  • /favicon.ico 是一个网页的小图标,通常显示在浏览器的标签页上或书签栏中。它是一个小的图片文件,通常是 .ico 格式,但也可以是其他图像格式,如 .png.jpg。这个图标是网站身份的一部分,帮助用户在浏览多个标签页时快速识别不同的网站。

在后续的博客中我们会实现一个简单的HTTP通信

相关推荐
寻星探路39 分钟前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
王达舒199440 分钟前
HTTP vs HTTPS: 终极解析,保护你的数据究竟有多重要?
网络协议·http·https
朱皮皮呀42 分钟前
HTTPS的工作过程
网络协议·http·https
Binary-Jeff1 小时前
一文读懂 HTTPS 协议及其工作流程
网络协议·web安全·http·https
在路上看风景3 小时前
19. 成员初始化列表和初始化对象
c++
zmzb01033 小时前
C++课后习题训练记录Day98
开发语言·c++
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
念风零壹4 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
七夜zippoe4 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥4 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造