计算机网络 HTTP协议

文章目录

HTTP协议

面向事务的应用层协议
端口号:80

浏览器输入baidu.com之后会发生什莫?
客户端输入www.baidu.com之后经过DNS(域名解析),得到IP地址,端口默认是80,之后浏览器知道了IP地址和端口号通过connect()向服务器发起连接
过程

HTTP请求

  • GET:客户端以只读的方法申请获取资源,不对服务器产生任何其他影响
  • POST:客户端向服务器提交数据的方法,可能会影响服务器,服务器可能会根据收到的数据动态创建新的资源,也可能更新原有的资源

HTTP应答

状态类型状态码 状态信息描述
信息100 continue客户端先发送100 continue告诉服务器还有数据要发,服务器收到了请求告诉客户端继续发送数据
成功200 ok请求成功
重定向3xx
客户端错误4xx 404 not found资源未找到
服务器错误5xx 500服务器错误

[高性能服务器编程:4.6,9]
短链接:一次交互后关闭链接
长链接:keep-alive

int socket_init()  //创建套接字
 38 {
 39       int sockfd = socket(AF_INET,SOCK_STREAM,0);
 40       if(sockfd == -1)
 41       {
 42               return -1;
 43       }
 44 
 45       struct sockaddr_in saddr;
 46       memset(&saddr,0,sizeof(saddr));
 47       saddr.sin_family = AF_INET;
 48       saddr.sin_port = htons(80);
 49       saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
 50 
 51       int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
 52       if(res == -1)
 53       {
 54       return -1;
 55       }
 56 
 57       res = listen (sockfd,5);
 58       if(res == -1)
 59       {
 60        return -1;
 61        }
 62 
 63       return sockfd;
 64 
 65 }
#include <sys/socket.h>
#inclede <netinet/in.h>
#inlcude <arpa/inet.h>
#include <assert.h>
int soket_init();
char *get_filename(Char buff[])
{
    if(buff!=NULL)
    {
        return NULL;
    }
    char* s=strtok(buff,"");
    if(s==NULL)
    {
        return NULL;
    }
    printf("请求的方法是:%s\n",s);
    s=strtok(NULL,"");
           if(s=NULL)
           {
               return NULL;
           }
}
int main()
{
    int soket=soket_init();
    assert(socket!=-1);
    while(1)
    {
        struct sockaddr_in caddr;
        in len=sizeof(caddr);
        int c=accept (sockfd,(struct socket*)&caddr,&len);
        if(c<0)
        {
            continue;
        }
        char recv_buff[512]={0};
        recv(c,recv_buff,511.0);
        printf("read:\n%s\n",recv_buff);//接受浏览器发送过来的数据
        
        char* filename =get_filename(recv_buff);//获取浏览器访问的文件名
        if(filename==NULL)
        {
            send(c,"err",3,0);
            close(c);
            continue;
        }
        char path[128]={"/homeu/c215/day21"};//拼接路径
        if(strcmp(filename,"/")==0)
        {
            strcat(path,"/index.html");
            else
            {
                strcat(path,filename);
            }
            int fd=open(path,0_RODNLY);//打开文件
            if(fd==-1)
            {
                send(c,"404",3,0);
                close(c);
                continue;
                
            }
        }
        int filesize=lseek(fd,0,SEEK_END);//文件大小
        lseek(fd,0,SEEK_SET);
        char head_buff[512]={"HTTP/1,0 200 OK\r\n"};
        strcat(head_buff,"Server:myhtttp\r\n");
        sprintf(head_buff+strlen(head_buff),"Content_length:%d\r\n",filesize);
         
        strcat(head_buff,"\r\n");
        
        send(c,head_buff,strlen(head_buff),0);
        printf("send:%s\n",head_buff);
        
        char data_buff[1024]={0};
        int num=0;
        while((num=read(fd,data_buff,1024))>0)
        {
            send(c,data_buff,num,0);
        }
       
        /nd(c,"OK 2021 10-9");
        close(c);
    }
}
int socket_init()
{
    int socket=socket(AF_INIT,SOCK_STREAM,0);
    if(sockfd==-1)
    {
        return -1;
    }
    strcut 
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值