目录
前置
1.网络划分
1)局域网
2)广域网
2.IP地址和端口号
1)IP地址
2)端口号
3.网络通信
一,概念
1.HTTP
2.二进制数据和文本
二,抓包
1.网络抓包
2.URL(统一资源定位器)
(1)https(协议)
(2)www.baidu.com
(3)端口号
(4)带层次的资源路径
(5)查询字符串:querystring
注意:
URL 中的可省略部分
三, http协议格式
1)首行
2)header头
3)空行
4)body
四,请求方法
1)概念
2)GET
3)POST
4)其他方法
5)url长度问题
6) GET和POST的区别
5.header头
1)Host
2)Content-Length
3)Content-Type
4)User-Agent(UA)
5)Referer
6)Cookie(请求头)
7)Set-Cookie(响应头)
8)Session
9)补充(关于Session和Cookie的时间)
五,HTTP响应状态码
1.状态码
2.状态码(200)
3.状态码(301)
4.状态码(302)
5.状态码(304)
6.状态码(307)
7.状态码(403)
8.状态码(404)
9.状态码(405)
10.状态码(500)
11.状态码(504)
六,Ajax
1.form构造http请求
2.Ajax构造get方法
3.Ajax构造post方法
4.Ajax封装
局域网,简称LAN,是指在某一区域内有多台计算机互联组成的计算机组,这些主机就可以互相通信,互相访问对方提供的资源
广域网,简称WAN,大家公认的开放的网络,连接上的主机都能访问
标识网络上某个主机的网络地址
格式:四个部分,每个部分之间用 . 分隔,每个部分0-255(8个比特位,一个字节)
本机IP:127.0.0.1
标识网络通信中,某个主机的某个进程
结合IP和port就可以知道要获取,网络上哪个主机的哪个进程
通俗点讲:IP地址就像是一个街道,让你直到具体在哪个街道(哪个主机),然而,端口号就像是门牌号,告诉你是哪家(哪个进程)
通过网络,获取网络上某个主机的某个进程(资源)
HTTP协议也称“超文本传输协议”,是一种应用非常广泛的应用层协议
文本是带编码的二进制数据,两者其实是可以相互转化的,http是属于文本格式,内部可以包含一些二进制数据
1)在Java中,String有getByte("编码")就可以将字符串转化为二进制数据
2)new String(字节数组,"编码"),就可以将二进制数据转化为字符串
网络通信时,抓取传输的请求和相应的数据包
1)开发者工具:没有http协议原生格式的内容
2)fiddler:可以看到http原生格式的数据包
标识网络中,某个资源的路径(俗称网址),它具有全球唯一性,正确的URL才可以打开此网页
https://www.baidu.com/personInf/student?userId=10000&classId=100
指定使用的传输协议,最常用的是HTTP协议,它也是WWW中应用最广的协议。
服务器路径,可以使用IP,也可以使用域名
本机ip:127.0.0.1
本机域名:localhost
浏览器不输入端口号:http协议默认使用80端口号,https默认使用443端口
标识在某个服务器中,具体某个资源的路径,如果没有输入资源路径,就是访问/
起的作用就是获取某个资源下的不同的数据
格式:键值对格式,键=值,多个键值对之间用&间隔
key1=value1&key2=value2
header家属,一直读取到空行,就可以解析到header
提问:为什么要有空行?空行存在的作用/意义?
因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者
是 "报头和正文之间的分隔符".HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题"
请求正文/响应正文:请求携带的数据
标识具体是以什么方式来操作资源:获取/保存/修改/删除等(操作资源的类型)
浏览器和web服务器可以配置url的最大长度,如果没有配置,就是用默认的长度
常见问题:
实际 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现. 在浏览器端, 不同的浏览器最大长
度是不同的, 但是现代浏览器支持的长度一般都很长; 在服务器端, 一般这个长度是可以配置的
(1)语义上:GET是获取资源//数据,POST是提交资源或数据(可以打破)
(2)存放的位置:GET放在queryString上,POST放在body(可以打破)
(3)GET具有幂等性,POST不具有幂等性(如果多次请求到的结果一样,就是具有幂等性)
(4)GET可以缓存,POST不可以缓存
标识http数据包属性
常用的键:
标识服务器地址(域名/IP + port)
标识body的长度,对方才能根据这个长度来解析
常见的格式
a)application/x-www-form-urlencoded: form 表单提交的数据格式.和queryString格式一样,这里的字段值,只能是简单的数据类型
title=test&content=hello
b)multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" . 通常用于提交图片/视频(也可以是简单地数据类型)
c)image/jepg:指定具体的一个文件类型
d)application/json:请求和响应都常用,和js对象的格式差不多(只是键也需要加双引号)
{
"username":"张三",
"password":"123456",
"age":18
}
请求:一般就是输入一些内容后,提交数据到服务端
响应:一般就是服务端返回一些数据,客户端js代码获取响应数据,然后填充到html中
也就是常说的浏览器表示,比如pc,手机等
标识当前这次的http请求是从那个页面点击或者跳转过来的
Session:
Cookie:
三位数字构成,标识服务端对客户端这次请求的处理结果,HTTP响应报文,都是服务端返回的,状态码也可以由程序设置
301:Moved Permanently:永久重定向
302:Moved temporarily:临时重定向(和301看起来效果一样)
304:Not Found:标识之前已经访问过的资源
307也是临时重定向,和302的区别是:
307要求客户端不改变原先的请求方法,对在Location头部中规定的uri进行访问,对于,302,很多客户端的实现是,直接使用get方式访问重定向地址
403:Forbidden:禁止访问,一般有两种情况
404:Not Found:标识请求的url路径没有对应的资源
url的格式:[协议名]//:[ip或域名]:[port]/[带层次的路径]?[查询字符串]
找不到主机,或者找不到进程(port),找不到资源路径
405:Method Not Allowed:方法不支持
服务端提供的方法是一个或者多个,请求的方法没在服务提供的方法范围内,返回405
500:Internal Server Error:服务器内部错误
一般是服务器内部代码有问题,出现异常等,如果出现,一定要检查后端的堆栈信息,定位后端的代码问题
504:Gateway Timeout:请求在服务端处理超时