HTTP服务器(一)HTTP服务器入门介绍

article/2025/9/18 21:12:47

一、简介

1.1、做项目的时候,要请求REST服务器。而FEST服务器还是用http基本原理(即阉割版)来请求。

1.2、请求端口EndPoint/请求方法Method/请求内容格式ContentType/请求的数类型PostData(一般为JSon格式)。

1.3、我们熟悉的HTTP、FTP、Telnet等协议都是建立在TCP/IP协议基础上的。

但是,我不知道JSon格式是什么东西,所以先看看HTTP。

二、HTTP介绍

2.1、什么是http?

内容转载https://blog.csdn.net/qinyuanpei/article/details/51757148,部分拷贝。

https://github.com/qinyuanpei/HttpServer/ 一个使用C#编写的简易Web服务器

     HTTP是超文本传输协议(HyperText Transfer Protocol)的简称,它建立在C/S架构的应用层协议,熟悉这部分内容的朋友应该清楚,TCP/IP协议是协议层的内容,它定义了计算机间通信的基础协议,我们熟悉的HTTP、FTP、Telnet等协议都是建立在TCP/IP协议基础上的。在HTTP协议中,客户端负责发起一个Request,该Request中含有请求方法、URL、协议版本等信息,服务端在接受到该Request后会返回一个Response,该Response中含有状态码、响应内容等信息,这一模型称为请求/响应模型。HTTP协议迄今为止发展出3个版本:

     0.9版本

      已过时。该版本仅支持GET一种请求方法,不支持请求头。因为不支持POST方法,所以客户端无法向服务器传递太多信息。

     HTTP/1.0版本

       这是第一个在通讯中指定版本号的HTTP协议版本,至今依然被广泛采用,特别是在代理服务器中。

     HTTP/1.1版本

      目前采用的版本。持久连接被默认采用,并能很好地配合代理服务器工作。相对1.0版本,该版本在缓存处理、带宽优化及网络连接地使用、错误通知地管理、消息在网络中的发送等方面都有显著的区别。


  HTTP协议通信的核心是HTTP报文,根据报文发送者的不同,我们将其分为请求报文和响应报文。其中,由客户端发出的HTTP报文称为请求报文,由服务端发出的报文称为响应报文。下面我们来着重了解和认识这两种不同的报文:

       请求报文:请求报文通常由浏览器来发起,当我们访问一个网页或者请求一个资源的时候都会产生请求报文。请求报文通常由HTTP请求行、请求头、消息体(可选)三部分组成,服务端在接收到请求报文后根据请求报文请求返回数据给客户端,所以我们通常讲的服务端开发实际上是指在服务端接收到信息以后处理的这个阶段。下面是一个基本的请求报文示例:

/* HTTP请求行 */
GET / HTTP/1.1
/* 请求头部 */
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-Hans-CN, zh-Hans; q=0.5
Connection: Keep-Alive
Host: localhost:4000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko/* 消息体 */

       响应报文:响应报文是指在服务端接收并处理了客户端的请求信息以后,服务端发送给客户端的HTTP报文,服务端开发的重要工作就是处理来自客户端的请求,所以这是我们开发一个HTTP服务器的核心工作。和请求报文类似,响应报文由HTTP状态行、响应头、消息体(可选)三部分组成。例如我们通常熟悉的200和404分别表示连接正常和无法访问资源这两种响应状态。下面是一个基本的响应报文示例:
 

/* HTTP状态行 */
HTTP/1.1 200 OK
/* 响应头部 */
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Server: Microsoft-IIS/7.0
Date: Sun, 12 Jun 2016 11:00:42 GMT
X-Powered-By: Hexo/* 消息体 */

          这里需要说明的是,实际的请求报文和响应报文会因为服务端设计的不同,和这里的报文示例略有不同,报文中头部信息参数种类比较多,我不打算在这里详细解释每个参数的含义,我们只需要对报文格式有一个基本的认识即可,想了解这些内容的朋友可以阅读这里。在请求报文中我们注意到第一行,即HTTP请求行指明当前请求的方法。所以下面我们来说说HTTP协议的基本请求方法。常见的方法有GET、POST、HEAD、DELETE、OPTIONS、TRACE、CONNECT,我们这里选取最常用的两种方式,即GET和PSOT来讲解。

       GET:最为常见的一种请示方式

        当客户端从服务器读取文档或者通过一个链接来访问页面的时候,都是采用GET方式来请求的。GET请求的一个显著标志是其请求参数附加在URL后,例如”/index.jsp?id=100&option=bind”这种形式即为GET方式请求。GET方式对用户而言,传递参数过程是透明的,因为用户可以通过浏览器地址栏直接看到参数,所以这种方式更适合用来设计API,即在不需要验证身份或者对安全性要求不高的场合,需要注意的是GET方式请求对参数长度由一定限制。

       POST:

       POST克服了GET方式对参数长度存在限制的缺点,以键-值形式将参数封装在HTTP请求中,所以从理论上讲它对参数长度没有限制(实际上会因为浏览器和操作系统的限制而大打折扣),而且对用户来讲参数传递过程是不可见的,所以它是一种相对安全的参数传递方式通常用户登录都会采取这种方式,我们在编写爬虫的时候遇到需要登录的情况通常都需要使用POST方式进行模拟登录


2.2、HTTP请求的格式

         这几篇博客介绍的非常详细

https://www.cnblogs.com/chenyang920/p/5609116.html

https://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html

     好了,虽然2.1小结,大概介绍了什么是HTTP请求,但是并没有很好得整理。下面我画一个图,说明HTTP请求的格式。

 

   这幅图的红色部分,主要用在REST请求。我会在我的REST博客上,再画一个REST请求/响应的图:

https://blog.csdn.net/xpj8888/article/details/89466213

2.3、封装HTTP(API形式给别人调用)

如果你自己建了一个服务器售卖给别人,然后肯定需要封装HTTP服务,预留API接口给别人用。

https://www.cnblogs.com/tdws/p/5910932.html

 

 


http://chatgpt.dhexx.cn/article/lBYH5qWl.shtml

相关文章

【八】http服务器开发--实现一个http服务器

文章目录 一、整体概述二、接收http请求三、响应http请求四、完整代码即效果4.1 完整代码:4.2 实现过程 附(stat函数) 一、整体概述 本节主要实现一个http服务器的示例;该http服务器的主要功能是,在浏览器端访问服务器…

蓝桥杯c语言基础试题答案,试题 基础练习 Huffuman树 蓝桥杯 C语言

资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}{p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最…

蓝桥杯基础试题 字母图形 C语言实现

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律&#xff0c…

蓝桥杯c语言b组试题及答案,2014蓝桥杯C语言本科B组预赛试题

2014蓝桥杯C语言本科B组预赛试题 2014 蓝桥杯 C/C语言本科 B 组预赛试题12014 蓝桥杯 C/C语言本科 B 组预赛试题(完整)1.啤酒和饮料啤酒每罐 2.3 元,饮料每罐 1.9 元。小明买了若干啤酒和饮料,一共花了 82.3 元。我们还知道他买的啤酒比饮料的数量少&am…

2018年蓝桥杯C语言B组

第一题 标题:第几天 2000年的1月1日,是那一年的第1天。 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容 第二题 标题:明码 汉字的字…

(求救大佬)蓝桥杯C语言试题 算法训练 C++ CH08 01

题目&#xff1a; 求解我的代码有什么问题&#xff0c;为什么不能通过蓝桥的编译&#xff0c;但运行结果都正确。 我的代码&#xff1a; #include<stdio.h> int main() { double ssh,zrf,y,x,g,f; int a,b,c,d,t,x1,x2,x3,x4,q; int i,j; scanf("%d%d%d%d",&a…

蓝桥杯训练题C语言

开学后就很少抽空写写题了&#xff0c;所以这次只有几道题目和大家分享一下了。 有些真题也有些VIP基础题&#xff0c;想和大家分享一下。&#xff08;有些是仿的其他博主的代码&#xff0c;&#xff0c;&#xff0c;&#xff0c;因为有些确实难&#xff08;呜呜呜~&#xff0…

蓝桥杯研究生c语言试题答案,蓝桥杯试题C语言答案.doc

蓝桥杯试题C语言答案.doc 下载提示(请认真阅读)1.请仔细阅读文档&#xff0c;确保文档完整性&#xff0c;对于不预览、不比对内容而直接下载带来的问题本站不予受理。 2.下载的文档&#xff0c;不会出现我们的网址水印。 3、该文档所得收入(下载内容预览)归上传者、原创作者&am…

蓝桥杯 C语言 试题 历届试题 格子刷油漆

试题 历届试题 格子刷油漆 问题描述   X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形&#xff08;如下图所示&#xff09;&#xff0c;现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起&#xff0c;刷完一格&#xff0c;可以移动到和它相邻的格子&#xff08;…

蓝桥杯 C语言 试题 历届试题 网络寻路

试题 历届试题 网络寻路 问题描述 X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包&#xff0c;为了安全起见&#xff0c;必须恰好被转发两次到达目的地。该包可能在任意一个节点产生&#xff0c;我们需要知道该网络中一共有多少种不同的转发…

蓝桥杯 C语言 试题 算法训练 审美课

试题 算法训练 审美课 问题描述   《审美的历程》课上有n位学生&#xff0c;帅老师展示了m幅画&#xff0c;其中有些是梵高的作品&#xff0c;另外的都出自五岁小朋友之手。老师请同学们分辨哪些画的作者是梵高&#xff0c;但是老师自己并没有答案&#xff0c;因为这些画看上…

C语言课程设计——25道蓝桥杯练习题

文章目录 一、基础练习1.fib数列题目解题思路解题代码解法一(简单递推)&#xff1a;时间复杂度O(n)解法二(矩阵快速幂)&#xff1a;时间复杂度O(logn) 2.闰年判断题目解题思路解题代码 3. 数列特征题目解题思路解题代码 4.查找整数题目解题思路解题代码解法一&#xff1a;C风格…

蓝桥杯C语言程序设计真题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、真题总结 前言 下面是蓝桥杯历年的真题希望对大家有用 一、真题 1&#xff0c;隔行变色 Excel表的格子很多&#xff0c;为了避免把某行的数据和相邻行混…

2022年第十三届蓝桥杯大赛C组真题C/C++解析(上)

**今天给大家带来2022年&#xff0c;第十三届蓝桥杯大赛的真题解析**转眼间&#xff0c;距离考试已经过去很长时间了&#xff0c;今天解元给大家解析一下&#xff0c;有问题欢迎大家指点 :笑: 下面进入正题 前言填空题1.排列字母2.特殊时间 编程题1.纸张尺寸1.1纸张大小代码 2.…

pthread+Windows环境搭建

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 为什么会要用到pthread库&#xff1f;一、pthread库下载二、使用步骤1.创建VS工程2.设置环境变量2.1动态载入2.2静态载入 三、结语 为什么会要用到pthread库&#x…

pthread_cond_timedwait函数使用

1 函数原型 #include <pthread.h>int pthread_cond_timedwait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,const struct timespec *restrict abstime); int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); …

Pthread线程基础学习

后面会尝试使用冰搜和goole搜索来学习技术&#xff0c;互联网上知识的学习也是符合二八定律的&#xff0c;既然如此&#xff0c;我们何不去选择最好的文章呢。 文章参考&#xff1a; https://randu.org/tutorials/threads/ http://www.yolinux.com/TUTORIALS/LinuxTutorialPosi…

pthread 线程创建

1.1代码 #include <pthread.h> #include <stdio.h> #include <unistd.h>static int my_thread_func (void *data) {while(1){sleep(1);} }main() {pthread_t tid;int ret;// 1.创建接收线程ret pthread_create(&tid, NULL,my_thread_func, NULL);if(ret…

C语言pthread.h运用

线程概念 什么是多线程&#xff0c;提出这个问题的时候&#xff0c;我还是很老实的拿出操作系统的书&#xff0c;按着上面的话敲下“为了减少进程切换和创建开销&#xff0c;提高执行效率和节省资源&#xff0c;我们引入了线程的概念&#xff0c;与进程相比较&#xff0c;线程…

linux pthread头文件,pthread t 头文件_uint8 t 头文件_pthread t 头文件

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。 本…