HTTP协议

HTTP属于是应用层最广泛使用的协议之一!

浏览器获取到网页就是基于HTTTP协议

HTTP就是浏览器和服务器之间的桥梁

HTTP(1.1)目前最常见的(课堂使用)

HTTP往往是基于传输层的TCP协议实现的!!

HTTP协议_第1张图片

在浏览器中输入网址/URL

HTTP协议_第2张图片

sogou.com——》网址/URL

浏览器会根据这个URL,构造出一个HTTP请求,发送给服务器,服务器就会返回一个HTTP响应(包含HTML,JS,CSS,图片……),浏览器把得到的HTML等数据进行显示出来(渲染)

其实http协议的交互详细过程,可以借助第三方工具来看到的:称为“抓包工具”,如:fidder

打开fidder,立即显示出当前电脑上某个程序使用http和服务器交互的过程!

HTTP协议_第3张图片

fidder本质上是一个代理程序,使用的时候,有两个注意事项:

  1. fidder可能和别的代理程序起冲突

    使用的时候,要关闭其他的代理程序(包括一些浏览器插件)(所谓的代理是指:找个人给你干活)

    代理分为两种:

    正向代理:代表客户端的代理

    反向代理:代表服务器的代理

    HTTP协议_第4张图片

  2. 要想正确的抓包,核对开户HTTPS功能
    https是基于http搞出来的进化版协议,当下互联网绝大部分的服务器都是https的!!fidder默认情况下不能抓https的包,需要咱们手动启用一下https,并且按照证书(至于怎么安装证书,请移步它文,在此不做过多的讲述)

了解HTTP关键信息的含义:学习一个协议,就是学习它的报文格式!

GET https://www.sogou.com/ HTTP/1.1

HTTP协议_第5张图片

首行:包含三个部分,之间使用空格来区分!

  1. GET:HTTP的方法(methond)
  2. https://sogou.com/(URL/网址)URL是唯一资源定位符,标识整个互联网上的唯一的资源的位置(定位符:资源在哪儿??在哪个服务器的哪个目录下的哪个文件??
  3. HTTP/1.1:版本号

认识URL:

HTTP协议_第6张图片

 URL 最关键的四个部分

  1. 域名/IP
  2. 端口号
  3. 带层次的路径
  4. 查询字符串

HTTP协议_第7张图片

其实一个URL的几个部分,有些是可以省略的(默认)

如:https://www.sogou.com/

  1. 省略了端口——》浏览器会通过一个默认端口,对于http默认端口是80,对于https默认端口是443
  2. /也是路径,没省略,只是有点短——》‘/’代表根目录(HTTP服务器的根目录)

一个HTTP服务器提供的资源是很多的,不同的路径,拿到的是不同的资源

https://www.sogou.com

HTTP协议_第8张图片

https://www.sogou.com/index.html

HTTP协议_第9张图片

HTTP协议:应用层协议,用来浏览器和Web服务器之间的交互!

方法 说明
GET 获取资源
POST 传输实体主类
PUT 传输文件
HEAD 获得报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理
LINK 建立和资源之间的联系
UNLNE 断开连接关系

其实在实际开发中,这里的方法,大部分是用不到的,最常见的就两个:GET,POST

天下的HTTP方法是十斗,GET独占八斗,POST占一斗,剩下的方法共分一斗!

GET请求:

  1. 在浏览器地址栏里直接输入URL
  2. html里的link , script , img……标签
  3. 通过js来构造get……

POST请求:

  1. 最典型的就是登录,登录的时候会涉及到POST
  2. 上传文件/图片

HTTP请求可以认为是分成四个部分!!

  1. 首行
  2. 请求头(header)
  3. 空行
  4. 正文(body)

如果是GET请求,没有body

如果是POST请求,一般有body

在抓包的结果中可以看到post的body是程序员自定义的内容!

uid——》唯一身份标识!

可以通过一定的算法,构造出一个长的字符串,每次构造的长字符串都是通用的!

GET和POST之间的区别??(其实没有本质区别,在大部分场景下,彼此之间能相互替代,主要还是使用习惯的差异!)(经典面试题)

  1. GET也可以给服务器传递一些信息

    GET传递的信息一般都是放在query string

    POST传递的信息,则是通过body

  2. 语义上的差别(习惯用法)

    GET请求一般是用于从服务器获取数据

    POST一般是用于给服务器提交数据

  3. 幂等:相同的输入,得到的结果也是确定的

    GET通常会被设计成幂等的

    POST不要求幂等

  4. 缓存:把请求的结果保存下来了,下次就不必请求了,直接取缓存的结果即可!(前提:幂等!!结果确定且唯一)

    GET可以被缓存的

    POST则一般不能被缓存

    网络上的有些说法,有待商讨…………

  5. GET请求传输的数据存在上限

    如:上限的版本:1KB,2KB,1024KB等,实际上rfc标准文档中,对于HTTP GET请求的长度上限明确说明:没有规定!

    只不能有些上古时期的浏览器/服务器,实现的时候搞了上限!

  6. POST比GET更安全

    依据就是:如果使用GET请求进行登录,此时用户名,密码可以通过query string来传递,就会出现在地址栏中,很容易被别人看到!

    安全:指的是:如果黑客获取到你的数据,你的敏感信息不会泄露,安全核心要素是:加密

认识header(请求报头)——》一堆键值对!

每一行是一个键值对,键和值之间使用的是:(冒号分割),这些键值对都是HTTP事先定义好的,有特定的含义的!!

HOST    Host:edu.bitejiuyeke.com

大概描述了服务器所在的地址和端口

HOST这里的地址和端口,用来描述你最终要访问的目标

edu.bitejiuyeke.com这个内容大概率和URL中是一样的,也有一定的情况下是不同的!

Content-length  表示body中的数据长度(字节)

Content-type  表示请求的body中的数据格式

如果是GET请求,则没body,请求中没有这俩字段

如果是POST请求,则有body,请求中必须有这俩字段

User-Agent(简称UA):描述了浏览器和操作系统的版本!

现在User-Agent主要用来区分PC端和移动端

Referer:表示当前页面的“来源”(哪个页面跳转的?)

如果直接通过地址栏输入地址,或者直接点击收藏夹……都没有Referer

Cookie:非常重要的header属性

本质是浏览器给网页提供的本地存储数据的机制

网页,默认是不允许访问你计算机硬盘的(保证安全),cookie相当于浏览器对于访问硬盘做出了明确的限制!cookie就是通过键值对的方式来组织数据的!

注意:cookie中具体存啥内容,也就是程序员自定义的部分!则数据的具体含义,只能开发整个程序员才能知道!

关于cookie的各种疑问??

  1. Cookie从哪里来??

    cookie在的数据来自于服务器,服务器会通过HTTP响应的报头部分(Set—Cookie字段)

    服务器来决定浏览器的Cookie要存什么??

  2. Cookie是在哪里存的??

    可以认为是存在与浏览器中,存在于硬盘的!!

    Cookie存的时候,是按照浏览器+域名维度来进行分组的,不同浏览器各自存各自的cookie,同一个浏览器的不同域名对应不同的cookie

  3. Cookie要到哪里去??

    回到服务器里

因此Cookie就是浏览器持久化存储数据的一种机制!!


请求正文:body

  1. spplication/x—www—form—urlencoded
    抓取“码云上传头像请求”
  2. multipart/form—data
    抓取山大教务系统的“上传简历功能”
  3. application/json
    抓取“山大教务系统的登录页面”

你可能感兴趣的:(java要笑着学,操作系统哪些事?,http,网络协议,网络)