node_HTTP协议

HTTP:(Hypertext transfer protocol)超文本传输协议,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:
// 1、支持客户/服务器模式
//   C/S 服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
//   B/S (Browser/Server,浏览器/服务器模式)
// 2、简单快速 客户向服务器请求服务时,只需传送请求方法和路径。
// 3、灵活 HTTP允许传输任意类型的数据对象。
// 4、无连接
//   限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  
//   Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。
//   客户端和服务器之间的 HTTP 连接就会被保持,不会断开(超过 Keep-Alive 规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。
// 5、无状态
//   是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
//   HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。
//   缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
//   HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息

//   Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。
//   Cookies 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是 Cookies 的功用。

//   与 Cookie 相对的一个解决方案是 Session,它是通过服务器来保持状态的。
//   当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务器上,同时将标示 Session 的 SessionId 传递给客户端浏览器,浏览器将这个 SessionId 保存在内存中,我们称之为无过期时间的 Cookie。浏览器关闭后,这个 Cookie 就会被清掉,它不会存在于用户的 Cookie 临时文件。


URL:(Uniform Resource Locator)统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
//   1、Scheme 通信协议:常用的是http协议,https(http+ssh)
//   2、Host 服务器主机地址:可以是域名,也可以是主机名,或IP地址。像百度就是域名www.baidu.com,DNS服务器会去解析的。http://10.1.192.66:8181/VPNMS/page/main.jsp
//   3、Port 端口:服务器设定的端口。像URL地址里一般无端口,那是因为服务器使协议的默认端口了,用户使用url访问服务器时,可以省略的。
//        http协议默认端口是:80端口,如果不写出来,默认就是:80端口
//        常见的那几个端口,数据库Oracle:1521;  Mysql:3306; FTP:21 ; SSH:22
//   4、Path 路径:访问的资源在服务器下的相对路径,不是在服务器的绝对路径,是服务器上的一个目录或者文件地址。https://baike.baidu.com/item/url/110640?fr=aladdin
//   5、Query 参数:查询搜索的部分,需要向服务器传入参数,就在这输入。通过问号?连接到path后面,有时候也归类到path中。
//   6、Fragment: 信息片段,字符串,用于指定网络资源中的某片断;


在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。
基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
  // 1.客户与服务器建立连接;
  // 2.客户向服务器提出请求;
  // 3.服务器接受请求,并根据请求返回相应的文件作为应答;
  // 4.客户与服务器关闭连接。



请求报文(请求行/请求头/空行/请求数据)
请求行:请求行在请求数据包的第一行,包含请求类型(get/post)、请求资源路径、协议的版本和类型。
  // 例如:GET /index.html HTTP/1.1 get方法将数据拼接在url后面,传递参数受限
  // 请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
请求头/消息头:若干消息头样式(w3c定义的一些有特殊意义的键值对(key value形式)),如content-type=text/html,charset=utf-8等,服务器端和客户端都会遵循消息头的约定,也可以通过代码设置。
  // Accept:告诉服务器,客户机支持的数据类型
  // Accept-Encoding:告诉服务器,客户机支持的数据压缩格式
  // Cache-Control:缓存控制,服务器通过控制浏览器要不要缓存数据
  // Connection:处理完这次请求,是断开连接还是保持连接
  // Cookie:客户机通过这个可以向服务器带数据
  // Host:访问的主机名
  // User-Agent:告诉服务器,客户机的软件环境
  // Host:主机地址
空行,发送回车符和换行符,通知服务器以下不再有请求头,它的作用是通过一个空行,告诉服务器请求头部到此为止。

请求体/请求数据,消息正文:如果请求方式为post,请求参数和值就会放在这里,会把数据以key value形式发送请求。如果为get那么请求参数和值就会包含在资源路径(URL)上。


应答报文(状态行/响应头/空格/响应数据)
状态行
  // 1xx:指示信息--表示请求已接收,继续处理。
  // 2xx:成功--表示请求已被成功接收、理解、接受。
  // 3xx:重定向--要完成请求必须进行更进一步的操作。
  // 4xx:客户端错误--请求有语法错误或请求无法实现。
  // 5xx:服务器端错误--服务器未能实现合法的请求。
  // 常见状态码
  //   100 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。
  //   200 OK:客户端请求成功。
  //   304 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。
  //   404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。
  //   500 Internal Server Error:服务器发生不可预期的错误。
响应头
  // Connection:处理完这次请求后,是断开连接还是继续保持连接
  // Content-Encoding:服务器通过这个头告诉浏览器数据的压缩格式
  // Content-Length:服务器通过这个头告诉浏览器回送数据的长度
  // Content-Type:服务器通过这个头告诉浏览器回送数据的类型
  // Date:当前时间值
  // Server:服务器通过这个头告诉浏览器服务器的类型
  // Vary:Accept-Encoding ——明确告知缓存服务器按照 Accept-Encoding 字段的内容,分别缓存不同的版本;参考:https://imququ.com/post/vary-header-in-http.html
  // X-Powered-By:服务器告知客户机网站是用何种语言或框架编写的。
空行,发送回车符和换行符,通知服务器以下不再有请求头,它的作用是通过一个空行,告诉服务器请求头部到此为止。

请求体/请求数据,消息正文:如果请求方式为post,请求参数和值就会放在这里,会把数据以key value形式发送请求。如果为get那么请求参数和值就会包含在资源路径(URL)上。返回的是html或者json数据等等



get请求/post请求区别

get请求
  // GET请求一般用去请求获取数据
  // GET请求需要将请求参数放在url之后,以?分割网址与参数,多个参数用&符号链接,
  //   例如https://www.baidu.com/?tn=monline_3_dg&pn=1   ?问号前表示请求地址,?后表示请求参数,&用来连接多个请求参数,
  // GET请求参数长度也是有限制的,一般最多只能识别1024个字符
  // GET请求刷新浏览器或回退时没有影响
  // GET请求可被缓存
  // GET请求保留在浏览器历史记录中
  // GET请求只能进行url编码(application/x-www-form-urlencoded)

post请求
  // POST一般作为发送数据到后台时使用
  // POST请求传递参数放在Request body中,不会在url中显示,比GET要安全
  // POST请求对传送的数据大小没有限制
  // POST回退时会重新提交数据请求
  // POST 请求不会被缓存
  // POST 请求不会保留在浏览器历史记录中
  // POST支持多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。)

GET请求比较常见的方式是通过url地址栏请求
POST最常见是通过form表单发送数据请求



OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层

// 应用层: 用户的应用程序和网络之间的接口。
//   应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。
//   例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

// 表示层: 协商数据交换格式 相当公司中简报老板、替老板写信的助理。
//   表达层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。

// 会话层: 允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书。
//   会话层(Session Layer)负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。

// 传输层: 提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员。
//   传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。

// 网络层: 使用权数据路由经过大型网络 相当于邮局中的排序工人。
//   网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议(IP)等。

// 数据链路层: 决定访问网络介质的方式。在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。
//   数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等
//   分为两个子层:逻辑链路控制(logic link control,LLC)子层和介质访问控制(media access control,MAC)子层。

// 物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人。
//   物理层(Physical Layer)在局部局域网上传送数据帧(data frame),它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等。

猜你喜欢

转载自www.cnblogs.com/JunLan/p/12530857.html