首页 > 编程知识 正文

超文本传输协议HTTP总结(+简单的HTTP服务器)

时间:2023-05-05 14:17:56 阅读:255412 作者:882

        超文本传输协议(HTTP),是用来在浏览器和WWW服务器之间传送超文本的协议,它可以使浏览器更加高效,使网络传输减少。HTTP是一种面向对象的协议,由两部分组成:从浏览器到服务器的请求集和从服务器到浏览器的应答集

      为了保证WWW客户机与WWW服务器之间通信不会产生二义性,HTTP精确定义了请求报文和响应报文的格式。

      HTTP回合过程包括连接、请求、应答和关闭4个步骤  

                                      

HTPP主要6个重要特点

采用客户机/服务器模型:单台服务器可以为世界范围内众多的客户提供信息服务简易性:速度快,开销小灵活性与扩展性:HTTP允许传送任意类型的数据,在HTTP的信息包中,通过内容/类型标识可以定义传输的数据类型,不同的数据贴上不同的标签,就可以指明操作方法。HTTP只需公布行的标识就可以为这些数据传输提供服务。无连接性:每一次在服务器一方都是独立的,不需要在请求的间隔中浪费时间。HTTP的无状态性表现在两方面:一方面协议不记忆事物,为后续事物所需的信息必须在协议之外完成,从而每一次都需要传递完全的信息来说明服务,有些必要信息可能大量重复传输;另一方面,HTTP无须每次保留维护状态表,可以加快处理速度HTTP在客户方提出请求时,可以指明能够接受的响应类型,从而在服务器一方可以用最恰当的方式把信息组合起来交送客户方

HTTP的方法

          

最常用的就是GET方法和POST方法

HTTP的状态码

最常见 的状态码,200(OK,客户端请求成功),404(Not Found),403(Forbidden,服务器收到请求但是拒绝提供服务),302(Redirect,重定向),504(Bad Gateway)

WWW服务实现的过程

假设现在要访问某一学校的主页 http://www.111.edu.cn/index.php,交互过程如下

浏览器确定URL。浏览器向DNS获取Web服务器 www.111.edu.cn的IP地址DNS服务器以相应的IP地址218.75.16.107应答。浏览器和IP地址为218.75.16.107的主机的80端口建立一条TCP连接浏览器执行HTTP,发送GET"index.php"命令,请求读取该文件www.111.edu.cn服务器返回“index.php”文件到客户端释放TCP连接浏览器显示文件中的所有正文和图像

简单的HTTP服务器

实现一个最简单的HTTP服务器,只在网页上输出“hello world”

#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>void Usage() { printf("usage: ./server [ip] [port]n");}int main(int argc, char* argv[]) { if (argc != 3) { Usage(); return 1; } int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0) { perror("socket"); return 1; } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(argv[1]); addr.sin_port = htons(atoi(argv[2])); int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr)); if (ret < 0) { perror("bind"); return 1; } ret = listen(fd, 10); if (ret < 0) { perror("listen"); return 1; } for (;;) { struct sockaddr_in client_addr; socklen_t len; int client_fd = accept(fd, (struct sockaddr*)&client_addr, &len); if (client_fd < 0) { perror("accept"); continue; } char input_buf[1024 * 10] = {0}; // ⽤⼀个⾜够⼤的缓冲区直接把数据读完. ssize_t read_size = read(client_fd, input_buf, sizeof(input_buf) - 1); if (read_size < 0) { return 1; } printf("[Request] %s", input_buf); char buf[1024] = {0}; const char* hello = "<h1>hello world</h1>"; sprintf(buf, "HTTP/1.0 200 OKnContent-Length:%lunn%s", strlen(hello), hello); write(client_fd, buf, strlen(buf)); } return 0;}

编译程序后启动输入 IP地址和端口号 ,可能会出现Linux防火墙问题,关闭防火墙即可

HTTP和HTTPS的区别

HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性HTTPS在TCP三次握手阶段之后,还需要进行SSL 的handshake,协商加密使用的对称加密密钥HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书HTTP协议端口是80,HTTPS协议端口是443

HTTPS优点:

HTTPS传输数据过程中使用密钥进行加密,所以安全性更高HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

HTTPS缺点:

HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。