HTTP基础

171 阅读3分钟

负载均衡与共享主机

  • 一个域名:多个IP(主机) --- 负载均衡
  • 一个IP(主机 ): 多个域名 --- 共享主机

HTTP说明文档RFC2612中文版

http80端口https443端口

域名分类

  • com是顶级域名
  • xxx.com应当是二级域名,但是俗称叫一级域名
  • www.xxx.com 应当是三级域名,但是俗称叫二级域名,与xxx.com为父子关系
  • 例如:github.io是俗称的一级域名 但是某用户的username.github.io是俗称的二级域名也是github.io的子域名

www.baidu.com 与 baidu.com不是同一个域名

什么是URL

五大要素:协议,域名,页面路径,查询参数,锚点

CURL工具是什么

一个利用URL语法在命令行环境工作的文件传输工具,可以用于请求web服务器,与postman功能类似但是更强大

浏览器输入地址只是发请求的最最基本方式而已,无法对请求做任何的修改

阮一峰 curl 的用法指南

锚点的内容不会发送给服务器只与本地浏览器相关

curl www.baidu.com 会发生什么

查询DNS服务器得到IP地址并连接这个服务器
然后告诉这个服务器我们要访问的host(域名)是www.baidu.com(一个IP可能存在多个域名,因此需要指明)
User-Agent: 用户代理,指的是你发请求所用的工具 这张图表明了响应头以及返回的内容

用nodejs构建一个简单的http服务器请求网页

这里是我传到Github上的nodeJS源码

本地运行过程:

  • 把server.js clone到本地
  • node server.js:8888 //要指明端口号
  • 打开浏览器输入地址,观察network
  • 为什么发起了两个请求?
  • nodeJS代码中会返回一个html网页供浏览器解析
  • 浏览器并不关心文件格式诸如.html/.css 这些,只关心返回的响应头怎么写的,若"Content-Type:text/html"则按照html语法解析
  • 由于link了一个路径,则浏览器继续访问该/x路径,于是发现/x路径返回的是css文件,
  • 下图为nodejs中检测到路径/x后是如何设置响应头与响应体的(respone.write用于写响应体)
  • 同理,浏览器通过responseHeader知道这是css文件并解析

阿里云服务器运行过程: 具体看19th的简介

  • 注册阿里云ECS
  • 充值100元购买Ubuntu 64位服务器
  • 基础配置之后运行服务器
  • 配置ssh以远程登陆
  • linux中创建账户
  • 安装nodejs与git
  • 部署应用

Request与Response基本格式

Request:

network可以查看到通过chrome发的http请求的原格式 Http Request包含以下三部分内容:

  • Request Line
  • Request Header
  • Request Body (post请求方式才有)

以下是用Chrome浏览器发送的GET请求

以下是用CURL发送的POST请求

可以手动为Request Header添加内容

在客户端(chrome/curl)设置的请求头,可在服务器端查看 用curl手动添加:

curl -v -H 'Ryan:OK' http://localhost:8888/?wd=hi   //-H 为RequestHeader增加内容

可以从服务器看到打印出的RequestHeader如下

Response:

下图演示了如何在chrome中查看response元数据与响应体内容(即返回的数据) 响应体内容在response tab页面中

可以手动为Response Header添加内容

在服务器端(nodejs)设置的响应头,可在客户端(chrome/curl)查看

response.setHeader('Ryan','GettingBetter') // 在nodeJS中设置响应头

锚点的内容不会发送给服务器只在本地浏览器内