当前位置: 首页 > news >正文

【JavaEE】-- HTTP

1. HTTP是什么?

HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。

应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上的应用程序进程之间如何相互通信的规则和标准。简单来说,应用层协议就是应用程序用来”对话”的语言和约定。
在这里插入图片描述

HTTP 协议的常见应用场景:

  1. 浏览器与服务器之间的交互(访问网站)。
  2. 手机与服务器之间的通信。
  3. 多个服务器之间进行通信。

2. HTTP协议的工作过程

HTTP是一个一问一答的过程。

在这里插入图片描述

3. HTTP协议格式

在这里插入图片描述

3.1 抓包工具的原理

在这里插入图片描述
抓包工具就相当于一个中间人,他对客户端的请求与服务器的响应都了解。

3.2 请求报文

在这里插入图片描述

请求行:
在这里插入图片描述
请求报头:
在这里插入图片描述
请求报头的每一行都用一组键值对表示,键与值用:隔开,键值对可以是HTTP规范中的内容,也可以是程序员自定义的内容。
空行:
是分割请求头与真实用户数据的部分。

Body(正文):
在这里插入图片描述
空行后面的内容都是Body.Body 允许为空字符串 .如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;

3.3 响应报文

在这里插入图片描述

在这里插入图片描述

4. HTTP请求

4.1 认识URL

4.1.1 URL基本格式

在这里插入图片描述

4.1.2 URL encode

URL 中的特殊字符都用URLEncode进行编码,每个byte用两个十六进制表示,每个byte前加一个%。

4.1.3 方法

在这里插入图片描述

1. GET方法

如何指定请求的方法?

  1. 当在浏览器的地址栏中输入一个URL并发起访问时,发送的全是GET请求。
  2. 通过代码(js)发送请求,可以指定GET,POST,PUT,DELETE。
  3. 通过HTML中的表单来指定方法名。
  4. 网站加载所需要的一些资源都是使用GET方法,比如网站中中的图片,样式,字体…

GET 请求的特点:
1.首行的第一部分为GET。
2. URL的query string 可以为空,也可以不为空。
3. header部分有若干个键值对结构。
4. body部分为空。

2. POST 方法
POST方法也是一种常见的方法,多用于提交用户输入的数据给服务器(例如登陆页面)。
在这里插入图片描述

POST请求的特点:

  1. 首行的第一部分为POST。
  2. URL的query String一般为空(也可以不为空)。
  3. header部分有若干个键值对结构。
  4. body部分一般不为空,body内的数据格式通过header中的Content-type指定。body的长度由header中的Content-length指定。

GET请求是以query String的方式提交参数的,POST的请求参数在Body部分。

经典面试题:谈谈GET和POST的区别?

  1. 语义不同:GET一般用于获取数据,POST一般用于提交数据。
  2. GET的body一般为空,需要传递的数据通过queryString传递的,POST的query string一般为空,需要传递的数据通过body传递。
  3. GET请求一般是幂等(每次访问同一个URL,得到的结构都相同)的,POST请求一般是不幂等的。
  4. GET可以被缓存在本地(下次再访问的时候就不用通过网络,而是从本地缓存中直接获取),POST不能被缓存(这一点也是承接幂等性的)。

网上有些博客说GET的URL长度(URL + query string)的长度是有限制的,比如说255个字符,1000个字符…,这种说法是完全错误的。HTTP协议的官方说明中表示对URL的长度不做限制,如果受限制了,也是浏览器或者应用程序自身做的限制。

4.2 认识请求报头

1. HOST
表示服务器的主机的地址和端口。

2. Content-Length
表示body中的数据长度,单位是字节。

POST的请求和响应中都有这个字段,只要body中有真实的数据就根据这个长度的值去读取。

3. Content-Type
表示请求的body中是数据格式,包含多种格式,目的是告诉浏览器要用什么格式来解析body中的数据。

常见的几种

  • application/x-www-form-urlencoded: form 表单提交的数据格式,此时body的格式形如:
title=test&content=hello
  • multipart/form-data: form表单提交的数据格式(在form标签中加上enctyped="multipart/form-data")通常用于提交图片/文件。此时的body格式形如:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="text" title 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="file"; filename="chrome.png" 
Content-Type: image/png 
PNG ... content of chrome.png ... 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA-- 
  • application/json数据为json格式,body格式形如:
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16"}

4. User-Agent(简称UA)
表示浏览器/操作系统的属性,形如:
在这里插入图片描述
5. Referer
表示页面是从哪个页面跳转过来的。

6. Cookie
作用:在用户的电脑(浏览器)中保存一些简单的数据。
在这里插入图片描述
在这里插入图片描述

向客户端浏览器写入cookie的两种方式:

  1. 为header中的set-cookie这个键设置具体的cookie值。
  2. 通过JS代码的方式去写。

如果使用其他用户(已登录的状态)的cookie访问网站,会出现什么样的情况?
最终是以cookie所对应的用户身份去访问网站,这就是cookie欺骗技术。

理解登陆过程:
在这里插入图片描述

5. 认识状态码

在这里插入图片描述
1. 200
表示访问成功。
表示客户端与服务器之间的请求与响应是没有问题的。

问:客户端进行登陆,输入一个错误的用户名和密码,服务器返回了一个登陆失败的错误提示,这种情况状态码是不是200?
答:是200。虽然输入的用户名和密码是正确的,但是服务器完成了用户名和密码的校验,并返回了一个适当的提示。状态码200表示的是请求与响应是正常的,和业务处理没有问题。

2. 404 Not Found
没有找到资源。

浏览器输入一个URL,目的就是为了访问对方服务器上的一个资源,如果这个URL标识的资源不存在,那么就会出现404.

3. 403 Forbidden
表示访问被拒绝,有的页面通常需要用户具有一定的权限(比如:登陆后才能访问),如果用户没有登陆页面直接访问,就容易见到403.

4. 405 Method Not Allowed
HTTP中支持GET、POST、PUT、DELETE等,但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)。

如果服务器的某个URL只支持GET方法访问,但用POST、PUT、DELETE方法进行访问的时候就是405.

5. 500 Internal Server Error
服务器出现了内部错误,一般是服务器的代码执行的过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码。

6. 302 Move temporarily
临时重定向:同一个入口根据不同的常见,转发到不同的页面,也可能不转发。

重定向:当前访问的URL并不是最终的地址,当前的请求会被转发,转发到最终的目的页(落地页)。

7. 301 Moved Permanently
永久重定向。当浏览器收到这种响应时,后续的请求都会被自动修改成新的地址。

只要访问这个页面全部无条件重定向,主要应用在新旧系统的迁移。

相关文章:

  • 各数据库字段类型统计
  • CentOS7下的集群化部署
  • C语言数据结构笔记5:Keil 编译器优化行为_malloc指针内存分配问题
  • F5 BIG IP show running config
  • MSSQL 订阅和发布主从库
  • Vim 删除命令完整学习笔记
  • Vim 光标移动命令总览
  • 【部署】使用华为云容器化部署Java项目指南
  • 统计学核心概念与现实应用精解(偏机器学习)
  • 第1章信息化知识归纳总结补充内容
  • Android 应用开发概述与环境搭建指南
  • 微信小程序抓包(burp + proxifier)
  • DBSyncer:一款开源的数据同步工具
  • 重会python爬虫学习----1
  • 【OSG学习笔记】Day 18: 碰撞检测与物理交互
  • 腾讯开源 AniPortrait:音频驱动的逼真肖像动画生成革命
  • LeetCode:912归并排序,洛谷:ACM风格
  • leetcode:42. 接雨水(秒变简单题)
  • 聊一聊 - 如何像开源项目一样,去设计一个组件
  • Linux系统编程-DAY12
  • wordpress用户可见/搜索引擎优化的常用方法
  • b2b网站推广方法/竞价专员是做什么的
  • 集美那里有教网站建设/东莞专业网站推广工具
  • 天元建设集团有限公司联系电话/整站优化和单词
  • 做网站所具备的的条件/外贸建站教程
  • 浙江省建设安全协会网站/北京优化互联网公司