当前位置: 首页 > 后端技术 > Node.js

学习http

时间:2023-04-03 16:39:02 Node.js

概念http(HypertextTransferProtocol)是一种基于请求-响应的、无状态的、应用层协议,常基于TCP连接方式,HTTP1.1版本提供持续连接机制,绝大多数web开发是建立在HTTP协议之上的Web应用程序。HTTPURL(URL是一种特殊类型的URI,包含足够的信息来查找资源)的格式如下:http://host":"porthttp表示通过HTTP协议定位网络资源;host指合法互联网主机域名或IP地址;port指定一个端口号,如果为空,则使用默认的80端口;abs_path指定请求资源的URI;如果在URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”开头的形式给出,通常浏览器会自动帮我们完成这个工作。网络基础的内容1七层网络协议(7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层)。2每次HTTP传输都要经过应用层、传输层、网络层、链路层、(传输目标)链路层、(传输目标)网络层、(传输目标)传输层和(传输目标)应用层。http发生在应用层,但它的底层是tcp。3TCP的三次握手第一次握手:客户端向服务器发送一个syn包(syn=j),并进入SYN_SEND状态,等待服务器确认;第二次握手:服务端收到syn包,必须确认客户端的SYN(ack=j+1),同时发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手方式握手。握手过程中传输的数据包不包含数据。三次握手完成后,client和server正式开始传输数据。理想情况下,一旦建立了TCP连接,TCP连接将一直保持到任何一方主动关闭连接。(断开时服务器端和客户端都可以主动发起断开TCP连接的请求,断开过程需要“四次握手”)4电话原理代码010-68886xx8老王电话与电信局之间的电话线实际上有两个通道:信令通道+语音通道。当老王拿起电话拨通010-68886xx8时,这个号码通过信令通道传送出去了。电信局也预留话音通道(DS0),以备日后通讯之用。电信局根据这个号码进行路由查找,找到上层交换机,将010-68886xx88通过信令通道转发给上层交换机,同时与上层协商预留一个DS0话音语音传输通道。就这样一步步转号,最后转号到老张在北京的电话,铃声响起。北京电信局与老张的电话之间预留了一条DS0语音通道,用于语音传输。老张第二次拿起电话,老王来的时候,顺着信令通道(一跳,一跳)给老王的手机传来了一个“已连接”的信号。第三次,老王手机通常会向对方返回一个“ACK”,表示收到了对方的“Connected”。语音传输老张拿起电话的时候,端到端的语音通道就已经预留好了,一般DS0=64Kbps,这个端到端的通道实际上是由多个hop-2-hop通道串联而成的。此时双方可以畅所欲言,语音数据将从预留的语音通道流向对方。从上面的描述来看,信令数据和语音数据是在各自独立的信道中传输的,大家互不干扰。(例子出处,感谢作者:https://www.zhihu.com/people/...)简单HTTP协议http协议是一种不保存状态的协议,所以引入了Cookie技术。一个HTTP消息http请求由三部分组成,分别是:请求行、消息头和请求文本。客户端发送请求消息,服务器发送响应消息。客户端请求在请求消息中,客户端使用不同的方法将其意图告知服务器。常用的方法有POST和GETGET来请求Request-URI标识的资源。POST将新数据HEAD附加到Request-URI标识的资源。请求获取Request-URI标识的资源的响应报文头PUT请求服务器存储一个资源,并以Request-URI作为其标识DELETE请求服务器删除Request-URI标识的资源TRACE请求服务器发送返回接收到的请求信息,主要用于测试或诊断CONNECT保留以备后用OPTIONS请求查询服务器的性能,或查询资源相关的选项和要求应用实例:GET方法:当输入URL访问网页时在浏览器的地址栏中,浏览器使用GET方法从服务器获取资源,eg:GET/form.htmlHTTP/1.1(CRLF)POST方法要求被请求的服务器接受请求中附加的数据,即常用于提交表单。来自服务器的HTTP响应也由三部分组成,即:状态行、消息头和响应文本。-Code表示服务器发回的响应状态码;Reason-Phrase表示状态码的文本描述。状态码由三位数字组成,第一个数字定义了响应的类型,有五个可能的值:1xx:指示信息--表示请求已收到,继续处理2xx:成功--表示请求成功已成功接收,理解并接受3xx:重定向--必须执行进一步的操作才能完成请求4xx:客户端错误--请求有语法错误或请求无法执行5xx:服务器端错误--服务器failedtoimplementalegalrequestcommonstatuscode,状态描述,描述:200OK//客户端请求成功400BadRequest//客户端请求有语法错误,服务器无法理解401Unauthorized//请求是unauthorized,该状态码必须与WWW-Authenticate头域一致一起使用403Forbidden//服务器收到请求,但拒绝提供服务404NotFound//请求的资源不存在,eg:wrongURLwas输入500InternalServerError//服务器发生意外错误503ServerUnavailable//服务器当前无法处理客户端的请求,过一段时间可能会恢复正常。响应文本是服务器返回的资源内容。消息头HTTP消息头包括公共头、请求头、响应头和实体头。每个头域由名称+“:”+空格+值组成,消息头域的名称不区分大小写。请求标头允许客户端将有关请求的附加信息以及客户端自己的信息传递给服务器。egAccept:image/gifAccept-Charset响应头允许服务器传递不能放在状态行中的额外响应信息,以及关于服务器的信息和下一步访问由Request标识的资源的信息-URI。例如位置服务器请求和响应消息可以传达一个实体。实体由实体头字段和实体文本组成,但并不意味着实体头字段和实体文本必须一起发送,只能发送实体头字段。实体标头定义有关实体文字的元信息(例如:实体文字的存在与否)和请求标识的资源。egEncoding:gzip编码传输的HTTP消息(message)一般和HTTP实体(entity)是一回事。只有在传输过程中发生编码操作时,实体主体的内容才会发生变化,导致它与消息主体不同。常用的内容编码有:gzip(GNUzip)compress(UNIX系统的标准压缩)deflate(zlib)identity(无编码)webserviceprocess搜索自己的dnscache搜索操作系统自己的dnscache读取本地主机浏览器发起一个dns系统调用,找到ip地址后发起后续握手。感谢:http://www.cnblogs.com/li0803...