【JavaEE】_HTTP请求报头header

目录

1. Host

2. Content-Length与Content-Type

2.1 Content-Length

2.2 Content-Type

3. User-Agent(UA)

4. Referer

5. Cookie


header的整体格式是“键值对”结构,一行是一个键值对,这些键值对都是HTTP定义好的、有特殊含义的。

常见的报头种类有:

1. Host

Host表示访问的服务器主机的地址与端口号(端口号可省略),或域名:

在此例中,首行中的URL与Host的信息是一致的,但也有可能不一致,

如在使用代理的情况下,Host的内容可能与URL的内容不一致;

2. Content-Length与Content-Type

只有当请求里有body部分才会有这两个属性,通常情况下GET请求没有body,POST请求有body

2.1 Content-Length

Content-Length描述的是body中数据的长度

注:前文TCP一文中已经描述过TCP传输过程中的粘包问题,原文链接如下:

【JavaEE】_传输层协议UDP与TCP-CSDN博客

HTTP在传输层是基于TCP实现的,当使用同一个TCP链接传输多个HTTP数据包时就会使得多个HTTP数据包在TCP接收缓冲区中挨在一起,接收方解析是需要明确HTTP数据包之间的边界:

对于GET(没有body)的请求,直接使用空行作为分隔符进行区分;

对于POST(有body)的请求,就需要结合空行和Content-Length进行区分

2.2 Content-Type

Content-Type描述的是body中数据的格式

在请求的body部分中可以选择的方式是非常多的,

请求中常见的格式有:json,form表单,form-data等格式

如json格式:

响应中常见的格式有:html,css,js,json,图片等等;

如html格式:

再如css格式:

再如js格式:

注:对于提交给服务器不同Content-Type的请求,服务器处理数据的逻辑是不同的;

同理,服务器返回给浏览器的数据,也需要设置合适的Content-Type,浏览器也会根据不同的Content-Type做出不同的处理;

3. User-Agent(UA)

以访问QQ邮箱网页版为例,请求如下:

UA描述了当前访问因特网的设备情况:包括操作系统的版本浏览器的版本

注:早期设置UA是为了区别新旧版本浏览器从而对不同版本的浏览器设置不同的响应格式,以保证新旧版本浏览器都能得到兼容。

而当今的浏览器之间的差距很小,此时UA的作用主要是用于区分PC端或移动端,一般这样的区别只是为了进行统计,而不会返回不同版本的页面,现在的前端开发有“响应式网页”的编程技术,以实现同一个html兼容不同的设备;

4. Referer

Referer用于描述当前页面是从哪个页面跳转来的

如果直接在地址栏输入URL或点击收藏夹中的按钮,这种请求都是没有Referer的

比如访问sogou.com后,搜索CSS,抓包请求如下:

5. Cookie

Cookie可以认为是浏览器在本地存储数据的机制

1. 浏览器的数据来自于服务器,服务器这边管理了一个网站的核心数据,但是在程序运行过程中也会有需要在浏览器这边存储一些数据,如上次登录时间、上次访问时间、用户身份信息、累计访问次数等临时性的数据。Cookie最终会返回给服务器,后续再请求这个服务器时,就会把Cookie中的内容自动带入到请求中,发送给服务器,服务器通过Cookie的内容进行一些逻辑的处理。

2. 浏览器为了考虑安全性,禁止网页直接访问用户的电脑文件系统网页代码无法直接生成一个硬盘的文件来存储数据,故而直接将数据存储到本地文件中是不可行的。

3. Cookie其实也是按照硬盘文件的方式保存的,但是浏览器对操作文件进行了封装,网页只能往Cookie中存储键值对(简单的字符串)

4. Cookie往往是从服务器返回的,或是页面自己生成的数据,Cookie是存储在浏览器所在的主机的硬盘上的,并且是按照域名为维度进行存储的,每个域名下可以存储各自的Cookie,彼此之间互不影响;

5. Cookie是按照键值对形式组织的,键与值之间用 ; 分隔,且键值对也是程序员自定义的;

6. 查看浏览器Cookie的方法:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/392322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode刷题笔记】27. 移除元素

原题链接 Leetcode 27. 移除元素 题目 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。…

算法练习-赎金信(思路+流程图+代码)

难度参考 难度:中等 分类:哈希表 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记,旨…

C#,整数转为短字符串(Short string)的加解密算法与源代码

1 整数转为短字符串的应用 网站生成的动态 URL 往往以内容序列号id为标识与参数,比如: http://www.jerry.com/tom.aspx?id1 使用 Web Rewrite,可以实现网页静态化,称为: http://www.jerry.com/content/1.html 对…

FlashMeeting(基于FFmpeg+openCV)视频语音通讯系统

Web端体验地址:https://download.csdn.net/download/XiBuQiuChong/88805337 客户端下载地址:https://download.csdn.net/download/XiBuQiuChong/88805337 FlashMeeting(基于FFmpegopenCV)是一整套先进的以FFmpegopenCV技术为基础的视频语音通讯系统。利…

数据库设计、JDBC、数据库连接池

数据库设计 数据库设计概念 数据库设计就是根据业务 系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。建立数据库中的表结构以及表与表之间的关联关系的过程。有哪些表?表里有哪些字段?表和表之间有什么关系? 数据库设计的步骤…

Java并发基础:ConcurrentSkipListSet全面解析!

内容概要 ConcurrentSkipListSet类在多线程环境下,它能够轻松应对大量的插入、删除和查找操作,同时保持数据的完整性和一致性,其内部基于跳表数据结构的实现,确保了即使在处理大规模数据时,也能具有出色的性能表现。 …

基于微信小程序的健身房私教预约系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

类的构造方法

在类中,出成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。每个类实例化一个对象时,类都会自动调用构造方法。 构造方法的特点: 构…

文件上传漏洞--Upload-labs--Pass01--前端绕过

一、前端绕过原理 通俗解释,我们将写有恶意代码的php后缀文件上传到网页,网页中的javascript代码会先对文件的后缀名进行检测,若检测到上传文件的后缀名为非法,则会进行alert警告。若想上传php后缀的文件,就要想办法对…

Acwing---877. 扩展欧几里得算法

扩展欧几里得算法 1.题目2.基本思想3.代码实现 1.题目 给定 n n n 对正整数 a i ai ai, b i bi bi,对于每对数,求出一组 x i xi xi, y i yi yi,使其满足 a i x i b i y i g c d ( a i , b i ) aixibiyigcd(ai,bi) aixibiyigcd(ai,bi)…

K8s进阶之路-安装部署K8s

参考:(部署过程参考的下面红色字体文档链接就可以,步骤很详细,重点部分在下面做了标注) 安装部署K8S集群文档: 使用kubeadm方式搭建K8S集群 GitBook 本机: master:10.0.0.13 maste…

pytorch 实现线性回归(深度学习)

一 查看原始函数 初始化 %matplotlib inline import random import torch from d2l import torch as d2l 1.1 生成原始数据 def synthetic_data(w, b, num_examples):x torch.normal(0, 1, (num_examples, len(w)))y torch.matmul(x, w) bprint(x:, x)print(y:, y)y tor…

JavaWeb-JDBC-API详解

一、JDBC介绍 二、JDBC 快速入门 package com.itheima.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class JDCBDemo {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("co…

django中事务和锁

目录 一:事务(Transactions) 二:锁 在Django中,事务和锁是数据库操作中的两个重要概念,它们用于确保数据的完整性和一致性。下面我将分别解释这两个概念在Django中的应用。 一:事务&#xff…

Code Composer Studio (CCS) - Breakpoint (断点)

Code Composer Studio [CCS] - Breakpoint [断点] 1. BreakpointReferences 1. Breakpoint 选中断点右键 -> Breakpoint Properties… Skip Count:跳过断点总数,在断点执行之前设置总数 Current Count:当前跳过断电累计值 References […

Ubuntu学习笔记-Ubuntu搭建禅道开源版及基本使用

文章目录 概述一、Ubuntu中安装1.1 复制下载安装包路径1.2 将安装包解压到ubuntu中1.3 启动服务1.4 设置开机自启动 二、禅道服务基本操作2.1 启动,停止,重启,查看服务状态2.2 开放端口2.3 访问和登录禅道 卜相机关 卜三命、相万生&#xff0…

第13章 网络 Page738~741 13.8.3 TCP/UDP简述

libcurl是C语言写成的网络编程工具库,asio是C写的网络编程的基础类型库 libcurl只用于客户端,asio既可以写客户端,也可以写服务端 libcurl实现了HTTP\FTP等应用层协议,但asio却只实现了传输层TCP/UDP等协议。 在学习http时介绍…

CSS概述 | CSS的引入方式 | 选择器

文章目录 1.CSS概述2.CSS的引入方式2.1.内部样式表2.2.行内样式表2.3.外部样式表 3.选择器 1.CSS概述 CSS,全称Cascading Style Sheets(层叠样式表),是一种用来设置HTML(或XML等)文档样式的语言。CSS的主要…

Code Composer Studio (CCS) - Current and Local Revision

Code Composer Studio [CCS] - Current and Local Revision References 鼠标放在文件内的任意位置,鼠标右键 -> Compare With -> Local History -> Revision Time. References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

vue-路由(六)

阅读文章你可以收获什么? 1 明白什么是单页应用 2 知道vue中的路由是什么 3 知道如何使用vueRouter这个路由插件 4 知道如何如何封装路由组件 5 知道vue中的声明式导航router-link的用法 6 知道vue中的编程式导航的使用 7 知道声明式导航和编程式导航式如何传…