当前位置:   article > 正文

【计算机网络】4. 网络基础2之详解HTTP(http请求与响应、请求方法、URL、状态码、请求和响应的头部字段)_有如下请求和响应1) 用户请求的url是什么?

有如下请求和响应1) 用户请求的url是什么?

1. http请求与响应

1.1 http请求格式:请求首行,请求体,空行,请求正文

在这里插入图片描述
服务端读到两个连续的\r\n之后,就表示正文开始了

1.2 http响应格式:响应首行,响应体,空行,响应正文

在这里插入图片描述

2. 请求方法

(1)Get:向服务端索要某些资源,也可以给服务端提交较少的数据(url中)
          为什么是较少的?因为url的长度是有限制的,不能无限制给服务端提交数据在查询字符串当中
在这里插入图片描述
(2)Post:提交某些数据,提交的数据是在请求正文当中传输给服务端
对比Get与Post方法:
Post方法比Get方法更加私密,不能说Post方法比Get方法更加安全,因为不管Get发送在url当中提交的数据,还是Post方法在请求正文中提交数据,都是明文传输。
(3)Head:获取响应头部信息,并没有获取响应正文,为了测试请求资源是否有效
(4)Put:传输文件的方法
(5)Delete:删除文件
对于Put和Delete,http都没有校验,一般情况下,后台的服务端都是不支持Put和Delete方法的
(6)Options:询问服务端支持的方法
在这里插入图片描述

3. http协议概述

HTTP:超文本传输协议,是无连接、无状态,工作在应用层的协议
无连接:http协议本身是不建立连接的,但是http的数据会提交给传输层的tcp协议,tcp协议在传输数据的时候是需要建立连接的
无状态:http协议本身是对请求和响应不做保存的,现在双方的状态是服务端在实现的机制(会话机制)

4. http对应的URL解释

在这里插入图片描述
在这里插入图片描述

5. http协议的数据流

在这里插入图片描述

6. http协议的版本

http/0.9:初代的http协议,使用并不广泛
http/1.0,http/1.1:常用
http/2.0:正在制定中

7. http状态码

在这里插入图片描述
在这里插入图片描述
常见的状态码及解释
(1)200 OK :服务端将请求处理完毕了
(2)302 Found :临时重定向
(3)404 Page Not Found :访问的页面不存在
(4)502 Bad Getway :坏的网关

8. 请求和响应的头部字段

Content-Type:正文的类型
Content-Length:正文的长度
Host:保存服务端的ip和端口信息
User-Agent:保存操作系统和浏览器版本的信息
Location:保存重定向的网页地址
Connection:keep-alive:保持长连接(http底层使用到的tcp保持长连接)
Cookie
在这里插入图片描述

  1. cookie是服务器返回给浏览器的,由浏览器进行保存cookie
  2. 在访问服务器的其他界面的时候,由浏览器自动在请求体当中加上cookie
  3. 作用:服务端通过cookie当中的value值,可以得到服务端生成的sessionid,通过会话id,可以在服务端查询出来是哪一个用户的session

9. http连接代码

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sstream>

using namespace std;

int main()
{
    int listen_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(listen_sock < 0)
    {
        perror("socket");
        return 0;

    }

    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(28989);
    //0.0.0.0 : 本地所有的网卡地址
    addr.sin_addr.s_addr = inet_addr("0.0.0.0");

    int ret = bind(listen_sock, (struct sockaddr*)&addr, sizeof(addr));
    if(ret < 0)
    {
        perror("bind");
        return 0;
    }

    ret = listen(listen_sock, 1);
    if(ret < 0)
    {
        perror("listen");
        return 0;
    }
    struct sockaddr_in cli_addr;
    socklen_t cli_addrlen = sizeof(cli_addr);
    int newsockfd = accept(listen_sock, (struct sockaddr*)&cli_addr, &cli_addrlen);
    if(newsockfd < 0)
    {
        perror("accept");
        return 0;
    }
    printf("accept new connect from client %s:%d\n", inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port));

    while(1)
    {
        //接收
        char buf[1024] = {0};
        ssize_t recv_size = recv(newsockfd, buf, sizeof(buf) - 1, 0);
        if(recv_size < 0)
        {
            perror("recv");
            continue;
        }
        else if(recv_size == 0)
        {
            printf("peer close connect\n");
            close(newsockfd);
            return 0;
        }

        printf("%s\n", buf);
        memset(buf, '\0', sizeof(buf));

        string body = "<html><h1>bite welcome</h1></html>";
        stringstream ss;
        ss << "HTTP/1.1 302 Found\r\n";
        //ss << "Content-Type: text/html\r\n";
        //ss << "Content-Length: " << body.size() << "\r\n";
        ss << "Location: https://www.baidu.com/\r\n";
        ss << "\r\n";
        send(newsockfd, ss.str().c_str(), ss.str().size(), 0);
        send(newsockfd, body.c_str(), body.size(), 0);
    }

    close(listen_sock);
    return 0;
}   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/782172
推荐阅读
相关标签
  

闽ICP备14008679号