HTTP(2)~
一、请求方法
方法,就是HPPT这次请求,要进行的一个动作,每种方法都有其对应的特点,接下来主要介绍GET、POST、PUT、DELETE
- GET方法
通常情况下,是没有正文的(HTTP协议就是在TCP的基础上,构造出特定的字符串写到TCP socket中的),GET是获取资源的,那么到底获取哪个资源呢?
是通过URL路径和query string,下面抓个包举例
- POST方法
通常情况下,是有正文的,并且在登录和上传文件时特别容易出现POST,下面抓个包举例
- PUT方法
通常情况下,是有正文的,有幂等建议,一般用于更新,其中占比很少很少,就不抓包了 - DEDLETE方法
通常情况下,是没有正文的,一般用于删除,其中占比很少很少,就不抓包了
二、GET和POST的区别
- 其实没有本质区别,能用GET的地方也能用POST,能用POST的地方也能用GET,但在使用习惯上存在一定区别
- GET通常表示获取数据,POST通常表示提交数据
- GET通常把给服务器传递的数据放到query string中,POST通常放在body中
以下有几种错误/不准确的说法:
- GET请求一般实现成幂等,POST请求没有幂等要求
幂等:请求重复产生之后,结果是明确的,就可以认为是幂等的。若结果是幂等的,就可以做缓存了
请求相同,都是GET,但是实际上网站的内容,是不同的 - GET请求不安全,POST请求安全
GET实现登录是将用户名和密码填在URL的query string中,会显示在地址栏中
POST实现登录,用户名和密码在body中,不会出现在页面上
安全的关键在于加密 - GET单次请求传输的数据量较小,POST单次传输的数据量较大
IE浏览器对URL长度有限制,但是IE浏览器已经灭亡好多年了,现在的URL可以很长 - 针对GET请求只能传输文本数据,POST可以传输文本数据和二进制数据
二进制数据,可以通过URLencode/base64转为文本,通过GET的URL传输
三、请求头
-
Host
host通常把域名中的IP和端口号列出来 -
Content-Length
Content-Length表示请求体中数据的字节长度,可能在请求头也可能在响应头中 -
Content-Type
Content-Type: application/json,表示请求体中数据的内容格式,常见取值有:text/html、text/css、appliciation/javascipt、appliciation/json、image/jpg、image/png、text/plain对于浏览器来说,如果是html,就按html的规则解析,渲染网页的骨架,如果是css,就按照css的规则解析,渲染成网页的样式(颜色、大小、位置、字体…),如果是js,就执行js中的逻辑,如果是json,浏览器不会自行处理,由浏览器中的json代码处理,如果是图片,就按照图片的格式展示
-
User-Agent
User-Agent 表示客户端的类型、操作系统、浏览器版本等信息 -
Referer
Referer包含了请求来源的 URL(即用户从哪个页面链接过来的),与浏览器的前进和后退无关,并且是发送给服务器的 -
Cookie
Cookie是浏览器这端,本地存储的一种机制(Cookie能保存用户的登录状态)
有啥用:浏览器给网页提供的本地存储数据的方案
从哪来:服务器返回的
怎么存:按照字符串(键值对)方式存储
到哪去:本地存储之后,后续访问同一个域名的网站,就会把Cookie中的内容通过请求报头,传输给服务器
四、状态码
- 1xx:信息响应
表示请求已被接收,继续处理。这些状态码通常是临时的 - 2xx:成功
表示请求已成功接收、理解和处理,常见200 - 3xx:重定向
表示客户端需要采取进一步的动作才能完成请求,通常是重定向到一个新的 URL,其中302(临时重定向)301(永久重定向) - 4xx:客户端错误
表示客户端发送的请求包含语法错误或服务器无法处理,其中404(访问资源不在服务器上)403(拒绝访问)405(服务器不支持此方法) - 5xx:服务器错误
表示服务器在处理一个有效请求时发生了内部错误,其中500(服务器内部错误)504(服务器网关超时)
五、构造HTTP请求
- 通过form表单构造(HTML)
- 通过ajax构造(JavaScript)
- 通过Java socket构造
public static void main(String[] args) throws IOException, InterruptedException {//创建一个HTTPClient对象//创建实例的时候,使用 工厂方法HttpClient httpClient = HttpClient.newHttpClient();//创建一个 HttpRequest,表示一个HTTP请求HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://www.baidu.com")).GET().header("User-Agent","xxxx").build();//发送请求,得到响应//send执行之后就会阻塞等待,直到响应返回回来HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.statusCode());System.out.println(response.headers());System.out.println(response.body());}
运行结果:
编写代码构造的Http请求,是测试的一种方案,还有不写代码的方案
接下来介绍postman
安装一路next,接下来启动postman
可以搭配fiddler使用
本期内容到此为止,喜欢的话请点个赞,谢谢观看!!!