自己动手写web服务器一(浏览器的访问信息)

要协议一个web服务器,需要了解http协议,下面我们来看一下当浏览器请求网张的时候向web服务器发送的数据,我使用的是ubuntu 中telent展现一个下过程。
       我需要一个简单的网站来演示一下,我装了一个apache。来完成成这个过程。下面为过程展示。   

其实,访问一个网站就是浏览器web服务器指定端口发送信息,然后,web服务器向浏览器发送网页的内容,

1。使用telnet连接网站

2.输入请求的页面。 GET  /   HTTP/1.0 或者 GET /index.html  HTTP/1.0

get:表示使用的get方法来获取网站的内容了

/:表示请求的为根目录,默认文件(有网站的配置文件决定)。 /index.html表示网站根目录下的index.html文件

HTTP/1.0:表示使用的是HTTP1.0的协议

三个参数用空格分开

3.apache返回的结果

上面是一个http协议一个交互的协议,如果要深入了解请上网查找资料。

下面我们自己写一个程序看一下当浏览器连接的时向web服务器发送的信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>

#define MAX 1024
//监听指定ip的端口
int socket_listen( char *ip, unsigned short int port)
{
 int res_socket, res, on;
 struct sockaddr_in address;
 struct in_addr in_ip;
 res = res_socket = socket(AF_INET, SOCK_STREAM, 0);
 setsockopt(res_socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
 memset(&address, 0, sizeof(address));
 address.sin_family = AF_INET ;
 address.sin_port =htons(port);
 address.sin_addr.s_addr = htonl(INADDR_ANY); //inet_addr("127.0.0.1");
 res = bind( res_socket, (struct sockaddr *) &address, sizeof( address ) );
 if(res) { printf( "port is used , not to repeat bind\n" ); exit(101); };
 res = listen(res_socket,5);
 if(res) { printf( "listen port is error ;\n" ); exit( 102 );  };
 return res_socket ;
}

int main(int argc, char * argv[] )
 { 
 int res_socket, conn_socket;
 int tmp ;
 struct sockaddr_in client_addr;
 char buf[MAX];
 int len = sizeof(client_addr);
 res_socket = socket_listen( "127.0.0.1", 1024) ;
 while(1)
 {
  conn_socket = accept( res_socket, (struct sockaddr * )&client_addr, &len );
  printf("webbrower information\n\n");
  //接受来自浏览器的信息
  while(0 == (tmp = read( conn_socket, buf, MAX-1) ) || tmp != EOF )
  {
   buf[MAX-1]=0;
   printf("%s\n", buf);
   break;
   } 
  close(conn_socket);
   }

}

下面为接收到的信息。


转载自:http://m.blog.csdn.net/blog/rentiansheng/8068960

时间: 2024-10-10 18:47:32

自己动手写web服务器一(浏览器的访问信息)的相关文章

Java网络编程 - 浅析web服务器与浏览器的实现原理

我们基本每天都在通过WEB浏览器,去浏览一些新闻,看看视频之类的. 众所周知,这就是所谓的B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件. 那顺道就来简单的看一下,所谓的Web服务器(例如知名的Tomcat)与浏览器,基本的实现原理是什么样的呢? 首先可以明确的就是,例如我们所做的通过浏览器输入一个地址,访问一个网页的操作. 实际对应的底层操作简单来说就是:客户端(浏览器)面向于WEB服务器的网络通信. 那么

自己动手写web框架----1

本文可作为<<自己动手写struts–构建基于MVC的Web开发框架>>一书的读书笔记. 一个符合Model 2规范的web框架的架构图应该如下: Controller层的Servlet就是一个全局的大管家,它判断各个请求由谁去处理. 而各个BusinessLogic就决定具体做什么. 通过上面的图,我们能看出来核心的组件就是那个servlet,它要处理所有的请求. 那么我们就先在web.xml里配置这个servlet: <?xml version="1.0&quo

web服务器/CA认证机构/客户端访问

---web服务器--- #yum install httpd -y#service httpd start#chkconfig httpd on#vi /var/www/html/index.html---------------<h1>http://www.baidu.com<br>172.16.254.101---------------# openssl genrsa 1024 > web.key //制作一个1024长度的私钥# openssl req -new -

自己动手写RTP服务器——关于RTP协议

转自:http://blog.csdn.net/baby313/article/details/7353605 本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识. 关于RTP协议的必备知识 要动手实现一个协议,当然首先需要阅读该协议的文档.RTP协议的文档,有rfc1889.rfc1890.rfc3550,其中rfc3550是现在的版本,另外两个是过期版.这个协议可以在ietf的官网找到:http://tools.ietf.org

自己动手写web框架----2

在上一节,我们自己写的web框架,只能运行显示一个HelloWorld.现在我们对其进行一次加工,让他至少能运行一个登陆程序. 首先看login.jsp <%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> <%@ page import=" java.u

自己动手打造WEB服务器 Windows + Apache + PHP + MySQL

XWAMP并不打算打造一个多功能,零配置,方便调试的工具.XWAMP只是把原程序简单的组合在一起,利用CMD命令控制,真正的绿色版,只为了多学习点Windows + Apache + PHP + MySQL相关的知识. 官方网站:http://www.xwamp.com/. Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个

自己动手写RTP服务器——用RTP协议传输TS流

上一篇文章我们介绍了关于RTP协议的知识,那么我们现在就自己写一个简单的传输TS流媒体的RTP服务器吧. 预备知识 关于TS流的格式:TS流封装的具体格式请参考文档ISO/IEC 13818-1.这里我们只需要了解一些简单的信息就好.首先TS流是有许多的TS Packet组成的,每个TS Packet的长度固定为188 bytes,每个packet都是以sync_byte:0x47开头. MTU(Maximum Transmission Unit): 最大传输单元.是指一种通信协议的某一层上面所

自己动手写RTP服务器——传输所有格式的视频

上一篇文章我们介绍了如何用一个简单的UDP socket搭建一个RTP服务器.我把这份80行的代码呈现到客户面前的时候,就有人不满意了. 还有人在参考的时候会问:“楼主你的TS格式的文件是哪里来的?应该去哪里下载?”“这也太简单了吧,不就是用UDP把TS文件发过去么?就这么几十行代码也算个大作业?”“平时看的视频格式哪有TS的呀,不是avi就是mp4.rmvb什么的,根本不实用啊!” 首先回答问题1: 如果你用过强大的ffmpeg,就可以用一行简单的命令 [plain] view plainco

解析浏览器的访问信息

一.UserAgentUtils UserAgentUtils是一个处理user-agent 字符的一个工具.可以用来实时地处理http请求和分析http请求日志文件.这里可以使用UserAgentUtils对访问用户的浏览器类型.操作系统.设备种类等进行统计分析,从而为网址的用户量的增加,做出正确的决策.项目网址为:https://github.com/HaraldWalker/user-agent-utils 示例相关相关maven依赖如下: <dependency> <groupI