- 协议(http://)
协议确定如何传输请求。我们主要是处理 http 和 https。其他常见的协议还有 file 和 ftp。
- 主机名(www.bing.com)
主机名标识服务器。运行在本地计算机(localhost)和本地网络的服务器可以简单地表示,比如用一个单词,或一个数字 IP 地址。在 Internet 环境下,主机名通常以一个顶级域名(TLD)结尾,比如 .com 或.net。另外,也许还会有子域名作为主机名的前缀。子域名可以是任何形式的,其中 www 最为常见。子域名通常是可选的。
- 端口(:80)
每一台服务器都有一系列端口号。一些端口号比较“特殊”,如 80 和 443 端口。如果省略端口值,那么默认 80 端口负责 HTTP 传输,443 端口负责 HTTPS 传输。如果不使用 80 和 443 端口,就需要一个大于 10231 的端口号。通常使用容易记忆的端口号,如 3000、8080 或 8088。
- 路径(/search)
URL 中影响应用程序的第一个组成部分通常是路径(在考虑协议、主机名和端口的基础上做决定很合理,但是不够好)。路径是应用中的页面或其他资源的唯一标识。
- 查询字符串(?q=nodejs&page=3)
查询字符串是一种键值对集合,是可选的。它以问号(?)开头,键值对则以与号(&)分隔开。所有的名称和值都必须是 URL 编码的。对此,JavaScript 提供了一个嵌入式的函数 encodeURIComponent 来处理。例如,空格被加号(+)替换。其他特殊字符被数字型字符替换。
- 信息片段(#history)
信息片段(或散列)被严格限制在浏览器中使用,不会传递到服务器。用它控制单页应用或 AJAX 富应用越来越普遍。最初,信息片段只是用来让浏览器展现文档中通过锚点标记()指定的部分。
- http 协议:全称超文本协议传输
- 工作流程:首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP 的工作开始。
- 收线客户机与服务器需要建立连接,只要单击某个超级连接,http 的工作开始
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号、后边是 MIME 信息包括请求修饰符、客户机信息和可能的内容。
- 服务器接到请求后,给与相应的相应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开链接。
- 常用的 HTTP 方法
- GET:用于请求访问已经被 URL(统一资源标识符)识别的资源,可以通过 URL 传参给服务器。
- POST:用于传输信息给服务器,主要功能与 Get 方法类似,但一般推荐 POST 方式。
- PUT:传输文件,报文主体包含文件内容,保存到对应 URL 位置。
- DELET:删除文件,与 PUT 方法相反,删除对应 URL 位置的文件。
- HEAD:获取报文首部,与 GET 方法类似,只是不返回报文主体,一般用于验证 URL 是否有效。
- OPTIONS:查询相应 URL 支持的 HTTP 方法。
- HTTP 相关的状态码
- 1xx: 提示信息--表示请求已接收,继续处理
- 2xx:成功--表示请求已被成功接收
- 3xx:重定向--要完成请求必须进行更进一步的操作
- 4xx:客户端错误--请求有语法错误或请求无法实现
- 5xx:服务器错误--服务器未能实现合法的请求
- 请求行(GET/HTTP/1.1)
- 包含:http 方法、页面地址、http 协议、版本
- 请求头
- key、value 值来告诉服务端要那些内容,注意哪些类型
- 空行
- 当遇到空行就知道不在是请求头部分了,就该当请求体来解析了
- 请求体
- 状态行(HTTP/1.1 200OK--http 状态码)
- 响应头
- key、value 值来告诉服务端要那些内容,注意哪些类型
- 空行
- 响应体
- 比如:给的 html 文档就是响应体部分
- GET 在浏览器回退时是无害的,而 POST 会再次提交请求
- GET 产生的 URL 地址可以被收藏,而 POST 不可以
- GET 请求会被浏览器主动缓存,而 POST 不会,除非手动设置
- GET 请求只能进行 url 编码,而 POST 支持多种编码方式
- GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留
- 想把参数留在浏览器历史记录里用 GET,做业务开发的时候为了防止 crsf 攻击,公司里都把 GET 请求改成 POST,
- 如果业务需要把参数留在浏览器历史记录中记得把 POST 改成 GET;
- GET 请求在 URL 中传送的参数是有长度限制的(2kb),而 POST 没有限制
- 如果用的是 GET 请求,拼接的 url 不要太长,否则会被浏览器截断,因为 http 协议对这个长度是有限制的,
- 发不出去,导致截断这种情况,一旦被截断,你的服务器拿不到正确的地址。
- 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制
- GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息
- GET 参数通过 URL 传递,POST 放在 Request body 中
- 总体来说分为以下几个过程:
- DNS 解析
- TCP 连接
- 发送 HTTP 请求
- 服务器处理请求并返回 HTTP 报文
- 浏览器解析渲染页面
- 连接结束
所以访问一个网页的流程是这样的:
http://www.baidu.com
1、通过域名查询DNS系统找到IP地址
2、通过IP地址找到百度的服务器
3、通过80端口找到百度服务器上的应用程序Apache或者nginx等
4、服务器返回网页内容,
5、浏览器把内容渲染成页面- 配置说明
- IP 地址用来定位计算机
- 端口号用来定位具体的应用程序
- 一切需要联网通信的软件都会占用一个端口号
- 端口号的范围从 0-65536 之间
- 在计算机中一些默认的端口号最好不要去用
- 如 http 服务的 80 端口