--- title: 计算机网络 date: 9997-12-31 tags: [计算机,计算机网络] --- 《计算机网络》概览。 ## HTTP协议 https://developer.mozilla.org/en-US/docs/Web/HTTP https://www.w3cschool.cn/http/a96bxfml.html https://devdocs.io/http/ * HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。 * 它可以使浏览器更加高效,减少网络传输。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。 * Python爬虫开发,主要是和HTTP协议打交道。 ## HTTP请求过程 * HTTP协议采取的是请求响应模型及其示图。 * HTTP协议永远都是客户端发起请求,服务器回送响应。 * HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求没有对应关系。 * 一次HTTP操作称为一个事务,其执行过程可分为四步: ** 首先客户端与服务器需要建立连接,例如单击某个超链接,HTTP的工作就开始了。 ** 建立连接后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息,包括请求修饰符、客户机信息和可能的内容。 ** 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息,包括服务器信息、实体信息和可能的内容。 ** 客户端接收服务器所返回的信息,通过浏览器将信息显示在用户的显示屏上,然后客户端与服务器断开连接。 如果以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,在显示屏输出,这些过程是由HTTP协议自己完成的。 ## HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。在浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码主要是是为了标识此次HTTP请求的运行状态。 HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。 * 200——请求成功。 * 301——资源(网页等)被永久转移到其他URL。 * 404——请求的资源(网页等)不存在。 * 500——内部服务器错误。 HTTP头信息 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers mozilla] ## IPC几种通信方式(进程间的通信方式) 管道(pipe) 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的首端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。 管道有三种 *普通管道。有两个限制:一是只支持半双工通信方式,即只能单向传输;二是只能在父子进程之间使用; *流管道。去除第一个限制,支持双向传输; *命名管道。去除第二个限制,可以在不相关进程之间进行通信。 命名管道(namedpipe) 命名管道也是半双工的通信方式,它克服了管道没有名字的限制,并且它允许无亲缘关系进程间的通信。命令管道在文件系统中有对应的文件名,命名管道通过命令mkfifo或系统调用mkfifo来创建。MicrosoftSQLServer数据库默认安装后的本地连接使用的就是命名管道。MySQL在Window环境下,如果需要两个进程在同一台服务器上通信可以使用命名管道,通过--enable-named-pipe选项设置。 信号量(semophore) 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 消息队列(messagequeue) 消息队列是由消息的链表结构实现,存放在内核中并由消息队列标识符标识。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 信号(sinal) 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。除了用于进程通信外,进程还可以发送信号给进程本身。 共享内存(sharedmemory) 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信。MySQL内部通信也使用了共享内存的方式,可以通过配置文件添加--shared-memory实现 套接字(socket) 也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。