1.HTTP协议(超文本传输协议)是一个应用层的协议
2.认识URL
平时我们所说的网址就是URL
urlencode和urldecode
像/?:等这样的字符,已经被url当作特殊意义理解了。因此这些字符不能随便出现。比如,某个参数中需要带有这写特殊字符,就必须先对特殊字符进行转义。
转移的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。urlencode就是起的编码作用。
urldecode就是urlencode的反过程,解码已编码的url字符串。
3.HTTP协议格式
3.1HTTP请求

  • 首行:[方法]+[url]+[版本]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
  • Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。

3.2HTTP响应

  • 首行:[版本号]+[状态码]+[状态码解释]
  • Header:请求的属性,冒号分隔的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束。Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在body中。

3.3http数据的解析过程
1.获取http头部,(首行+头部)
首行中包含url可以知道客户端请求什么资源,GET请求还可以获取到提交的数据
首行中包含的协议版本:拿到版本就可以针对不同版本的特性进行处理
2.解析头部
可以获取正文有多长,正文是什么类型的数据
3.获取正文进行处理(通常将正文交给子进程处理)

4.HTTP的方法
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获得报文头部
DELETE:删除文件
其中最常用的就是GET和POST方法
5.HTTP的状态码

1XX 信息性状态码(接受的请求正在处理)
2XX 成功状态码(请求正常处理完毕)
3XX 重定向状态码(需要进行附加操作以完成请求)
4XX 客户端错误状态码(服务器无法处理请求)
5XX 服务器状态错误码(服务器处理请求出错)

最常见的状态码:比如200(ok),404(Not Found),403(Forbidden),302(重定向),504等。
6.HTTP常见Header

  • Content-Type:数据类型(text/html等)。
  • Content-Length:Body的长度。
  • Host:客户端告知服务器,所请求资源是在哪个主机的哪个端口上;
  • User-Agent:声明用户的操作系统和浏览器版本信息。
  • referer:当前页面是从哪个页面跳过来的。
  • location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问。
  • Cookie:用于在客户端存储少量信息,通常用于实现会话的功能。

7.实现一个最简单的HTTP服务器
实现一个最简单的http服务器,只在ww网页上输出“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 OK\nContent-Length:%lu\n\n%s", strlen(hello), hello);
write(client_fd, buf, strlen(buf));
return 0;

编译,启动服务,在浏览器中输入http://[ip]:[port],就可以看到结果显示在页面上。

应用层的功能: 应用层负责应用程序之间的沟通来制定协议,通俗的来讲,就是应用层会借助TCP,UDP协议在各种各样的程序之间传递数据(邮件,文件等)这时候像应用层协议就可以规定这些数据的格式要满足什么样的。 常见的应用层协议: 基于UDP的应用层协议: DHCP:动态主机配置协议 DNS:域名解析协议 基于TCP的应用层协议: SMTP:简单电子邮件传输协议 FTP:文件传输协议
从代码逻辑我们可以很清晰的看出简单http服务器锁遵循的框架,以及后台调用的过程 并在此,应用了,多进程,进程间通信的管道,以及网络通信socket的知识/************************************************************************* > File Name: httpd.c > Author:Victor Qi
用Java实现一个简单HTTP服务器(一)一、HTTP协议简介二、HTTP工作原理三、HTTP请求方法四、HTTP状态码五、URL六、HTTP请求协议七、HTTP响应协议总结 简介:这学期报了计网创新的创新实验,在机房做基于交换机和路由器的计网实验。最近正在学Java,想用Java实现一个简单HTTP服务器,接下来就是我的心路历程. 一、HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。
生活中充满了各种网站,那么网站的基础HTTP协议是什么样的,平时都是使用网页,或者看书上说HTTP协议。最近讲实现HTTP到Webservice系列协议的简单程序,并且开发代码,供爱学习的人理解HTTP协议到Webservice协议。 本次开发使用NetCore5.0,实现的服务可以运行在linux和windows。原理通了只要有精力任何有tcp的开发语言都能自己实现http服务器,不限于C#,可以用C、C++、Java、等等自己实现HTTP服务器。目前比较简单,抓紧学习(哈哈) 代码地址:https://
应用程序的入口在HttpServer类中。main()方法创建一个HttpServer实例,然后调用await()方法。服务器会在指定的端口上等待HTTP请求,对其进行处理,然后发送响应信息回客户端。 package com.forcht.webApplication; import java.io.File; import java.io.IOException; import java.i...
HTTP协议简介 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以: HTML(超文本标记语言,HyperText Markup Language 的简称)是一种用来定义网页的文本; HTTP(超文本传输协议,HyperText Transfer Protocol 的简称)是在网络上传输H...
简单http协议1.HTTP协议简介1.1定义1.2特点1.3Http请求与响应报文分析1.4一次完整的http事务过程2.session与cookie2.1session 简介2.2cookie简介3.http与和https的区别3.1https简介 1.HTTP协议简介 1.1定义 1.2特点 1.3Http请求与响应报文分析 1.4一次完整的http事务过程 2.session与cookie...
**POST: 传输实体主体****PUT:传输文件** **HEAD:获得报文首部** **DELETE:删除文件***OPTIONS: 问支持的方法****TRACE: 追踪路径** **CONNECT: 要求用隧道协议连接代理*六、使用方法下达命令 七、持久连接节省通信等等