【HTTP上】协议/域名/url/请求和响应/状态码/重定向

文章目录

  • 0.应用层协议
    • 0.1HTTP协议
  • 1.域名
  • 2.DNS
  • 3.访问浏览器
  • 4.URL
    • 搜索特殊字符如#&~
  • 5.万维网
  • 6.http请求和响应的格式
    • 6.1HTTP请求格式
    • 6.2HTTP响应格式
    • 6.3示例
    • 6.3模拟HTTP【框架】
    • 6.4查看请求或响应的工具
      • Fiddler
      • Postman
  • 7.网页
    • 7.0对访问网页的认识
    • 7.1wget
    • 7.2新的认识
    • 7.3GET/POST
    • 7.4action=/s
  • 8.状态码
  • 9. 重定向

0.应用层协议

协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符串” 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢?
例如, 我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端.

约定方案一:

客户端发送一个形如"1+1"的字符串;
这个字符串中有两个操作数, 都是整形;
两个数字之间会有一个字符是运算符, 运算符只能是 + ;
数字和运算符之间没有空格;

约定方案二:

定义结构体来表示我们需要交互的信息;
发送数据时将这个结构体按照一个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转化回结构体;

这个过程叫做 “序列化” 和 “反序列化”

  • 无论我们采用方案一, 还是方案二, 还是其他的方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是 应用层协议

0.1HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。
在这里插入图片描述

urlencode和urldecode线上转码工具

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

1.域名

域名(Domain Name)是互联网上某一台计算机或计算机组的名称,由一串用点分隔的名字组成,用于在数据传输时标识计算机或计算机组的电子方位。人们设计域名的初衷是为了方便记忆和沟通,避免直接使用不便于记忆的IP地址数串。通过域名系统(DNS,Domain Name System),域名和IP地址可以相互映射,使得用户可以更方便地访问互联网资源。

IP地址(Internet Protocol Address)是一串数字,用于向Internet上的计算机提供标识。它与域名存在映射关系,但不同于域名,IP地址是机器直接读取的数字标识。IP地址和域名之间是一对多的关系,即一个IP地址可以对应多个域名,但一个域名通常只对应一个IP地址

客户端(Client)则是指用户使用的电脑、手机等设备,它是用户与互联网进行交互的终端。在访问网站时,客户端(即用户的设备)会向DNS系统查询域名对应的IP地址,然后通过这个IP地址与服务器进行通信,从而获取或发送数据。

因此,域名、IP地址和客户端之间存在紧密的关系。域名提供了用户友好的访问方式,使得用户无需记住复杂的IP地址;IP地址则是互联网通信的基础,确保信息能够准确地发送到目标计算机;而客户端则是用户与互联网交互的桥梁,通过它用户可以访问网站、发送电子邮件等。这三者共同构成了互联网访问和通信的基础架构。

2.DNS

DNS是域名系统(Domain Name System)的缩写,是互联网的一项核心服务。DNS主要由解析器和域名服务器组成,其作用是将域名(网址)解析为IP地址,从而使人更方便地访问互联网,而无需记住机器直接读取的IP地址数串。简单来说,DNS相当于互联网上的电话簿,记录了IP地址及对应域名信息,便于用户进行查询并访问。

DNS服务器层级结构包括根域名服务器、顶级域名服务器、权限域名服务器和本地域名服务器。当用户在浏览器中输入一个域名时,本地DNS服务器会首先检查自身的缓存中是否有相应的IP地址。如果没有,它会向根域名服务器发送查询请求,然后依次通过顶级域名服务器和权限域名服务器进行解析,最终返回对应的IP地址。

DNS的架构是一个分层的分布式数据库和一组相关的协议,它定义了查询和更新数据库的机制,以及服务器之间复制数据库中信息的机制。这种设计使得主机名可以驻留在多个服务器上,从而减少了任何一台服务器上的负载,并提供了按分区管理命名系统的能力。

3.访问浏览器

windows cmd :ping baidu.com得到百度的ip

  1. xshell :telnet ip 80(端口)或者telnet www.baidu.com 80
  2. 直接在浏览器搜索ip
  3. 没有指明端口号,怎么能够成功访问?访问浏览器时自动添加端口号;在【直接在浏览器搜索ip】这里,ip后添加:80也可以访问
    在这里插入图片描述

知名服务器的端口一般不变

得让大家都知道才能访问你 如果变了 大家就找不到你了

http与https

HTTP和HTTPS是两种不同的网络协议,它们在多个方面存在显著差异。

首先,从安全性角度来看,HTTP使用的是明文传输,这意味着在传输过程中数据可能被截获或篡改。相反,HTTPS则通过SSL/TLS协议进行加密传输,从而保护数据在传输过程中的安全,防止数据被窃取或篡改。此外,HTTPS在连接过程中始终保持加密状态,即使连接被截断,也不会影响数据的加密状态。

其次,两者的证书管理也有所不同。HTTPS需要使用CA(证书颁发机构)颁发的证书来进行加密和解密操作,而HTTP则不需要证书。这意味着在使用HTTPS时,需要进行证书的配置

再次,HTTP和HTTPS使用的端口号也不同。HTTP通常使用端口80,而HTTPS则使用端口443

此外,从性能角度来看,由于HTTPS使用了加密和解密操作,因此在数据传输过程中需要消耗更多的计算资源,可能导致一些性能上的损失。

最后,从应用场景来看,HTTP协议主要用于传输HTML数据以及其他网络资源,如图片、音频、视频等。它通常被用于不需要加密传输数据的场景,如浏览网页、下载资源、使用API接口等。而HTTPS则由于其加密特性,更适用于需要保护用户隐私和数据安全的场景,如在线购物、银行交易等。

总结来说,HTTP和HTTPS各有其特点和适用场景,用户可以根据具体需求选择使用哪种协议。如需更多信息,建议查阅计算机或网络技术的专业书籍,或访问相关论坛。

4.URL

在这里插入图片描述

在这里插入图片描述
URL(Uniform Resource Locator,统一资源定位符)是用于标识互联网上的资源的字符串。它提供了一种方便的方式来指定和定位互联网上的各种资源,如网页、图片、视频、文件等。URL的结构通常包括协议、域名、端口号、路径、查询字符串和片段标识符等部分。为什么具有唯一性?这是服务器某个路径下的资源!

URL的结构:

协议:指定了如何访问资源,常见的协议有http、https、ftp等。例如,http://表示使用HTTP协议进行访问。

域名:即网站的地址,是互联网上的一个唯一标识。它可以是IP地址的易记形式,如www.example.com。

端口号:指定了服务器用于接收请求的端口。大多数协议都有默认的端口号,如HTTP的默认端口是80,HTTPS的默认端口是443。如果省略端口号,浏览器会使用默认的端口号。

路径:指定了服务器上资源的具体位置。它可以是目录路径或文件名,如/index.html。

查询字符串:用于传递参数给服务器,通常跟在路径后面,并以问号(?)开始。例如,?name=John&age=30。

片段标识符:用于指定资源中的特定部分,通常用于HTML页面中的某个元素。它以井号(#)开始,如#section1。

URL的例子:

假设我们有一个网站www.example.com,它上面有一个名为index.html的页面,并且这个页面有一个名为section1的片段。同时,这个页面需要传递两个参数给服务器:name和age。那么,对应的URL可能是这样的:

http://www.example.com/index.html?name=John&age=30#section1
在这个例子中:

http:// 是协议部分,表示使用HTTP协议。
www.example.com 是域名部分。
/index.html 是路径部分,指向服务器上的具体页面。
?name=John&age=30 是查询字符串部分,用于传递参数。
#section1 是片段标识符部分,用于指定页面中的特定部分。
URL的标准化和正确构造对于网页的访问、资源的定位以及搜索引擎优化(SEO)都非常重要。错误的URL可能导致资源无法正确访问或搜索引擎无法正确索引网页内容。

通常在服务端获得的客户端请求的url只显示一部分

在这里插入图片描述

搜索特殊字符如#&~

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.万维网

万维网(Web或WWW)、互联网、因特网(Internet)和以太网是网络技术中常用的术语,它们各自具有不同的含义和功能:

万维网(Web或WWW):

万维网是一个资料空间,其中的有用事物被称为“资源”,并由一个全域“统一资源标识符”(URL)来标识。
这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给使用者,使用者通过点击链接来获取这些资源。
万维网常被看作是因特网的一个服务,而不是因特网本身。尽管两者常被当作同义词使用,但实际上万维网只是互联网所能提供的服务之一。
互联网(internet):
互联网是一个庞大的网络,由多个网络相互连接而成,这些网络遵循一组通用的协议。
它始于1969年的阿帕网,并逐渐发展成为一个覆盖全球的互联网络。
互联网不仅包括万维网,还包括电子邮件、文件传输、远程登录等多种服务和应用

因特网(Internet):

因特网是一组全球信息资源的总汇,它由一个庞大的网络互联而成,每个子网中连接着若干台计算机(主机)。
它是基于TCP/IP协议族构建的,这些协议定义了数据如何在计算机之间传输和路由。
因特网提供了各种服务,如万维网浏览、电子邮件、文件共享等。

以太网(Ethernet):

以太网是一种计算机局域网技术,是目前现实世界中最普遍的一种计算机网络。
它使用IEEE 802.3标准,定义了物理层的连线、电子信号和介质访问层协议的内容。
以太网可以是经典以太网或交换式以太网,后者使用交换机连接不同的计算机。
总结来说,这四个术语在网络技术中各有其独特的含义和角色。
万维网是基于超文本链接的全球性系统,提供网页浏览等服务;
互联网是一个由多个网络组成的庞大网络,提供了各种网络服务;
因特网是一个基于TCP/IP协议族构建的信息资源总汇;
以太网则是一种局域网技术,用于连接计算机和其他设备。
这些技术共同构成了我们今天的数字化世界。

6.http请求和响应的格式

HTTP请求和响应的格式在HTTP协议中都有明确的规定,它们通常遵循一定的结构,以确保客户端和服务器之间的正确通信。以下是HTTP请求和响应的基本格式:

6.1HTTP请求格式

存储一行 打印多行
在这里插入图片描述

请求行(Request Line):

  1. 方法(Method):如GET、POST、PUT、DELETE等。
  2. 请求的URI(Uniform Resource Identifier):指定请求的资源位置。
  3. HTTP版本:如HTTP/1.0 1.1 2.0
    例如:GET /index.html HTTP/1.1【空格分隔】

请求头部(Request Headers):

  1. 包含关于请求的各种元数据,如User-Agent(客户端类型【识别客户端用的什么机器:win/Android/macos或者如果请求中没有这个字段,可能是爬虫,反爬!】)、Accept-Language(接受的语言)、Content-Type(发送数据的类型)、Content-Length(发送数据的长度)等。
  2. 每行包含一个头部字段名和字段值,用冒号分隔。【KV模型】
    例如:
User-Agent: Mozilla/5.0  
Accept-Language: en-US,en;q=0.5  
Content-Type: application/x-www-form-urlencoded  
Content-Length: 15

请求体(Request Body):

对于某些请求方法(如POST或PUT),请求体包含要发送到服务器的数据。
数据可以是文本、JSON、XML或其他格式,取决于Content-Type头部。

区分三部分:请求行只有一行 报头和有效载荷做分离

  1. 每一部分的行都以\r\n做行分隔符 那么每一部分的内容里就没有\r\n
  2. 报头和正文间有一行空行
  3. 读请求时读到空行 即为读到有效报头
  4. 报头里有一个属性记录了正文的长度 依据这个属性读正文(正文可以没有)

6.2HTTP响应格式

HTTP响应通常由以下部分组成:

状态行(Status Line):

  1. HTTP版本。[请求和相应都有版本,服务器根据版本向客户端发送客户端当前版本能够接受的消息]
  2. 状态码(Status Code):如200(OK)、404(Not Found)、500(Internal Server Error)等。
  3. 状态消息(Reason-Phrase):对状态码的简短描述。
    例如:HTTP/1.1 200 OK

响应头部(Response Headers):

与请求头部类似,包含关于响应的元数据,如Content-Type(返回数据的类型)、Content-Length(返回数据的长度)、Set-Cookie(设置Cookie)等。
例如:

Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Set-Cookie: name=value; expires=Wed, 21 Oct 2015 07:28:00 GMT

响应体(Response Body):

服务器返回给客户端的数据,如HTML页面、JSON对象、图片等。
数据的格式取决于Content-Type头部。

6.3示例

一个完整的HTTP请求和响应可能如下所示:

请求:

GET /example HTTP/1.1  
Host: www.example.com  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: en-US,en;q=0.5  
Connection: keep-alive

(注意:GET请求通常不包含请求体)

响应:

HTTP/1.1 200 OK  
Date: Mon, 27 Jul 2020 12:28:53 GMT  
Server: Apache/2.4.18 (Ubuntu)  
Last-Modified: Tue, 13 Jun 2016 07:18:22 GMT  
ETag: "359670651"  
Accept-Ranges: bytes  
Content-Length: 55  
Co ntent-Type: text/html  <html>  
<body>  
<h1>Hello, World!</h1>  
</body>  
</html>

在这个示例中,客户端发送了一个GET请求到服务器的/example路径,并收到了一个包含简单HTML页面的200 OK响应。实际的HTTP请求和响应可能会更复杂,包含更多的头部和/或请求体/响应体内容。

6.3模拟HTTP【框架】

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>// 监听端口
const int PORT = 8080;// 解析HTTP请求的方法(需要根据HTTP协议详细实现)
void parseHttpRequest(const char *request)
{// TODO: 解析请求行、请求头、请求体std::cout << "Received HTTP request: " << request << std::endl;
}// 生成HTTP响应的方法(需要根据HTTP协议详细实现)
std::string generateHttpResponse(const char *request)
{// TODO: 根据请求内容生成响应行、响应头、响应体std::string response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello, World!";return response;
}int main()
{const char *hello = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello, World!";// 创建socket文件描述符int server_fd;if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0){perror("socket failed");exit(EXIT_FAILURE);}// 设置套接字选项,允许端口重用int opt = 1;if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))){perror("setsockopt");exit(EXIT_FAILURE);}struct sockaddr_in address;int addrlen = sizeof(address);address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定socket到给定的IP地址和端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0){perror("bind failed");exit(EXIT_FAILURE);}// 开始监听连接if (listen(server_fd, 3) < 0){perror("listen");exit(EXIT_FAILURE);}std::cout << "Server is listening on port " << PORT << std::endl;char buffer[1024] = {0};int new_socket;while (true){// 接受一个新的连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0){perror("accept");exit(EXIT_FAILURE);}// 读取请求数据int valread = read(new_socket, buffer, 1024);parseHttpRequest(buffer);// 生成响应数据std::string response = generateHttpResponse(buffer);// 发送响应数据send(new_socket, response.c_str(), response.size(), 0);std::cout << "Sent HTTP response" << std::endl;// 关闭连接close(new_socket);}return 0;
}

6.4查看请求或响应的工具

Fiddler

Fiddler是一款强大的Web调试工具,位于客户端和服务端之间的HTTP代理。它的主要功能包括监控浏览器所有的HTTP/HTTPS流量,查看、分析请求内容细节,伪造客户端请求和服务器请求,测试网站的性能,解密HTTPS的Web会话等。此外,Fiddler还提供了全局、局部断电功能,以及支持第三方插件。

Fiddler的使用场景非常广泛,包括接口调试、接口测试、线上环境调试、Web性能分析等。它也可以用来判断全后端bug、开发环境hosts配置、mock测试以及弱网断网测试。对于开发人员来说,Fiddler特别有用。前端开发人员可以通过Fiddler代理来调试JS、CSS、HTML样式,后端开发人员则可以通过Fiddler查看请求和响应,从而定位问题。

在使用Fiddler时,用户可以通过其界面查看HTTP请求和响应的详细信息,包括请求行、请求头、请求体以及响应行、响应头、响应体等。这些信息对于分析和调试Web应用非常有帮助。

总的来说,Fiddler是一款功能强大且易于使用的Web调试工具,无论是前端还是后端开发人员,都可以通过它来提升工作效率和解决问题的能力。如果你需要下载和使用Fiddler,可以访问其官方网站进行下载,并按照提供的教程进行安装和使用。

如需更深入地了解Fiddler的使用方法和技巧,建议查阅相关的官方文档或在线教程,这些资源通常会提供更详细和具体的指导。同时,也可以参考其他开发者的经验分享,以便更好地利用Fiddler来解决实际问题。

Postman

Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,从而验证响应中的结果数据是否和预期值相匹配,并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。

Postman的主要功能包括:

构建请求参数:在Postman中可以方便地设置请求的参数,包括查询参数、请求体和头部信息等。
管理环境变量:Postman允许创建和管理环境变量,以便在不同的请求中重复使用。
自动化测试集合:Postman允许创建测试集合,用于自动化测试API的各种方面。
共享和协作:Postman允许用户共享他们的API请求和测试集合给团队中的其他成员,以便共同协作。
监视API性能:Postman提供了API监视功能,可以定期发送请求并监视API。
此外,Postman还有丰富的界面功能,包括新建请求、集合、环境等,导入请求集,运行请求集,邀请团队成员协作,设置功能,查看消息和通知,管理账户等。

总的来说,Postman是一个功能强大、易于使用的接口测试工具,无论是前端还是后端开发人员,都可以通过它来提升工作效率和解决问题的能力。

7.网页

7.0对访问网页的认识

  1. 可以手动编写服务端响应,在响应的正文可以是字符串,可以是网页字符串(html),可以是网页文件
  2. 客户端把想要访问的资源写在url处,服务端就可以按照这个路径去寻找并响应。
  3. WEB根目录可以是Linux根目录,也可以是指定的某个目录
  4. 网页文件放在服务器资源部分。

7.1wget

wget+www.baidu.com:将百度首页的网页内容拷贝到当前index.html(自动创建)文件中
wget 是一个在命令行界面下工作的网络文件下载工具,它支持通过 HTTP、HTTPS、FTP 等协议下载文件,并可以将文件保存在本地。wget 是 “World Wide Web Get” 的缩写,字面上理解就是“从网上获取”的意思。

使用 wget 下载文件的基本语法是:

bash
wget [选项] [URL]
其中,[URL] 是你想要下载的文件的网址,[选项] 是你可以用来定制下载行为的参数。

以下是一些常用的 wget 选项:

-P, --directory-prefix=目录:指定保存文件的目录。
-r, --recursive:递归下载,下载指定 URL 下的所有文件。
-np, --no-parent:递归下载时不进入父目录。
-A, --accept=LIST:只下载 LIST 中列出的文件类型。
-R, --reject=LIST:排除 LIST 中列出的文件类型。
-l, --level=深度:递归下载的深度。
-nc, --no-clobber:如果文件已存在,则不下载新文件。
-N, --timestamping:只下载比本地文件新的文件。
-c, --continue:断点续传。
-q, --quiet:安静模式,不显示下载信息。
-O, --output-document=文件:将文件保存到指定名称。
–limit-rate=速率:限制下载速度。
这只是 wget 的一部分选项,实际上它还有许多其他功能和选项。你可以通过 man wget 或 wget --help 命令查看完整的帮助文档和选项列表。

例如,如果你想下载一个名为 example.zip 的文件,并将其保存到本地的 downloads 文件夹中,你可以使用以下命令:

bash
wget -P downloads http://example.com/example.zip

7.2新的认识

  1. 自己编写了http服务端 运行后 在windows下的浏览器通过:服务端ip:端口号的形式可以访问
  2. 平时访问百度,实际上就是ip+端口,只不过访问的时候用的是域名,当你在浏览器访问百度时,实际上就是浏览器作为客户端向百度服务器发送http请求,百度服务器含有诸多html代码,把你要访问的资源返回给你的界面。

7.3GET/POST

HTTP中的GET和POST方法都是用于向服务器发送请求的基本HTTP方法,但它们之间存在一些重要的区别。以下是它们之间的主要区别与联系:

区别:

请求的目的:
GET方法主要用于请求数据。它通常用于从服务器检索信息,例如获取网页内容或查询数据库。
POST方法主要用于提交数据。它通常用于向服务器发送数据,例如提交表单数据或上传文件。
安全性:
GET请求的参数直接附加在URL后面,并且可以在浏览器的历史记录、网络日志等地方被看到,因此不适合传输敏感信息。
POST请求的参数在请求体中,不会在URL中显示,相对更安全一些。但请注意,仅仅使用POST并不足以保证安全性,还需要其他安全措施(如HTTPS)来确保数据在传输过程中的安全。
在这里插入图片描述
post只是相对安全,因为它不会直接显示在url后,实际上二者都不安全,安全问题需要加密----https中会讲

缓存:
GET请求可以被缓存,而POST请求则不会。这意味着如果你多次发送相同的GET请求,浏览器或代理服务器可能会返回缓存的结果,而不是每次都从服务器获取新数据。
数据长度限制:
GET请求由于将参数附加在URL中,因此受到URL长度的限制。不同的浏览器和服务器对URL长度有不同的限制,但通常都不建议过长。
POST请求没有这样的限制,因为数据是放在请求体中的。
幂等性:
GET请求是幂等的,意味着多次执行相同的GET请求应该具有相同的效果(没有副作用)。
POST请求不是幂等的,每次执行都可能有不同的效果(例如,提交表单数据可能会创建新的资源)。
联系:

都是HTTP方法:GET和POST都是HTTP协议中定义的方法,用于与Web服务器进行通信。

都使用HTTP协议:无论是GET还是POST请求,它们都遵循HTTP协议的规定,包括请求行、请求头、请求体等结构。

都可以包含请求头和请求体:虽然GET请求通常不包含请求体(除非使用了某些特殊技术,如查询字符串),但两者都可以包含请求头,用于传递额外的信息,如认证信息、内容类型等。

都可以用于Web开发:在Web开发中,GET和POST都是常用的HTTP方法,用于实现各种功能,如页面跳转、表单提交、数据查询等。

总的来说,GET和POST在HTTP协议中扮演着不同的角色,具有不同的用途和特点。在选择使用哪种方法时,应根据具体的应用场景和需求来决定。

7.4action=/s

在Web开发中,action=“/s” 通常出现在HTML表单的 标签中,用于指定当表单提交时数据应该发送到的URL。这里的 /s 通常是一个相对于当前URL的路径,表示表单数据应该被发送到服务器上的 /s 这个路径。

例如:

html

在这个例子中,当用户填写表单并点击“Submit”按钮时,浏览器会创建一个HTTP POST请求,并将表单中的数据发送到服务器的 /s 路径。服务器上的某个处理程序(通常是一个Web应用框架中的视图函数或控制器方法)会处理这个请求,并根据需要执行相应的操作,比如验证用户输入、存储数据等。

需要注意的是,/s 这个路径是相对于当前页面的URL的。如果当前页面的URL是 http://example.com/home,那么表单数据将会发送到 http://example.com/s。如果当前页面在子目录下,比如 http://example.com/subdir/page,那么实际发送的URL将会是 http://example.com/subdir/s,除非使用了绝对路径。

此外,method=“post” 指定了HTTP请求的方法为POST,这意味着表单数据将作为请求体发送,而不是附加在URL后面(像GET请求那样)。使用POST方法通常用于提交可能包含敏感信息(如密码)的表单,因为POST请求不会在浏览器的历史记录或网络日志中留下明显的痕迹。

8.状态码

状态码
在这里插入图片描述

403:没有访问资格/权限
5xx: 服务线程创建错误,连接数据库错误

  1. 对状态码的要求并不是那么严格,浏览器对状态码的审核就不那么严格,所以在编写时即便有了错的,他也会写成200
  2. 如果说操作系统的编写难度是T1级别,那么浏览器的编写就是T2级别,浏览器的编写涉及到网络编程,内存管理以及要有较强的容错率。
  3. 有的可能会对你的get方法进行改写,比如把你的get方法改成post的方法
  4. 其他的重定向浏览器不一定支持,即便支持了,不同的浏览器对于重定向这一标准所定义的行为也是不一样的,这里我们只简单了解一下临时重定向
  5. 300:(多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

301:(永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302:(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

303:(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

304:(未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

305:(使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

307:(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

308:(永久转移)这个请求和以后的请求都应该被另一个URI地址重新发送。307、308和302、301有相同的表现,但是不允许HTTP方法改变。例如,请求表单到一个永久转移的资源将会继续顺利地执行。

  1. 在早些年间,网民上网必须通过浏览器这个流量入口,先打开浏览器再去搜索引擎搜索,这也是为什么有这么多的浏览器,只要公司创造了浏览器,,那么他们就掌握了流量的入口,就可以赚很多钱
  2. 各个公司都想通过创造浏览器来获得流量的入口来获得更大的市值,但是浏览器更多就导致标准不那么确定,实际上很多国内的浏览器他们并没有自己独立的浏览器内核,更多的是直接封装了谷歌浏览器的内核,而像微软谷歌,他们是有自己浏览器内核的,而在谷歌和微软之前有一家叫做网景浏览器的公司,网景公司做的浏览器叫做领航员,微软公司想独占浏览器网络接口的这个市场,于是他通过在自己的电脑上绑定一款浏览器软件IE,通过这种方式与网景公司竞争。
  3. 做后端的同学在测试HTTP服务器的时候,对于状态码不用那么的较真,但是在做前端服务器的同时,在做前端的同学做浏览器页面的时候,对于状态码,他们不仅要在不同的浏览器上测试,还要对每种浏览器的新旧版本上做测试
  4. 总结一句话就是浏览器的标准是有的,但是不那么的统一

9. 重定向

浏览器向服务器发送了一个请求,但是服务器由于某种原因无法向浏览器提供这种服务,服务器返回了一个状态码和新的地址,告知浏览器可以通过新的地址,去找到他想要的东西。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/318492.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java将文件目录转成树结构

在实际开发中经常会遇到返回树形结构的场景&#xff0c;特别是在处理文件系统或者是文件管理系统中。下面就介绍一下怎么将文件路径转成需要的树形结构。 在Java中&#xff0c;将List<String>转换成树状结构&#xff0c;需要定义一个树节点类&#xff08;TreeNode&#…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作&#xff0c;今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作&#xff0c;有助于更好理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台&#xff0c;资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践&#xff0c;市场呈谨慎观望态势&#xff0c;热度无处安放。 北京金融大数据有限公司&#xff08;以下简称“金融大数据公司”&#xff09;作为市…

excel怎么删除条件格式规则但保留格式?

这个问题的意思就是要将设置的条件格式&#xff0c;转换成单元格格式。除了使用VBA代码将格式转换外&#xff0c;还可以用excel自己的功能来完成这个任务。 一、将条件格式“留下来” 1.设置条件格式 选中数据&#xff0c;点击开始选项卡&#xff0c;设置条件格式&#xff0…

微服务保护和分布式事务(Sentinel、Seata)笔记

一、雪崩问题的解决的服务保护技术了解 二、Sentinel 2.1Sentinel入门 1.Sentinel的安装 &#xff08;1&#xff09;下载Sentinel的tar安装包先 &#xff08;2&#xff09;将jar包放在任意非中文、不包含特殊字符的目录下&#xff0c;重命名为 sentinel-dashboard.jar &…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)续-音质问题解决总结

一、前言 之前进行了STM32CubeMXMDK通过I2S接口进行音频输入输出&#xff08;全双工读写一个DMA回调&#xff09;的研究总结&#xff1a; https://juejin.cn/post/7339016190612881408#heading-34 后续音质问题解决了&#xff0c;目前测试下来48khz的双声道使用效果很好&…

Pytorch学习笔记——TensorBoard的初使用

1、TensorBoard介绍 TensorBoard是TensorFlow的可视化工具&#xff0c;但它也可以与PyTorch结合使用。TensorBoard提供了一个Web界面&#xff0c;可以展示你训练过程中的各种信息&#xff0c;如损失值、准确度、权重分布等&#xff0c;更好地帮助开发者理解和调试模型。 Tenso…

BJFUOJ-C++程序设计-实验3-继承和虚函数

A TableTennisPlayer 答案&#xff1a; #include<iostream> #include<cstring> using namespace std;class TableTennisPlayer{ private:string firstname;string lastname;bool hasTable;public:TableTennisPlayer(const string &, const string &, bool…

深入剖析Tomcat(五) 剖析Servlet容器并实现一个简易Context与Wrapper容器

上一章介绍了Tomcat的默认连接器&#xff0c;后续程序都会使用默认连接器。前面有讲过Catalina容器的两大块内容就是连接器与Servlet容器。不同于第二章的自定义丐版Servlet容器&#xff0c;这一章就来探讨下Catalina中的真正的Servlet容器究竟长啥样。 四种容器 在Catalina中…

实现优先队列——C++

目录 1.优先队列的类模板 2.仿函数的讲解 3.成员变量 4.构造函数 5。判空&#xff0c;返回size&#xff0c;返回队头 6.插入 7.删除 1.优先队列的类模板 我们先通过模板来进行初步了解 由上图可知&#xff0c;我们的模板里有三个参数&#xff0c;第一个参数自然就是你要存储的数…

读天才与算法:人脑与AI的数学思维笔记16_音乐图灵测试

1. 艾米 1.1. 人工智能作曲家 1.1.1. 分析机可能会生成任意复杂程度、精细程度的科学的音乐作品 1.1.1.1. 阿达洛夫莱斯 1.1.2. 巴赫的作品是大多数作曲家开始学习创作的起点&#xff0c;也是大多数计算机开始学习作曲的起点…

uniapp 短视频浏览组件(仿抖音、上滑下滑)组件 Ba-VideoSView

简介&#xff08;下载地址&#xff09; Ba-VideoSView 是一款uniapp短视频上划浏览组件&#xff0c;支持无限滑动加载&#xff0c;支持自定义界面&#xff08;功能遮罩&#xff09;,支持点播、直播。 支持无限滑动加载支持自定义界面&#xff08;遮罩&#xff09;支持监听上滑…

第 8 章 机器人平台设计(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 学习到当前阶段大家对ROS已经有一定的认知了&#xff0c;但是之前的内容更偏理论&#xff0c;尤其是介绍完第6…

KKView远程控制2.0版本发布,TeamViewer面临巨大挑战

KKView远程控制2.0版本发布&#xff0c;TeamViewer面临巨大挑战 近日&#xff0c;备受瞩目的远程控制软件KKView发布了其全新2.0版本&#xff0c;KKView以其独特的创新性和用户友好的设计&#xff0c;为远程办公、远程培训等领域提供了更加高效、便捷的解决方案。 KKView远程…

K8S 哲学 - deployment -- kubectl【create 、 rollout 、edit、scale、set】

kubectl create kubectl rollout kubectl edit kubectl set kubectl scale 1、创建与配置文件解析 2、deploy 滚动更新 &#xff1a;template 里面的内容改变触发滚动更新 编辑该 deploy 的 配置文件 &#xff0c;加入一个 label 不会触发滚动更新 改变 nginx镜…

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法&#xff0c;它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制&#xff0c;比如日志必须是连续的&#xff0c;只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上&#xff0c;Raft算法相对…

Python语言零基础入门——文件

目录 一、文件的基本概念 1.文件 2.绝对路径与相对路径 3.打开文件的模式 二、文件的读取 三、文件的追加 四、文件的写入 五、with语句 六、csv文件 1.csv文件的读取 2.csv文件的写入 七、练习题&#xff1a;实现日记本 一、文件的基本概念 1.文件 文件是以计算…

浏览器安装路径位置的查看、指定网址快捷方式的创建

浏览器安装路径位置的查看、指定网址快捷方式的创建 浏览器安装路径位置的查看 法一、属性查看法 右键点击浏览器的桌面图标&#xff0c;选择“属性”&#xff0c;“快捷方式”页中的“目标”框中可见. 以Microsoft Edge浏览器为例&#xff0c;参见下图&#xff1a; 法二、地…

免费开源语音克隆-GPT-SoVITS-WebUI只需 5 秒的声音样本

语音克隆-GPT-SoVITS-WebUI 强大的少样本语音转换与语音合成Web用户界面。 功能&#xff1a; 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。 少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型…

LabVIEW换智能仿真三相电能表研制

LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下&#xff0c;确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术&#xff0c;具有灵活状态切换功能的智能仿真三相电能表&#xff0c;旨在通过技术创新提高电能计量人员的培训…