前言
在学习node.js时,网址解析这部分内容涉及到HTTP知识。通信协议HTTP,全称HyperText Transfer Protocol。在了解这块知识之前得先理解URL和URI。
- URL:Uniform Resource Identifier 统一资源标志符
- URI :Universal Resouce Locator 统一资源定位符
譬如,
http://imooc.com:8080/course/list?from-scott&course-node#floor1
这样复杂的一个地址都包含了什么部分?
protocol | 底层使用的协议,http: |
slashes | 协议的双斜线,// |
auth | null |
host | 域名/IP地址,imooc.com:8080 |
port | 端口,8080 |
hostname | 主机名,imooc.com |
hash | 哈希值,对应页面某个锚点,#floor1 |
search | 查询字符串参数,?from-scott&course-node |
query | 发送给http服务器的数据,from-scott&course-node |
pathname | 访问资源的路径名,/course/list |
path | 路径,/course/list?from-scott&course-node |
href | 未被解析的完整url |
以上是nodejs中url.parse解析一个url所得到的结果,下面主要来了解一下HTTP的相关知识。
URL和URI的关系
HHTP和HTTPS区别
HTTP协议用于从网络传输超文本数据到本地浏览器的传输协议,它可保证高效而准确的传送超文本文档。
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)以安全为目标的HTTP通道,HTTP中加入SSL层,是HTTP的安全版。
HTTP请求过程
- http客户端发起请求,创建端口。
- http服务器在端口监听客户端的请求。
- http服务器向客户端返回状态和状态码
其中request包含四个部分:
- Request Method 请求方法
- Request URL
- Request Headers
- Request Body
Request Method
- GET请求:在浏览器中输入URL,变发起了GET
- POST请求,大多在表单提交时发起
GET 和 POST 区别
get请求中的参数含在URL中,显式可见。post请求的URL不包含这些数据,以表单数据形式提交的数据最多1024字节,而对此get请求是没有限制的。
其他的请求方式
HEAD,类似GET,返回的响应中没有具体内容,用于获取报头。
PUT,从客户端向服务器传送的数据取代指定文档中的内容。
DELETE,请求服务器删除指定的页面。
CONNECT,把服务器当跳板,让服务器替代客户端访问其他页面。
OPTIONS,允许客户端查看服务器的性能。
TRACE,回显服务器收到的请求,主要用于测试/诊断。
Request URL
统一资源定位符,唯一确定想要请求的资源。
Request Headers
请求头,用来说明服务器要使用的附加信息。
Accept,请求报头域 | 用于指定客户端可接受哪些类型信息 |
Accept-Language | 指定客户端可接受的语言类型 |
Accept-Encoding | 指定客户端可接受的内容编码 |
Host | 用于指定请求资源的主机IP和端口号,其内容为请求 URL的原始服务器或网关的位置 |
Cookies | 网站为辨别用户进行会话跟踪而存储在用户本地的数据,主要功能:维护当前访问会话 |
Deferer | 用来标识这个请求是从哪个页面发出来的,服务器获取这一信息并作出相应处理 |
User_Agent | 让服务器识别客户端使用的操作系统及其版本,浏览器及其版本 |
Content_type | 互联网媒体类型 |
Request Body
请求体中承载的内容是POST请求中的表单数据。对于GET请求,请求体为空。
Response 响应
- Response Status Code 响应状态码,即服务器响应状态
- Response Header 包含了服务器对请求的应答信息
- Response Body
状态码
1xx | 请求已接收,正在处理 |
2xx | 请求已接收,处理完成。譬如200,表示OK |
3xx | 完成该请求预计更近一步的操作 |
4xx | 客户端错误,可能请求有语法错误。400:客户端语法错误,401:请求未被授权,403:请求被拒绝,404:资源没找到 |
5xx | 服务器端错误。500:服务器发生不可预计的错误,503:服务器当前无法处理请求 |