通过服务器建立(一),请求已经读完且分析完毕
下面来分析响应
响应分四部分:
第一行:协议版本+“ ”+状态码+“ ”+状态描述
第二行~空行:对正文的属性说明
空行;
正文:请求的资源内容;
对于请求,响应简单分为三个分支:
1,请求正确,资源为不可执行文件
2,请求正确,资源为可执行文件
3,请求错误,服务器没有请求的资源(404)
对于情况一和二有必要进行说明,若是客户端上传一个可执行文件,然后再发送一个请求,则可能造成不安全隐患,毕竟可执行文件是在服务器上执行;
情况一:将资源发送,结束;
情况二:需要用到cgi机制,cgi是服务器和应用程序的接口。
站在服务器的角度:需要创建子进程,对子程序进行程序替换,但是如何父子进程之间进行数据交换呢?进程间通信常见的有:管道、共享内存、信号量、消息队列。在管道中有命名管道和匿名管道,匿名管道用于父子进程间通信,命名管道可见于文件系统,因此用于同一机器上任意进程间通信。在这里我用的是匿名管道,由于管道是单向的,因此使用两根管道,一根输入,一根输出。对子进程程序替换可能会使子进程不知道从哪里获取数据,因此构建环境变量,重定向到标准输出,标准输入。
在应用程序的角度:从标准输入读数据,写入标准输出。
将结果响应给客户端,结束
情况三:请求错误(404),服务器没有你想要的资源,是客户端的错误,返回一个404的响应页面即可
对于状态码的描述:由于状态码标准不统一,所以在某些浏览器上出现与本文状态码与描述不符的情况。
该图来自《图解HTTP》
200 ok
204 No Content
206 Partial Content
301 Moved Permanently
302 Found
400 Bad Request
404 Not Found
500 Internal Server Error
然后架构结束,制作程序流程图