【Linux 网络编程2】应用层协议--http;序列化和反序列化,get和post请求传参的区别,cookie和sesion,编写一个简单的http
创始人
2024-06-01 02:02:26
0

目录

1.序列化和反序列化

2.HTTP协议

 3.编写一个简单的http

 3.2.简单的http的使用

 3.3.get和post请求传参的区别

4.http的状态码分类

5.cookie和sesion


1.序列化和反序列化

1.1.序列化和反序列化的优势

  1. 序列化将结构体转化为长字符串,便于传输;
  2. 反序列化将长字符串转化会结构体,实现了应用层和传输层的解耦,应用应用层不用在长字符串中一个个的拿数据;

1.2.序列化和反序列化需要那些要求

  1. 双方都要知道结构体的成员的类型;
  2. 双方都要知道序列化和反序列化的格式;

双方都要知道的条件不就是一种协议吗

2.HTTP协议

HTTP(超文本传输协议)是一个应用层协议,超文本:含有指向其它文本文件链接的文本

  • http没有建立连接和关闭连接,有程序员处理

http协议通常以3到4部分组成:

2.1.URL就是网址

 3.编写一个简单的http

3.1查看http的请求

套接字的封装:socket.hpp

#pragma once
#include
#include
#include
#include
#include
#includenamespace ns_socket{class sock{public:static int Socket(){int sock=socket(AF_INET,SOCK_STREAM,0);if(sock<0){std::cerr<<"socket"<

服务器端获取http的请求并打印打出来

#include "socket.hpp"
#include 
#include 
#include using namespace ns_socket;
using namespace std;#define CAPACITY 1024 * 10void *HandlerRequest(void *args)
{pthread_detach(pthread_self());//线程分离int new_sock = *((int *)args);//获取http请求char buffer[CAPACITY]={0};ssize_t s=recv(new_sock,buffer,sizeof(buffer)-1,0);if(s>0){buffer[s]=0;cout<

建立网络通信 

int main()
{int sock = sock::Socket();sock::Bind(sock, 8080);sock::Listen(sock);while (1){int new_sock = sock::Accept(sock);cout << "get a new link" << endl;pthread_t tid;pthread_create(&tid, 0, HandlerRequest, (void *)&new_sock);}return 0;
}

 执行结果:

 3.2.简单的http的使用

前端代码

你好吗!

其它的代码和上面的一样,只有这个线程执行的函数不同

#include "socket.hpp"#include 
#include 
#include 
#include 
#include 
#include using namespace ns_socket;
using namespace std;#define CAPACITY 1024 * 10
#define WWWROOT "./wwwroot/"
#define HOME_PAGE "index.html"void *HandlerRequest(void *args)
{pthread_detach(pthread_self());int new_sock = *((int *)args);// 资源路径std::string file_path = WWWROOT;file_path += HOME_PAGE;//打开资源文件ifstream in(file_path.c_str());if (in.is_open()){// 获取文件属性struct stat page_stat;stat(file_path.c_str(), &page_stat);//编写http的响应std::string http_response;http_response += "http/1.0 200 ok\n";;//状态行http_response += "Content-Type: text/html\n";//资源是什么类型,查content-type对照表//资源的长度,字节为单位http_response += "Content-Longth: ";http_response += std::to_string(page_stat.st_size);http_response += "\n";http_response += "\n"; // 空行// http的有效载荷,正文std::string content;std::string line;while (std::getline(in, line)){content += line;}http_response += content;//把响应发给对端 send(new_sock, http_response.c_str(), http_response.size(), 0);}close(new_sock);
}

执行的结果:

 

 3.3.get和post请求传参的区别

3.3.2.

,使用GET传参数;

hello 我是首页!
hello 我是表单!
姓名:
密码:

 使用GET传参数,参数是通过URL传参的;

 3.3.2.

,使用POST传参数;

hello 我是首页!
hello 我是表单!
姓名:
密码:

  使用POST传参数,参数是通过正文传参的;

 3.3.3.get和post的区别

  1. get方法通常是做获取网页的,但是也可以用做传参,通过与URL拼接的方式参数传输;post通常用于参数传递,通过http的请求的正文传递给server端;
  2. get做为参数传参会回显在浏览器的搜索栏,没有通过正文部分传递参数的post的私密性更强,且get使用URL传递参数是有大小现在1024kb,所以在信息不敏感且数量较少的情况下使用get传递参数比较适合;

4.http的状态码分类

数字类型含义类型解释
1XXInformation(信息型状态码)接受的请求正在处理(不常见,处理的请求通常不会很长)
2XXSuccess(成功状态码)类似200 表示请求被处理成功
3XXRedirection(重定向状态码)访问某一个服务器,会响应到其他网址;跳转到其他网址
4XXClinet Error类似404 Not Found ,服务器处理不了请求
5XXServer Error服务器处理请求失败

4.1.重定向如何实现

  • location报文配合301永久重定向或者302临时重定向使用
void *HandlerRequest(void *args)
{pthread_detach(pthread_self());int new_sock = *((int *)args);std::string response;response+="http/1.0 301 Permanently moved\n";response+="Location: https://www.baidu.com/\n";//location报文配合301永久重定向或者302临时重定向使用response+="\n";send(new_sock,response.c_str(),response.size(),0);close(new_sock);
}

5.cookie和sesion

5.1.为什么需要cookie

当我们登录CSDN后,访问任一一篇文章都是一个另外新的链接http协议是一个无状态的协议(不会认识用户),为什么不需要我们再输入一次密码,来验证是用户;

cookie中保存用户的私密信息,如果每次都需要我们输入账号密码会让客户端的体验变差

5.2.cookie的思想和自己写一个cookie

  1. 保证了用户的体验
  2. 但是cookie保存在浏览器的文件或者内存中,用户能找到那么黑客也可以找到,客户端的问题没法让服务器端解决,只能靠用户不访问恶意链接

  

 5.2.1.自己写一个简单cookie测试

  •  Set-Cookie添加cookie
  • 其他代码和上面一样
void *HandlerRequest(void *args)
{pthread_detach(pthread_self());int new_sock = *((int *)args);char client_requist[1024*10]={0};recv(new_sock,client_requist,sizeof(client_requist)-1,0);std::cout<

 5.3.sesion(英文会话的意思)

因为如果cookie直接保存用户的账号密码,被盗取就非常危险;

  • sesion就是把这些私密信息保存在对端服务器(比如私密信息保存在CSDN的服务器,大型公司通常不容易被入侵),然后返回一个唯一的值保存到浏览器cookie中,即使被盗取也是只有数据被泄漏,账号密码等私密信息没有被泄漏

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...