简单的web服务器-------(1)HTTP协议

提前声明:这只是我个人学习中的随笔记录,不保证正确性,如有错误,欢迎指正!

一、几个简单的概念

这段时间查找如何实现一个简单的web服务器的一些资料,发现了一些不太清楚的概念,下面是我找的一些资料以及我自己的理解

1.超文本文件:

超文本文件是一种含有特殊标记的文本文件,其作用类似于WPS中的排版标记,超文本文件被保存在WWW服务器上,当用户通过浏览器软件浏览某一超文本文件时,WWW服务器将该超文本文件发送给浏览器,浏览器首先对其中的特殊标记进行解释,然后以特定的方式在用户屏幕上显示出来。(百度百科)

其中,www即万维网,它是一种建立在Internet上的全球性的、交互的、动态的、多 平台的、分布式的图形信息系统。WWW遵循HTTP协议(Hypertext Transfer Protocol,超文本传输协议),主要以超文本((Hypertext)或超媒体(Hypermedia)的形式提供信息。我们通常所称的浏览网页,就是指的WWW操作.(百度百科)

我自己的理解:简单来说,超文本文件可以理解成我们平时所说的链接。超文本文件中包含有超链接,指向其他的资源,超文本文件是万维网(www)的基础。我们平时使用浏览器时,都是点击一个选项后就会跳到另一个页面的,比如我点击一下“4399小游戏”,就会跳到另一个网页,所以“4399小游戏”实际上就是一个超文本文件,本质上就是一个超链接。

2.B/S模型 --- C/S模型
以前查阅过B/S模型与C/S模型,看得我云里雾里的,现在终于理解了一点。。。

我这个简单的理解:
B/S模型:就是 浏览器/服务器 模型,就是浏览器与服务器之间通过万维网来通信,有一个浏览器即可访问服务器;
C/S模型:就是 客户端/服务器 模型,需要在PC端安装(一个还是几个?)特定的软件,客户端与服务端直接相连,省去了中间环节,数据的传输相对较快。

二、HTTP协议

1.HTTP协议概述

HTTP协议解决文件传输的问题。HTTP协议是应用层(如果不知道什么是应用层,请搜索 OSI模型)的协议,主要建立在TCP协议之上。
HTTP协议的目的:如何在万维网的网络环境下,更好的利用TCP协议,以实现文件,特别是超文本文件的传输。
引用自:[http://www.cnblogs.com/vamei]

根据百度百科的解释:http是一个简单的 请求-响应 协议,它通常运行在TCP之上。

我想要实现的是一个简单的基于 B/S模型(即浏览器/服务器 模型)的web服务器。
简单来说: 就是浏览器通过http协议向服务器发送一个请求,然后服务器接受请求并解析请求后,又通过http协议来回应浏览器,即将浏览器请求的信息(一般来说就是一个网页)显示在浏览器上。

2.HTTP协议通信
HTTP协议由两部分组成:http协议头部分数据部分
HTTP协议规定了请求和回复的格式:

浏览器向服务器发送请求的格式:

//协议头部分:
 GET /hello.txt HTTP/1.1  //起始行(包含了最重要的信息必须写):GET为获取内容的请求,浏览器要获取的内容是服务器上的hello.txt这个文本文件,是按照http1.1的协议版本发送的请求
 Host: IP地址:端口号(或者一个 域名)  //端口号不要用1024以下的端口号,1024以上的可以随便用
 ......               //协议头信息,可选部分,可写可不写
 \r\n  //http协议头的最后有一个空行,即回车加转行,在c语言中表示为"\r\n",是http协议头的结束标志,一定要加
 //数据部分:
 【浏览器请求的数据一般为html格式】
 <html>  //页面开始
       <head><title>页面标签</title></head>
       <body>
             ...
       </body>
 </html>  //页面结束

服务器应答浏览器的格式:

//协议头部分:
 HTTP/1.1 200 OK   //起始行(包含了最重要的信息必须写):服务器按照http1.1的协议版本应答浏览器,200 OK表示浏览器请求成功
 Server:   //启动相应的进程,即调用一个可执行文件
 Content-Type: text/plain; charset = iso - 8859-1  //(必选)服务器应答浏览器的内容的类型,上面浏览器请求的是一个文本文件(.txt),服务器按照文件的文本原文返回给浏览器
 Content-Length: ... //内容的长度;建议不写,因为浏览器会自动推算出应答内容的长度,如果要写,则一定要写正确(我不会写。。。,所以我选择不写!)
 ......
 Connection: close //链接关闭  http协议的链接是使用的时候建立,使用完之后就直接关闭,下次使用时再次建立链接,边用边建立链接,用完就关闭。
 \r\n  //http协议头的结束标志,一定要加
 //数据部分:
 【数据部分是服务器返回给浏览器的内容,将其以页面的形式显示在浏览器上】
 <html>
       <head><title>页面标签</title></head>
       <body>
             ...
       </body>
 </html>

注意:
1)浏览器与服务器之间的 请求与应答 所用的http协议版本一定要一致
2)请求与应答 的协议头最后一定要有一个空行,c语言中表示为"\r\n",这是协议头的结束标志
3)服务器应答浏览器的协议头中,内容的类型(Content-Type:)一定要写!具体的类型表示(比如:文本文件,网页,音频,图片等)请自行在网上搜索
4)上面写的只是格式!!!不要直接复制粘贴!具体的代码需要你自己按照自己所用的编程语言的语法自己去编写,不要问我为什么有这个提醒,问就是我蠢。。。

三、绝对路径与相对路径

绝对路径:就是完整的路径,从根目录(/)开始(windos是从符盘(C盘,D盘,F盘等)开始)一直到需要的文件或文件夹的路径。

相对路径:就是相对目前所在的位置来说的路径。

比如:我现在所在的文件是/home/yst,我想要找的文件在/home/yst/dir/hello.c,那么绝对路径就是从根目录开始,就是/home/yst/dir/hello.c;相对路径就是从当前目录开始,以当前目录为根目录,就是./dir/hello.c, "."可以省略不写。其中"."就想当于当前目录/home/yst

ps:说实话,还是有点迷迷糊糊的,继续学习中,这个先保存着,后续不断更新。

posted @ 2020-10-18 18:25  杨舒婷  阅读(170)  评论(0)    收藏  举报