1. HTTP协议


1.1. 什么是协议?

1)协议实际上是某些人,或者某些组织提前制定好的一套规则,大家按照这个规范来,这样可以做到沟通无障碍。
2)协议就是一套规范,就是一套标准。由其他人或其他组织来负责制定的。
3)我说的话你能听懂,你说的话,我也能听懂,这说明我们之间是有一套规范的,一套协议的,这套协议就是:中国普通话协议。我们都遵守这套协议,我们之间就可以沟通无障碍。

1.2. 什么是HTTP协议?

1)HTTP协议:是W3C制定的一种超文本传输协议。(通信协议:发送消息的模版提前被制定好。)
2)浏览器 向 WEB服务器发送数据,叫做请求(request);WEB服务器 向 浏览器发送数据,叫做响应(response)。

1.3. W3C

1)万维网联盟组织
2)负责制定标准的:HTTP HTML4.0 HTML5 XML DOM等规范都是W3C制定的。
3)万维网之父:蒂姆·伯纳斯·李

1.4. 什么是超文本?

1)超文本说的就是:不是普通文本,比如流媒体:声音、视频、图片等。
2)HTTP协议支持:不但可以传送普通字符串,同样支持传递声音、视频、图片等流媒体信息。

这种协议游走在B和S之间。B向S发数据药遵循HTTP协议,S向B发数据同样需要遵循HTTP协议。这样B和S才能解耦合。

什么是解耦合?B不依赖S,S也不依赖B。B/S表示:B/S结构的系统(浏览器访问WEB服务器的系统)。

1.5. HTTP请求协议

  • 请求行

    • 第一部分:请求方式
      • get
      • post
      • delete
      • put
      • head
      • options
      • trace
    • 第二部分:URI

      • 什么是URI?统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
      • 什么是uRL?统一资源定位符。代表网络中某个资源,同时,通过URL是可以定位到该资源的。
      • URI和URL什么关系,有什么区别?
    • 第三部分:HTTP协议版本号

  • 请求头
    • 请求的主机
    • 主机的端口
    • 浏览器信息
    • 平台信息
    • cookie等信息
    • ...
  • 空白行
    • 空白行是用来区分请求头和请求体
  • 请求体
    • 向服务器发送的具体数据

1.6. HTTP响应协议

  • 状态行
    • 第一部分:协议版本号(HTTP/1.1)
    • 第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码。)
      • 200:表示请求响应成功,正常结束。
      • 404:表示访问的资源不存在。
      • 405:表示发送请求方式与后端请求的处理方式不一致
      • 以4开始的,一般是浏览器端错误导致的。
      • 以5开头的,一般是服务器端错误导致的。
    • 第三部分
      • ok 表示正常成功结束
      • not found 表示资源找不到
  • 响应头
    • 响应的内容类型
    • 响应的内容长度
    • 响应的时间
    • ...
  • 空白行
    • 用来分割“响应头”和“响应体”
  • 响应体
    • 响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示出效果。

1.7. 怎么查看协议内容?

使用chrome浏览器:F12,然后找到network,通过这个面板可以查看协议的具体内容。

1.8. 怎么向服务器发送GET、POST请求?

1)到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method=“post”。
2)其他所有情况一律都是get请求:

- 在浏览器地址栏直接输入URL,敲回车,属于get请求。
- 在浏览器上直接点击超链接,属于get请求。
- 使用form表单提交数据时,form标签中没有写method属性,默认就是get。
- 或者使用form表单的时候,form标签中method属性值为:method=“get”。

1.9. GET请求和POST请求有什么区别?

1)get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,“?”后面是数据。这样会导致发送的数据会显示在浏览器的地址栏上。(get请求在“请求行”上发送数据)

2)post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体”当中发数据)

3)不管你是get请求还是post请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的:

name=value&name1=value1&name2=value2

4)get请求只能发送普通的字符串,并且发送的字符串长度有限制,不同的浏览器限制不同,这个没有明确的规范。

5)get请求无法发送大数据量。

6)post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。

7)post请求可以发送大量数据,理论上没有长度限制。

8)get请求在W3C中是这样说的:get请求比较适合从服务器获取数据。

9)post请求在W3C中是这样说的:post请求比较适合向服务器传送数据。

10)get请求是安全的。get请求是绝对安全的。为什么?因为get请求只是为了从服务器上获取数据,不会对服务器造成威胁。

11)post请求是危险的,为什么?因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的。另外post是为了提交数据,所有一般情况下拦截请求的时候,大部分回选择拦截(监听)post请求。

12)get请求支持缓存,post请求支持缓存。

- 任何一个get请求最终的“响应结果”都会被浏览器缓存起来,在浏览器缓存当中,一个get请求的路径,对应一个资源。
- 实际上,你只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取,这种缓存机制目的是为了提高用户体验。
- get请求每次都去服务器上找资源:
    - 只需要每一次get请求的路径不同即可。
    - 在路径的后面增加一个每时每刻在变化的“时间戳”。

1.10. GET请求和POST请求如何选择,什么时候使用GET请求,什么时候使用POST请求?

1)怎么选择GET请求和POST请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想向服务器发送数据。如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。

2)大部分的form表单提交,都是POST方式,因为form表单中要填写回显敏感信息到浏览器地址栏上。(例如:密码信息)

3)做文件上传,一定是POST请求。要传的数据不是普通文本。

4)其他情况都可以使用GET请求。

1.11. 视频

results matching ""

    No results matching ""