http是无状态协议,即协议对于发送过的请求或响应都不做持久化处理(能更快的处理大量事务)
http/1.0:引入了cookie
http协议格式:(首行–头部–body)
请求访问某台HTTP服务上的/index.html页面资源post方法比get方法多了个主体信息
注意:头信息结束后,有一个空行,头信息和主题信息(如果有),需要这个空行作区分,即使没有主体信息,仍需要此空行
http请求
请求: 请求行–请求头(key:value)–空一行–请求体(发送的内容)
请求行:请求方法,请求路径(url),所用的协议及版本
请求方法:get、post、head、put、delete、track、options…
<====================>
首行:[方法] + [url] + [版本]Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔,遇到空行表示Header部分结束
Body: 空行后面的内容都是Body,Body允许为空字符串. 如果Body存在, 则在Header中会有一个ContentLength属性来标识Body的长度http响应
响应:状态行–响应头(key:value)–空一行–响应体
状态行:协议及版本–状态码–状态码描述
<====================>
首行:[版本号] + [状态码] + [状态码解释]
Header: 同http请求
Body: 同http请求,但是如果服务器返回了一个html页面, 那么html页面内容就是在body中.
请求头和响应头的数量都是动态的
浏览器能发送http协议,http协议不一定要浏览器来发送 http是一种协议,只要满足这种协议,什么工具都可以发送
HTTP协议方法:
head:和get基本一致,只是不返回内容,返回响应头信息
如只是确认一个内容(照片)还存在,不需要返回(照片的)内容,就用head
get和post请求方法的区别!!!
- get()请求数据只能放在url中,对于post的数据,可以放在url和请求体
- 由于url长度有限制,所以get方法请求数据不能太多,并且url只能传输ASCII字符,post无限制
- 从安全性方面讲,post可以存放请求数据在请求体,相对更安全
- 使用get方法可以收藏为书签,可以被缓存,也可以将参数保留在浏览器历史记录中,post不可以
- get方法的数据在url对所有人可见,post方法的数据不会显示在url中
HTTP状态码:
反应服务器的响应情况
http转发和重定向的区别?
本质区别:转发是服务器行为,重定向是客户端行为
重定向特点:两次请求,浏览器地址发生变化,可以访问自己web 之外的资源,传输的数据会丢失
请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失
HTTP常见的header:
- Content-Type: 数据类型(text/html等)—>消息体格式,告诉对方该使用什么方式解析(数据类型,指定消息体格式,要对端以响应的格式解析)
- text/html HTML格式
- image/gif GIF图片格式
- image/jpeg JPEG图片格式
- x-www-form-urlencoded:表单提交的默认方式,请求体数据格式和queryString一样
- application/json:消息体数据格式必须是json字符串
- Content-Length: Body的长度, 消息体长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
- User-Agent: 声明用户浏览器版本信息
- referer: 当前页面是从哪个页面跳转过来的
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能
前端:
- html 前端展示控件(页面内容)的资源文件
- javascript 前端的脚本语言,写代码完成功能
- css 前端样式文件