2018-12-15\网络与IP&node js服务器

HTTP与TCP 协议

HTTP 协议的底层其实是由 TCP 协议和 IP 协议(简称 TCP/IP)构建的。关于TCP 协议(传输控制协议),有两个相关知识点需要了解:

  1. tcp与udp的区别
    [博客]https://www.nowcoder.com/questionTerminal/63c8b45c91a544bd8febc1f1ff02e3b5?toCommentId=73766
    答:tcp可靠(可靠指的是了解是谁收到客户端请求)、面向连接,相对udp较慢;udp不可靠,不面向连接、相对tcp较快。
    2.tcp的三次握手指的是什么 [博客]https://github.com/jawil/blog/issues/14
    答:每次建立连接前,客户端和服务端之前都要进行三次对话才开始正式传输内容:
  • 客户端:我要连接你了,可以吗
  • 服务端:嗯,我准备好了,连接我吧
  • 客户端:那我连接你咯。
  • (开始后面步骤)

IP

IP包括内网 IP 和外网 IP,除此之外,还有两个特别特殊的 IP,就是本地 IP:127.0.0.1。本地 IP 永远表示设备自己。

还有一个特别特殊的 IP:0.0.0.0,它不表示任何设备。这个 IP 不同的地方含义不同,以后我们会用到,用到的时候再说意思。

端口

你想要访问一个设备(前提是你使用的是 TCP 或 UDP 协议。还记得吗,HTTP 就使用了 TCP),只指定 IP 是不够的,还必须指定端口(Port)。
端口其实就是一个编号,并不是一种硬件。
一个服务器(硬件)不一定只提供一种服务,比如一个服务器既提供 HTTP 服务,又提供 FTP 服务,还提供 SMTP 服务(邮件服务),那么只用一个 IP 是无法告诉服务器你想要使用哪种服务。
所以这里有一个重要的原则:一个端口对应一个服务。

使用node.js写服务器

使用node.js,可以完成一个服务器的demo来理解客户端(这里就是浏览器啦~)和服务器的交互(发送请求和响应)

代码的连接在这里:[node.js服务器]。。。。。。

在终端上执行代码就启动了这个服务器:

node server-1.js 8888
  1. 客户端发送请求:
    在浏览器里输入服务器地址 localhost:8080/index?name=yss,服务器收到请求后会根据server-1.js中下面的代码给出反馈:
console.log('ss说:得到http路径\n' + path)  
console.log('ss说:查询字符串的路径\n' + query)
console.log('ss说:含查询字符串的路径\n' + pathWithQuery)

2.服务器的反馈
下面这段代码,服务器会根据.setheader里的content type要求,来解析response.write中的内容,最后会反馈到页面上形成网页。

if(path === '/index'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/html; charset=utf-8')
    response.write('<!DOCTYPE html>\n<html>' + '<head><link rel="stylesheet" href="/style"></head>' + '<body><h1>我是html</h1>' + '<script src="/script"></script>' +'</body></html>')
    response.end()
  }else if(path === '/style'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/css; charset=utf-8')
    response.write('body{background: red;}')
    response.end()    
  }else if(path === '/script'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/javascript; charset=utf-8')
    response.write('Alert(“我是js执行的”)')
    response.end()    
  }
  else{
    response.statusCode = 404
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write('呜呜呜')
    response.end()
  }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,357评论 0 10
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 2,104评论 1 37
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,332评论 6 174
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,773评论 2 56
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,627评论 0 6

友情链接更多精彩内容