JavaEE HTTP

HTTP
(超文本传输协议)
使用浏览器访问网站

HTTP协议报文格式=>抓包工具fidder
我们访问一个网站用fidder查看可以发现
在这里插入图片描述
请求部分
在这里插入图片描述
首行:

GET https://www.sogou.com/suggnew/hotwords?v=1701070664705 HTTP/1.1

其中
GET:method(方法)
常见的方法

常用的有get post
GET : 从服务器获取xx
在这里插入图片描述
获取搜狗主页的请求
POST : 向服务器传输一个xxx 最常见的情况 (1) 登录 (2) 上传

!GET和PSOT最主要的区别!
GET是直接把一些自定义的数据放到query string中 body通常是空的
PSOT是直接把一些自定义的数据放到body中 query string通常是空的
本质上都是要传给服务器放哪里都没区别 放在url中用户能直接看到(收藏夹能收藏)body中则反之(收藏夹不能收藏)
所以post和get数据放哪里都可以 两者可以互相替代

网上有些资料,对于GET 和POST的区别,解释并不正确.
1.比较长的数据放到 body中(使用post)原因是GET请求中的url长度有限制具体长度上限(好几种说法,1KB, 2KB,10KB,64KB.…… 首先,RFC标准文档,明确说明了,对于URL的长度不做限制要求. 其次,早年间(20年前),当年的机器资源有限,当时的浏览器对于URL确实有限制.具体限制了多长,看不同的浏览器了.但是这是早期浏览器了
2.PSOT比GET更安全
安全指的是传输的数据不容易被黑客截获 或者被截获了 也不容易破解 PSOT只是把传输的数据让普通用户没法直接看到 不影响黑客截获 保证安全的关键是对传输敏感数据进行加密
3.GET 和PSOT语意不同
但是实践中不一定完全遵守 比如有的公司设计的接口都是PSOT
4.GET是幂等的 PSOT不是幂等的(幂等:给你相同的输入都是相同的输出就是幂等的 如果不同就是不幂等的)RFC分档建议设计的
5.GET请求可以被缓存 PSOT不能被缓存
有些操作可能比较耗时

URL(唯一资源定位符用来描述网路上的资源):https://www.sogou.com/suggnew/hotwords?v=1701070664705
在这里插入图片描述
出自于RFC标准文档
登录信息认证(现在基本不用了)

服务器地址:可以是域名也可以是IP地址

服务器端口号:用来区分应用程序 如果省略浏览器就会自动加上端口号
如果是http协议 自动添加就是80
如果是https协议 自动添加就是443

带层次的文件路径:访问服务器上的那个资源
也能省略 如果省略就是访问/ "/"就是根目录

查询字符串:访问资源的时候带上什么样的参数 对访问的资源进行的补充说明

片段标识符:不太常见 访问文档页面会有

url encode:query string(关键字)中可能会带有一些特殊符号 而这些特殊符号 可能在url中有一定的含义 就导致浏览器/服务器解析失败(+ : / ? & = #)
urlencode本质上就是转义字符
转换规则:转换的内容的二进制的每个字节 都是用十六进制 表示出来 然后每个字节前面都加上一个%(就像写代码不能用关键词作为变量名一样的道理)

版本号:HTTP/1.1

它们使用空格隔开

请求报头,也是键值对结构 每一行是一个键值对 键和值之间使用空格来分割
qurey string body中的键值对完全是程序员自定义的
header中的价值对主要是标准规定的

关键字作用
Host表示服务器主机接口地址和端口
Content-Length描述了body的长度(如果没有body这个字段没有,如果有就必须要有否则就是非法请求)解决粘包问题 因为HTTP基于TCP
Content-Type表示请求的body中的数据格式

请求中常见的取值:

  1. application/x-www-form-urlencoded
  2. multipart/form-data
  3. application/json

响应中常见的取值:

  1. text/html
  2. text/css
  3. application/javascript
  4. application/json
  5. image/png

User-Agent(UA)
在这里插入图片描述
显示了当前机器系统的版本 浏览器的版本(Chrome Safari) 现在UA主要用来区分PC端移动端

Referer
描述了当前页面从哪里来
如果是 直接通过浏览器输入url点击收藏夹打开网页 这个请求是不带referer 如果是点击某个网页的内容产生了跳转 就是带有referer

当我们在搜狗网页搜索 就会发现页面来自sogou浏览器
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
因为广告主投放广告是按照点击计费的(CPC)
这个Referer有助于可以用来统计用户使用那个浏览器来访问广告以此来计费

由于Referer是明文传输又能用其来获利那么就有可能被篡改导致利益损失
所以除了使用法律手段来维护之外 也要使用技术手段反制
数据明文传输不行 就要使用HTTPS进行传输 很多浏览器都是在2014年升级HTTPS的

Cookie
是浏览器本地存储数据的一种机制

当浏览器第一次访问服务器 此时对于服务器一无所知 浏览器上没有关于任何这个服务器相关的数据 访问之后服务器就会返回很多的数据html css js json 图片等等

此时 用户在网页操作过程中会出现很多临时性的数据例如b站的
清晰度选择在这里插入图片描述
有的临时数据会放到服务器存储(下次就可以直接获取了)
有的会放在浏览器存储但是下次访问就可以不是之前设置的选项
其中Cookie就是主要的保存机制例如勾选1080p高清就会在cookie中写入一个数据 "1080p高清=1"浏览器就会自动存储这个数据到硬盘后续再访问B站浏览器就能自动把数据读取出来放到http请求里面 然后B站就能知道当前用户是否选定的清晰度了

浏览器要保存数据 为什么要放到cookie中?直接放到硬盘写入一个文件不行吗?

这个是非常危险的行为如果让网页能够轻易的访问你的文件系统 就极有可能被中病毒把自己的电脑数据删除 所以为了保证安全
浏览器会对网页的功能做出限制 禁止直接访问硬盘 为了保证安全 同时又能存储数据 浏览器提供了Cookie功能

Cookie是按照键值对的方式来存储一些字符串的
这些键值对往往都是服务器返回来的浏览器把这些禁止对按照域名分类存储不同的网站的cookie都是独立的
例如:
在这里插入图片描述
在这里插入图片描述
一个网站cookie中会存储很多键值对往往会有一个很重要的键值对是用来表示用户的身份信息的标识当前请求是来自那个用户的
尤其是有些时候登陆了一个网站之后后续再访问中网站的其他页面都不必登录而且关了电脑第二天再访问仍然不用重新登录

首次登录网站 登录成功之后 就相当于 网站给了一个身份识别(sessionid) sessionId就会记录一些相关信息 每个用户都有自己的sessionid

cookie总结

  1. cookie从哪里来?
    cookie是从服务器返回给浏览器的
  2. cookie保存在哪里?
    cookie保存在浏览器上浏览器所在电脑的硬盘上每个域名都有自己的一组cookie
  3. cookie的内容是什么?
  4. cookie的内容到哪里去?
    后续在访问这个网站的各个页面 就都会在请求中带上cookie 服务器就可以进一步的知道客户端的详细情况了

在这里插入图片描述
键值对之间使用;分割 建和值之间使用=分割

响应部分在这里插入图片描述

响应部分同样有
1.首行
响应的首行和请求相比差异比较大
请求
在这里插入图片描述

响应
在这里插入图片描述
响应首行多了一个状态码(对这次响应的定性 成功或者失败)描述
200表示成功 计算机通常会使用数字来表示结果不同的数字表示不同的失败原因
状态码类似于 C的errno(错误码) java的异常功能就是把errno翻译成一个字符串

常见的http状态码
200成功
404访问的资源不存在
403访问的资源没有权限
502服务器挂了
302重定向(浏览器会自动跳转到其他的页面)

2.响应头
3.空行
4.正文

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>Web Struts</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.jsp</welcome-file> <welcome-file>default.htm</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>根据这个代码改进这个代码<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
最新发布
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值