深入HTTP请求(二)

89 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 前言:带领大家继续深入学习HTTP~

  • 响应头:

    • 响应的内容类型
    • 响应的内容长度
    • 响应的时间
    • ....
-   空白行:
    -   用来分隔“响应头”和“响应体”的。

-   响应体:

    -   响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示出效果。
  • 怎么查看的协议内容?

    • 使用chrome浏览器:F12。然后找到network,通过这个面板可以查看协议的具体内容。
  • 怎么向服务器发送GET请求,怎么向服务器发送POST请求?

    • 到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method="post"。

    • 其他所有情况一律都是get请求:

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

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

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

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

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

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

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

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

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

    • get请求是安全的。get请求是绝对安全的。为什么?因为get请求只是为了从服务器上获取数据。不会对服务器造成威胁。(get本身是安全的,你不要用错了。用错了之后又冤枉人家get不安全,你这样不好(太坏了),那是你自己的问题,不是get请求的问题。)

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

    • get请求支持缓存。

      • n.sinaimg.cn/finance/590…

      • 任何一个get请求最终的“响应结果”都会被浏览器缓存起来。在浏览器缓存当中:

        • 一个get请求的路径a 对应 一个资源。
        • 一个get请求的路径b 对应 一个资源。
        • 一个get请求的路径c 对应 一个资源。
        • ......
      • 实际上,你只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。

      • 有没有这样一个需求:我们不希望get请求走缓存,怎么办?怎么避免走缓存?我希望每一次这个get请求都去服务器上找资源,我不想从本地浏览器的缓存中取。

    • post请求不支持缓存。(POST是用来修改服务器端的资源的。)

      • post请求之后,服务器“响应的结果”不会被浏览器缓存起来。因为这个缓存没有意义。