当前位置: 首页 > news >正文

免费做mc皮肤网站博物馆设计公司哪个好

免费做mc皮肤网站,博物馆设计公司哪个好,网站架构设计师主要做什么,你是网站设计有限公司的项目经理去光荣地受伤#xff0c; 去勇敢地痊愈自己。 --- 简嫃 《水问》--- 从零开始学习http协议 1 知识回顾2 认识网络重定向3 http请求方法3.1 http常见请求方法3.2 postman工具进行请求3.3 处理GET和POST参数 1 知识回顾 前面两篇文章中我们学习并实现了http协议下的请求与应… 去光荣地受伤 去勇敢地痊愈自己。 --- 简嫃 《水问》--- 从零开始学习http协议 1 知识回顾2 认识网络重定向3 http请求方法3.1 http常见请求方法3.2 postman工具进行请求3.3 处理GET和POST参数 1 知识回顾 前面两篇文章中我们学习并实现了http协议下的请求与应答 http请求包括四个部分请求行 报头 空行 请求正文。请求行中的URL是客户端想要获取的资源这是对于服务器来说最重要的部分服务器后续通过URL在网络根目录中搜索对应的资源然后通过应答报文返回。http应答包括四个部分状态行 报头 空行 应答正文。应答正文中包含从服务器返回的实际内容如HTML页面、图片或其他数据。请求与应答中的报头都是用于传输请求和应答的一些基础信息以键值对的形式储存。 http协议作为通信协议必然要支持序列化与反序列化。我们需要做的是服务器的操作只需要进行请求的反序列化和应答的序列化就可以了请求的序列化和应答的反序列化是浏览器客户端需要考虑的。要做到序列化和反序列化需要按照请求和应答的结构从字符串中读取分离出来具体操作可以参考之前的文章 【计网】从零开始学习http协议 — http的请求与应答【计网】从零开始学习http协议 — 通过http实现客户端交互 实现了http协议中服务器的序列化和反序列化接下来就可以加入一些资源来供客户端获取。 对于状态行的http版本与http状态码我们也有了初步的了解: http版本浏览器和服务端需要互相告诉各自的版本号进而做到对应的处理因为http协议会不断更新不能保证对方是否更新协议http状态码状态码是服务器做出应答时根据数据处理的情况返回给浏览器。每个状态码对应一种情况 2 认识网络重定向 状态码中3XX是代表重定向的 状态码含义301Moved Permanently 永久重定向302Found 临时重定向307Temporary Redirect 临时重定向资源到新位置308Permanent Redirect 永久重定向资源到新位置 其中大部分使用301 302,307 308很少使用我们介绍一下临时重定向和永久重定向。 首先网络中的重定向和文件的重定向概念上比较类似。一般来说我们访问对应的网址会直接找到对应的服务器进程。当这个服务器让课客户端重新进行请求另一个服务器时此时就是重定向 举个例子学校南门口有一家非常好吃的饺子馆小明经常去那里吃饭。后来因为道路施工问题饺子馆搬到看学校北门口并为了让老客户可以找到新地址在原来门店贴上新地址。小明这天去了看到了这个告示就知道应该去北门口找到这家饺子馆这就是重定向以后小明在想去饺子馆应该去老地址还是新地址呢 这就需要分两种情况 如果饺子馆是临时搬到北门口那么小明一个去原南门口的饺子馆看看再来决定是否去北门口。如果饺子馆是永久搬到北门口那么下面不用犹豫直接就去北门口就可以 这里的两种情况就是临时重定向和永久重定向的区别临时重定向只修改一次下次客户端依然访问原网址。永久重定向会永久修改下次客户端直接访问新地址 实际应用中也有实际的例子 甲公司使用www.hello.com网址使用了很多年积攒了很多用户。后来甲公司将公司网址改成了www.world.com 那么下一次老用户访问原网址时对老客户进行重定向访问到新网址并修改老客户中浏览器中的对应网址信息。这就是永久重定向 永久重定向是给搜索引擎看的每个搜索引擎都会抓取全国各个网站的网址信息然后建立起键值对。每次搜索时就可以通过关键词搜索到对应的网站。这个抓取是不断进行的。当一个网站的网址永久更改时在原网址设置重定向到新网址客户端每次进到原网址都要进行一次重定向每次都进行重定向就太麻烦了所以浏览器发现永久重定向之后就会修改内部信息下次就会直接访问到新网址 我们可以在服务器中测试一下重定向 我们在页面中加入一个测试重定向的链接这个链接会请求/redir资源这个资源实际上并不存在只是用来进行是否进行重定向的判断依据 这样点入链接之后就会再次发送请求/redir这个资源我们可以在处理时进行一个硬处理当客户端访问这个资源时进行一个特殊处理 if (hreq.Path() wwwroot/redir){// 进行重定向LOG(DEBUG, 进行重定向\n);std::string redir_path https://www.qq.com; // 重定向的新地址resp.AddCode(302, _code_to_desc[302]);resp.AddHeader(Location, redir_path);// resp.AddBody(content);}else{//...}这样进行序列化返回给浏览器之后浏览器会自动识别然后就跳转到新的网址中了 非常好玩这个现象就是重定向 3 http请求方法 3.1 http常见请求方法 在http请求中有请求行请求行中有一个参数请求方法_method。这个请求方法到底是干什么用的呢 http中有以下请求方法 请求方法方法说明适配HTTP版本GET请求指定的资源。一般用于信息查询不应产生副作用。HTTP/1.0POST向指定的资源提交数据进行处理请求例如提交表单或上传文件。HTTP/1.0PUT向指定资源位置上传其最新内容。HTTP/1.0DELETE请求服务器删除Request-URI所标识的资源。HTTP/1.0HEAD类似于GET请求但响应体不会返回用于获取报头信息。HTTP/1.0OPTIONS用于描述目标资源的通信选项。HTTP/1.1TRACE回显服务器收到的请求主要用于测试或诊断。HTTP/1.1CONNECT用于将连接改为管道方式的代理服务器。HTTP/1.1PATCH对资源进行部分修改。HTTP/1.1 其中最常见的就是GET方法和POST方法。 平时使用浏览器一般都是获取资源就是进行GET。有时也会进行登录注册这时会向服务器发送资源就是进行POST!那么浏览器是如何进行呢 我们可以在服务器中加入打印客户端请求方法这样我们可以看到 可以看到只要是获取资源都是使用的GET方法 3.2 postman工具进行请求 那我们可以进行GET方法了怎么进行POST方法呢可以使用postman这个工具 Postman提供了一个直观的界面来构建HTTP请求包括设置请求头、请求体、认证等。 Postman允许用户发送各种HTTP请求如GET, POST, PUT, DELETE等到API端点并检查响应。它支持测试脚本可以自动验证响应数据。 我们通过postman快速创建http请求使用POST方法发送。 这样服务器就得到了POST方法的请求。 GET方法不光可以获取数据也可以向服务器发送数据。POST方法也可以向服务器推送数据 我们可以在postman中加入两个键值对 这样我们再次请求时就会发现我们可以通过url向服务器进行传参了 我们在使用POST方法试一试POST方法需要再请求的正文中加入参数 这样服务器会得到一个请求这个请求正文中包含了传入的参数 总结 GET方法一般用来获取静态资源也可以通过URL向服务器传递参数。POST方法可以通过http请求的正文来进行参数的传递。URL传参参数的体量一定不大正文传参参数的体量可以很大 3.3 处理GET和POST参数 但是在用户的实际使用中用户不可能像POSTMAN一样可以手动选择请求方法那么实际应用中是通过前端的form表单完成GET和POST请求 div!-- 默认就是GET --form action/login methodPOST用户名: input typetext nameusername value.br密码: input typepassword nameuserpasswd valuebrinput typesubmit value提交/form/div这里最后使用POST方法因为使用GET方法会将参数加入到URL中这样其他人可以就能够看到用户和密码了这样可不行 那么服务器如何处理参数呢这个action/login 又是什么含义呢 当使用POST方法时参数是写在正文中的那么直接直接按照规则进行解析就可以了如果使用GET方法参数是加在URL中的。如果不做处理会影响我们后续的很多操作所以需要对URL进行处理将真正的URL提取出来并在正文中储存参数 // 解析参数 --- 忽略大小写进行比较if (strcasecmp(_method.c_str(), GET) 0){//寻找 auto pos _url.find(arg_sep);//包含说明带参数if(pos ! std::string::npos) {_req_body_text _url.substr(pos arg_sep.size());_url.resize(pos);}}这样不管是使用的什么方法传递的参数我们都可以通过正文中获取参数了 接下来我们来看action/login这个资源我们并不存在啊这个action需要怎么处理呢 我们在httpserver中加入一系列的服务名称与服务函数的哈希对应。 using func_t std::functionHttpResponse(HttpRequest);std::unordered_mapstd::string , func_t server_list;void InsertService(const std::string servicename , func_t f){//加入网络根目录std::string s prefixpath servicename;_server_list[s] f;}那么对于/login我们可以插入一个 hserver.InsertService(/login , login);那么服务器可以在处理请求之后进行特殊处理。识别出来action是/login时就可以去执行func_t函数然后可以返回对应的应答 if (hreq.Path() wwwroot/redir){// 进行重定向LOG(DEBUG, 进行重定向\n);//...}else if (!hreq.GetRequestBody().empty()){if (IsServiceExists(hreq.Path())){resp _server_list[hreq.Path()](hreq);}}这样就实现了对action的处理所以http不光可以处理静态资源也可以处理函数 我们就可以设计一个处理login的方法 HttpResponse Login(HttpRequest req) {HttpResponse resp;std::cout 外部已经拿到了参数了: std::endl;req.GetRequestBody();std::cout ####################### std::endl;resp.AddCode(200, OK);resp.AddBody(htmlh1result done!/h1/html);// usernamehelloworlduserpasswd123456//可以进行很多种的操作// 1. pipe// 2. dup2// 3. fork();// 4. 其他进程执行 - exec* - python, PHP, 甚至是Javareturn resp; }这样我们能处理不同的action了 通过这种方式我们可以通过回调函数func_t进行可以进行很多操作了 pipe创建管道dup2进行重定向fork创建子进程exec*系列进行进程替换 因为C语言处理业务并不擅长但是c处理底层十分快速所以我们可以通过管道或者新的进程将数据交给python或者java这样的web语言来处理然后在将数据返回给服务器服务器处理好之后将http应答交给客户端 这样服务器中各种语言的关系我们也就大概了解了 我们可以来看一个浏览器的实例 其中的https://cn.bing.com/search?qhelloworld我们可以大致了解其中的原理 /s应该就是search服务告诉服务器去执行搜索服务这个服务不确定是什么语言进行的参数qhelloworld是使用GET方法传给服务器的也就是我们要搜索的内容 通过F12查看页面信息我们也能找到对应的form表单 这里的action就是/search
http://www.dnsts.com.cn/news/19907.html

相关文章:

  • 社区网站怎么建网页源代码模板
  • 在哪里做百度网站网站建设建设
  • 做网站客户尾款老不给怎么办项目方案计划书
  • seo网站运营网站开发需要学些什么?
  • 做网站以后的趋势公司建立网站的作用有
  • 中国工程建设协会网站网络用户管理系统
  • wordpress后台登录logo靖江seo要多少钱
  • 沧浪公司网站建设电话网站名称与备案名称不一致
  • vs2013 网站开发科技企业网站模板
  • 建设五证在那个网站可以查企业网站优化包括哪三个层面
  • 鹤壁网站设计什么是网络营销战略
  • 上海建站网络科技怎样保证网站的安全
  • 电商网站建设服务凡科小程序登录
  • 网站搭建的步骤wordpress 提权攻击
  • 网站设计制作平台哪个好甘肃再就业建设集团网站
  • 建筑网建设通网站作用前几年做那个网站致富
  • 建立一个网站沈阳做网站软件
  • 行业协会网站织梦模板自建站有哪些
  • 那个网站可以免费建站网站域名登陆
  • 国外网站代做你做的网站会不会被人模仿
  • 学网站建设的软件网络销售渠道
  • 网站上海备案查询哈尔滨百姓网免费发布信息
  • 2014网站设计网站系统繁忙怎么办
  • 广告素材网站哪个比较好祝贺公司网站上线
  • 北京建设工程主管部门网站wordpress获取用户位置
  • 刷数据网站怎么推广做货源的网站
  • 网站如何设计方案wordpress hotnews syntax error
  • 网站开发 法律声明wordpress可视化功能
  • 企业网站开发哪家好网站出现建设中
  • 网站开发人员属于什么设计方案