HTTP 协议

HTTP 协议

  • HTTP 的请求协议

    • HTTP 的请求协议包括:4 部分

      • 请求行
      • 请求头
      • 空白
      • 请求体
    • HTTP 请求协议的具体报文:GET 请求

      • GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1                         请求行
        Host: localhost:8080                                                                  请求头
        Connection: keep-alive
        sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
        sec-ch-ua-mobile: ?0
        sec-ch-ua-platform: "Windows"
        Upgrade-Insecure-Requests: 1
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        Sec-Fetch-Site: same-origin
        Sec-Fetch-Mode: navigate
        Sec-Fetch-User: ?1
        Sec-Fetch-Dest: document
        Referer: http://localhost:8080/servlet05/index.html
        Accept-Encoding: gzip, deflate, br
        Accept-Language: zh-CN,zh;q=0.9
                                                                                              空白行
                                                                                              请求体
        
    • HTTP 请求协议的具体报文:POST 请求

      • POST /servlet05/postServlet HTTP/1.1                                                  请求行
        Host: localhost:8080                                                                  请求头
        Connection: keep-alive
        Content-Length: 25
        Cache-Control: max-age=0
        sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
        sec-ch-ua-mobile: ?0
        sec-ch-ua-platform: "Windows"
        Upgrade-Insecure-Requests: 1
        Origin: http://localhost:8080
        Content-Type: application/x-www-form-urlencoded
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        Sec-Fetch-Site: same-origin
        Sec-Fetch-Mode: navigate
        Sec-Fetch-User: ?1
        Sec-Fetch-Dest: document
        Referer: http://localhost:8080/servlet05/index.html
        Accept-Encoding: gzip, deflate, br
        Accept-Language: zh-CN,zh;q=0.9
                                                                                              空白行
        username=lisi&userpwd=123                                                             请求体
        
    • 请求行

      • 包括三部分
        • 第一部分:请求方式
          • get(常用的)
          • post(常用的)
          • delete
          • put
          • head
          • options
          • trace
        • 第二部分:URI
          • 什么是 URI?统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
          • 什么是 URL?统一资源标识符。代表网络中某个资源,同时,通过URL是可以定位到该资源的。
          • URI 和 URL 什么关系?
            • URI 包括 URL。
        • 第三部分:HTTP 协议版本号
    • 请求头

    • 空白行

      • 空白行是用来区分请求头和请求体的。
    • 请求体

      • 向服务器发送的具体数据。
  • HTTP 的响应协议

    • HTTP 的响应协议包括:4 部分

      • 状态行
      • 响应头
      • 空白行
      • 响应体
    • HTTP 响应协议的具体报文

      • HTTP/1.1 200 OK								状态行
        Cache-Control: private						 响应头
        Content-Type: text/html; Charset=gb2312
        Content-Encoding: gzip
        Vary: Accept-Encoding
        Server: Microsoft-IIS/10.0
        X-Powered-By: ASP.NET
        Date: Tue, 28 Feb 2023 00:57:43 GMT
        Content-Length: 17443
        										   空白行							  
        <!DOCTYPE html>								响应体
        <html>
        <title>爱收集资源网</title>
        </html>
        
    • 状态行

      • 三部分组成
        • 第一部分:协议版本号
          • HTTP/1.1
        • 第二部分:状态码
          • 200
        • 第三部分:状态的描述信息
          • OK
    • 响应头

    • 空白行

      • 空白行是用来区分响应头和响应体的。
    • 响应体

      • 响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示出效果。
  • 怎么向服务器发送 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 后面添加了一个 ?,? 后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。
    • post 请求发送数据的时候,在请求体当中发送数据,不会导致发送的数据回显在浏览器的地址栏上。
    • get 请求只能发送普通字符串。并且发送的字符串长度有限制,不同的浏览器限制不同。这个没有明确的规范。
    • get 请求无法发送大数据量。
    • post 请求可以发送任何类型的数据。
    • post 请求可以发送大数据量,理论上没有长度限制。
    • get 请求在 W3C 中是这样说的:get 请求比较适合从服务器端获取数据。
    • post 请求在 W3C 中是这样说的:post 请求比较适合向服务器端传送数据。
    • get 请求是安全的。get 请求是绝对安全的。为什么?因为 get 请求只是为了从服务器上获取数据。不会对服务器造成威胁。(get 本身是安全的,你不要用错了。用错了之后又冤枉人家 get 不安全,你这样不好(太坏了),那是你自己的问题,不是 get请求的问题。)
    • post 请求是危险的。为什么?因为 post 请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的。另外 post 是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post 请求。
    • get 请求支持缓存。
      • https://n.sinaimg.cn/finance/590/w240h350/20211101/b40c-b425eb67cabc342ff5b9dc018b4b00cc.jpg
      • 任何一个 get 请求最终的“响应结果”都会被浏览器缓存起来。在浏览器缓存当中:
        • 一个 get 请求的路径对应 一个资源。
        • 一个 get请求的路径对应 一个资源。
        • 一个 get 请求的路径对应 一个资源。
      • 实际上,你只要发送 get 请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。
      • 有没有这样一个需求:我们不希望 get 请求走缓存,怎么办?怎么避免走缓存?我希望每一次这个 get 请求都去服务器上找资源,我不想从本地浏览器的缓存中取。
        • 只要每一次 get 请求的请求路径不同即可。
        • https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=789789787897898
        • https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=789789787897899
        • https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=系统毫秒数
        • 怎么解决?可以在路径的后面添加一个每时每刻都在变化的“时间戳”,这样,每一次的请求路径都不一样,浏览器就不走缓存了。
      • post 请求不支持缓存。(POST 是用来修改服务器端的资源的。)
        • post 请求之后,服务器“响应的结果”不会被浏览器缓存起来。因为这个缓存没有意义。
  • GET 和 POST 如何选择?什么时候使用 GET?什么时候使用 POST?

    • 怎么选择 GET 请求和 POST 请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想向服务器发送数据。如果你是想从服务器上获取资源,建议使用 GET 请求,如果你这个请求是为了向服务器提交数据,建议使用 POST 请求。
    • 大部分的 form 表单提交,都是 post 方式,因为 form 表单中要填写大量的数据,这些数据是收集用户的信息,一般是需要传给服务器,服务器将这些数据保存/修改等。
    • 如果表单中有敏感信息,还是建议适用 post 请求,因为 get 请求会回显敏感信息到浏览器地址栏上。(例如:密码信息)
    • 做文件上传,一定是 post 请求。要传的数据不是普通文本。
    • 其他情况都可以使用 get 请求。
  • 不管你是 get 请求还是 post 请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的。

    • 格式 name=value&name=value
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值