HTTP、HTTPS、请求、返回、HTTP响应码、cookie、编码

article/2025/8/31 12:21:15

目录

一、https&http

HTTP

HTTPS

区别

二、request请求数据包格式

请求行

请求头

空行

请求体

三、response返回数据包数据格式

四、HTTP响应码:

五、保持HTTP连接状态--Cookie和会话

1. 会话

2. Cookies

(1)cookie的传送过程

(2)setcookie响应头字段

六、web应用程序编码

ASCII编码

URL编码

Unicode编码

HTML编码

Base64编码


一、https&http

HTTP

HTTP是“超文本传输协议”的首字母缩写。HTTP是万维网使用的基础协议,它定义了如何在Web服务器,网站,浏览器等之间传输和格式化消息。

HTTP协议运行在TCP之上,所传输内容是明文,是不安全的。

原理:1.客户端与服务器建立TCP连接(三次握手)

2.连接成功后,客户端发送请求给服务器

3.服务器接收到客户端发送的请求后作出相应,并将响应信息发送给客户端

4.服务器发送完响应信息后,就会断开TCP连接,因此HTTP是无状态的,下一次访问 的时候不会知道之前访问的过程

5.客户端接收到响应信息,浏览器进行解析,将html文件解析后呈现一个网页在浏览 器上

HTTPS

HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所传输内容都是经过加密的,有效地防止运营商劫持。

原理:

 

区别

HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。

HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,HTTP:80,HTTPS:443

HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

 

二、request请求数据包格式

请求行

组成:请求方法、请求URL,HTTP版本。例:GET/index.html HTTP/1.1

Http规划了8种请求方法:

GET:请求获取URL页面信息及资源,返回实体主题

HEAD:类似于get请求,返回的响应中没有具体内容,用于获取报头

POST:向指定资源提交数据进行处理请求

PUT:从客户端向服务器传送的数据取代指定的文档的内容

DELETE:请求服务器删除指定页面

OPTIONS:允许客户查看服务器的性能

TRACE:回显服务器收到的请求,用于测试和诊断

CONNECT:已文档化,但未实现的一个方法

请求头

一些键值对,浏览器和web服务器之间都可以发送,特定的某种含义

HOST:主机或域名地址

Host:对应网址URL中的web名称和端口号

Accept:浏览器或客户可以接受的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式

User_Agent:客户浏览器名称

Connection:告诉服务器是否可以维持固定的HTTP连接http是无连接的,HTTP/1.1使用Keep-                               Alive为默认值,这样当浏览器需要多个文件时(比如一个HTML文件和相关的图 形文件),不需要每次都连接

Accept-Langeuage::指出浏览器可以接受是语言种类

cookie:浏览器用这个属性向服务器发送Cookie,它可以记载和服务器相关的用户信息,也 可以用来实现会话功能

Referer:产生请求的网页URL

Accept-Charset:指出浏览器可以接受的字符编码

Accept-Encoding:指出浏览器可以接受的编码格式

空行

请求头和请求体之间用一个空行隔开

最后一个请求头标后是空行,发送回车符和推行,通知服务器以下不再有图标

请求体

要发送的数据(一般post提交会使用)例:user=123&pass=123

最常用Content-Type和content-length头标

三、response返回数据包数据格式

组成:状态行、响应头标、空行、响应数据

状态行:协议版本、数字形态的状态代码和状态描述,个元素之间以空格分隔

响应头标:包含服务器类型、日期、长度、内容类型

空行:响应头和响应体之间用空行隔开

响应数据:浏览器将实体中的数据取出来,生成相应的页面

四、HTTP响应码:

1xx:信息,请求收到,继续处理

2xx:成功,行为被成功接受、理解和采纳

3xx:重定向,为了完成请求,必须进一步执行的动作

4xx:客户端错误

5xx:服务器错误

200:存在文件

403:存在文件夹

3xx:均可能存在

404:不存在文件及文件夹

500:均可能存在

五、保持HTTP连接状态--Cookie和会话

Http有个基本的特点:无状态。HTTP的无状态是指HTTP协议对事物处理是没有记忆的。我们向服务器发送请求后,服务解析处理完这一过程后,并不会记住这一过程,意味着我们如果要继续向服务请求的话需要重新上传前面已经上传的信息。

1. 会话

在Web中,会话对象用来存储特定用户会话所需的属性及配置信息。当一个新用户访问页面的时候,Web服务器会自动创建一个会话对象,用户在网站的不用Web页面之间跳转的时候,存储在会话对象中的变量不会消失,而是在整个用户会话中一直存在。当会话过期或者被放弃时,服务器才会终止该对话。

2. Cookies

Cookies指网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。

cookie这个特性是用于解决HTTP协议“无状态”这个特点的。

(1)cookie的传送过程

1)在浏览器访问Web服务器某个资源的时候,Web服务器在响应报文头附带传送给浏览器一段数据(就是cookie),而且每个客户端每个浏览器的数据可以是各不相同的。

2)一旦浏览器保存了某个Cookie,那么以后每次访问服务器时,都会在HTTP请求头中将这个Cookie回传给服务器

3)Web服务器怎么给客户端发Cookie的呢?服务器通过在HTTP响应头中增加Set-Cookie:字段,而浏览器则通过HTTP请求头增加Cookie字段回传

(2)setcookie响应头字段

Setcookie()函数向客户端发送一个HTTP cookie。

cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。

cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。

必须在任何其他输出发送前对 cookie 进行赋值。如果成功,则该函数返回 true,否则返回 false。

语法:setcookie(name,value,expire,path,domain,secure)

参数

name

必选,规定了cookie的名称

value

必选,规定了cookie的值

expire

可选,规定了有效期

path

可选,规定了服务路径

domain

可选,规定了域名

secure

可选,规定是否通过安全的 HTTPS 连接来传输 cookie

可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值。

在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。如果你不需要这样,可以使用 setrawcookie() 代替。

设置并发送cookie:<?php  

$value=”my  cookie  value”;

Setcookie(“TestCookie”,$value);

?>

检索cookie值:<?php

// 输出个别的 cookie

echo $_COOKIE["TestCookie"];

echo $HTTP_COOKIE_VARS["TestCookie"];

// 输出所有 cookie

print_r($_COOKIE);

?>

(3)Cookie请求头字段

Cookie请求头字段中的每个Cookie之间用逗号或分号隔开。

属性:name,value,version,path,domain,port等。

在这些属性名之前要增加$字符作为前缀。Version只能出现一次,且需要位于Cookie请求头字段设置值得最前面,但设置Path、Domain、Port等属性时,需要位于“名称=值”设置之后。

Eg:Cookie:Version=1;Course=Java;Version=1;Course=Java;Path=/hello/lesson;Course=vc;$Path=/hello

六、web应用程序编码

ASCII编码

到目前为止ASCII编码共定义了128个字符。

常见ASCII码的大小规则:0~9<A~Z<a~z。

几个常见字母的ASCII码大小: “0”为 48“、A”为65、“a”为97

一般汉字是由两个ASCII码表示的

URL编码

URL只能通过使用ASCII字符集(十六进制)将特殊字符在Web浏览器和服务器上显示。 如果URL包含ASCII集之外的字符,则必须转换为ASCII字符才可显示。

在URL编码中,非ASCII字符将会被替换为“%”,后跟十六进制数字的格式。

URL编码通常就会用加号(+)或%20替换空格。

URL编码就是把URL中的一些非ASCII码字符编码,转化为ASCII的字符,让服务器能更方便地识别出URL。

Unicode编码

unicode编码我们又可以叫做是统一码。在计算机科学领域中是一中业界标准,unicode编码还包含了字符集、编码方案等等。unicode编码给每个字符提供了一个唯一的数字。unicode编码的出现是为了更好的解决传统字符在编码产生的问题。并且unicode编码给每种语言中的每个字符设定了统一并且唯一的二进制编码。

编码方式:unicode是一种国际组织制定能容纳所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

ASCII编码是1个字节,而Unicode编码通常是2个字节。

UTF-8 是使用最广泛的一种 Unicode 编码方式,它是可以变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。UTF-8 的编码规则:(1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。(2)对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。

HTML编码

HTml编码用于处理问题字符并将其安全并入HTML文档的方案。HTML编码定义了大量Html实体来表示特殊的字面量字符。

在 HTML 中,某些字符是预留的,例如在 HTML 中不能使用小于号<和大于号>,这是因为浏览器会误认为它们是标签。

实体名称对大小写敏感!

    空格

"   "

'   '

&   &

<      <

>     >

Base64编码

Base64 是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码就是从二进制编码转化为64字符编码的具体过程。

如何编码的:

1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;

2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);

3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;

4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;


http://chatgpt.dhexx.cn/article/AQCP0J2O.shtml

相关文章

常见HTTP响应状态码

状态代码有三位数字组成&#xff0c;第一个数字定义了响应的类别&#xff0c;且有五种可能取值&#xff1a; 1xx&#xff1a;指示信息--表示请求已接收&#xff0c;继续处理 2xx&#xff1a;成功--表示请求已被成功接收、理解、接受 3xx&#xff1a;重定向--信息不完整需要进一…

常用HTTP响应状态码

web应用中常用的响应状态码: 状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx:指示信息–表示请求已接收,继续处理 2xx:成功–表示请求已被成功接收、理解、接受 3xx:重定向–信息不完整需要进一步补充 4xx:客户端错误–请求有语法错误或请…

HTTP响应(作用,格式,响应码的组成和分类,常见响应状态码)

目录 一&#xff0c;HTTP响应的作用 二&#xff0c;HTTP响应的整体格式 三&#xff0c;HTTP响应状态码 四&#xff0c;HTTP响应状态码的组成和分类 五&#xff0c;HTTP常见响应状态码 2**成功响应相关 3**重定向相关 4**客户端响应相关 5**服务端响应相关 六&#xf…

常用HTTP协议响应码

HTTP响应码&#xff0c;也称http状态码(HTTP Status Code)&#xff0c;反映了web服务器处理HTTP请求状态&#xff0c;每一个响应码都代表了一种服务端反馈的响应状态&#xff0c;标识了本次请求是否成功。我们应该了解常见的响应码代表的状态&#xff0c;通过响应码能够对错误进…

HTTP响应码,大详解

1.HTTP的正确响应码 一、1XX &#xff08;1开头&#xff09; 请求已经被接收到了&#xff0c;需要进一步处理才能完成&#xff0c;HTTP1.0不支持&#xff1b; 100 Continue 上传大文件前先让服务器准备&#xff0c;由客户端发起请求中携带Except&#xff1a;100-continue 头…

HTTP 响应码大全

HTTP 状态码(HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC2616 规范定义的&#xff0c;并得到 RFC2518、RFC2817、RFC2295、RFC2774 与 RFC4918 等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的…

【从零开始学架构-李运华】06|复杂地来源:可扩展性

可扩展性指系统为了应对将来需求的变化而提供的一种扩展能力&#xff0c;新需求出现时系统不需要或者仅需要少量修改就可以支持&#xff0c;无需整个系统重构或者重建。 面向对象就是为了解决可扩展性&#xff0c;后来的设计模式更是将可扩展性做到了极致。 具备良好扩展性的两…

【从零开始学架构-李运华】07|低成本、安全、规模

低成本 高性能和高可用架构通常都是增加服务器来满足要求&#xff0c;但低成本正相反&#xff0c;当然也不是首要目标。 往往“创新”才能达到低成本的目标&#xff01;&#xff01; 技术创新&#xff1a; NoSQL&#xff08;Memcache、Redis&#xff09;等是为了解决关系型数…

阿里P9李运华:想成为架构师,你必须知道CAP理论

CAP定理&#xff08;CAP theorem&#xff09;又被称作布鲁尔定理&#xff08;Brewers theorem&#xff09;&#xff0c;是加州大学伯克利分校的计算机科学家埃里克布鲁尔&#xff08;Eric Brewer&#xff09;在2000年的ACM PODC上提出的一个猜想。2002年&#xff0c;麻省理工学…

笔记——专访李运华:程序员如何在技术上提升自己

原文链接&#xff1a;http://www.csdn.net/article/2014-10-20/2822190 摘要&#xff1a; 专访李运华&#xff1a;程序员如何在技术上提升自己 方法&#xff1a; 1 写博客 2 链式学习&#xff1a;从一个点不断学习相关的知识 3 闭环学习&#xff1a;了解整个功能或业务的全流…

【从零开始学架构-李运华】09|架构设计原则案例

【淘宝】 个人网站 > Oracle/支付宝/旺旺 > Java时代1.0 > Java时代2.0 > Java时代3.0 > 分布式时代 买一个快速可用、快速开发的系统。 MySQL升级Oracle&#xff0c;买性能 3. PHP切换Java&#xff0c;重构网站 4. 增加各种组件框架优化性能控制成本 5. 去I…

【从零开始学架构-李运华】05|复杂度来源:高可用

高可用的定义 系统无中断地执行其功能的能力&#xff0c;代表系统的可用性成都&#xff0c;是进行系统设计时的准则之一。 虽然方案五花八门但本质就是“冗余”&#xff01; 与高性能的区别 高性能增加机器在于扩展处理性能&#xff0c;高可用在于增加冗余单元防止中断。 计算…

【从零开始学架构-李运华】04|复杂度来源:高性能

复杂度的六个来源之一&#xff1a;高性能 运算性能迅猛发展、软件复杂度发展、硬件存储发展。 用来代替旧技术的新技术才会给软件系统带来复杂度&#xff0c;而用来淘汰旧技术的新技术则不用担心。 1.单台计算机 手工操作->批处理->进程->分时多进程->进程通信-&…

【从零开始学架构-李运华】03|架构设计的目的

架构设计的误区 系统不一定需要架构设计&#xff1b; 架构设计不一定能提升开发效率&#xff1b; 好的架构设计能促进业务发展&#xff1b; 不是所有系统都需要架构设计&#xff1b; 等等…… 架构设计的真正目的 为了解决软件复杂度带来的问题 如何下手架构设计&#xff1f;…

李运华《从零开始学架构》——架构设计三原则

课程链接 https://time.geekbang.org/column/intro/100006601?utm_sourcetime_web&utm_mediummenu&utm_termtimewebmenu 分割线 前面几期专栏&#xff0c;我跟你系统的聊了架构设计的主要目的是为了解决软件系统复杂度带来的问题&#xff0c;并分析了复杂度的来源…

专访李运华:程序员如何在技术上提升自己

摘要&#xff1a;社区之星第56期采访了UC的软件工程师李运华&#xff0c;他先后经历了电信行业和互联网行业。在本次采访中&#xff0c;李老师分享了他的职场经历、团队管理经验、程序员提升自己的方法和应具备的素养&#xff0c;以及谈了对面向对象和编程语言看法。 李运华&a…

阿里P9李运华:架构到底是指什么?

你好&#xff0c;我是李运华。 2018 年&#xff0c;我发布了《从 0 开始学架构》这门课程&#xff0c;分享了我之前在电信业务和移动互联网业务方面的经验和感悟。 后来&#xff0c;我转岗去了蚂蚁国际&#xff0c;从事更加复杂的支付业务。为什么说支付业务更加复杂&#xf…

Rust之fluid用法(fltk ui 设计器)

fl2rust 用法 $ cargo install fl2rust然后运行&#xff1a; $ fl2rust <fl file>.fl > <output file>.rs 要通过 cargo 实现自动化&#xff0c;我们可以通过将 fl2rust 添加到构建依赖项中来将其用作库&#xff1a; # Cargo.toml [dependencies] fltk &q…

FLTK学习笔记2-回调函数

FLTK学习笔记2-回调函数 回调函数为控件添加回调函数程序示例 回调函数 回调函数&#xff08;Callback&#xff09;简单说来就是一个以函数指针的方式被调用的函数。 考虑如下情况&#xff0c;我们编写了一个整数排序算法函数mySort&#xff1a; void mySort(std::vector<…

rust 使用fltk 的小问题

rust 使用fltk 的小问题 windowns下进行编译使用cargo build --release 打包出现以下问题 最近有需求写一个简单的桌面应用程序&#xff0c;正好使用rust来练练手&#xff0c;中间碰到一些问题&#xff0c;尤其fltk 打包有个cmd黑框就很恶心。只记录一些国内网络上资料较少的问…