自己动手写web服务器一(浏览器的访问信息)
2012-10-15 17:06
453 查看
要协议一个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);
}
}
下面为接收到的信息。
今天到这里结束了,
我需要一个简单的网站来演示一下,我装了一个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);
}
}
下面为接收到的信息。
今天到这里结束了,
相关文章推荐
- 自己动手写web服务器一(浏览器的访问信息)
- 自己动手写web服务器一(浏览器的访问信息) - 任天胜的个人空间 - 开源中国社区
- 自己动手写web服务器(上),深入底层了解ASP.NET浏览器与服务器通信原理
- 自己动手写web服务器(下),深入底层了解ASP.NET浏览器与服务器通信原理
- 自己动手写web服务器(下),深入底层了解ASP.NET浏览器与服务器通信原理
- 自己动手写web服务器三(web服务器是如何处理浏览器取消的请求的)
- 自己动手写web服务器(上),深入底层了解ASP.NET浏览器与服务器通信原理
- 自己动手web服务器05-面向对象
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- 自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- 如何让外网访问自己的本地Web服务器
- 用自己的电脑利用花生壳搭建可以在网上访问的Web服务器
- PHP实现每隔1秒(一秒)输出一条信息:禁用PHP缓存和web服务器(兼容Nginx、Apache)缓存、浏览器缓存
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- 浏览器访问web服务器的图解和tomcat体系结构图
- 自己动手web服务器06--面向对象(II)
- 浏览器分别在哪些情况下使用get方式和post方式访问web服务器
- PHP#浏览器访问Web服务器流程