你所不知道 ❌ URL

你所不知道的 URL

0.說明

第一幕

產品大叔有用戶反映帳戶不能綁定公衆號。
大叔:啊咧咧?怎麼可能,我看看?
大叔:恩?這也沒問題啊,魏蝦米。
大叔:仍是沒問題啊,挖叉類。
大叔:T T,話說產品姐姐是否是Java提供接口的時候,沒有對URL進行encodeURI
產品:啊咧咧?我問問看?javascript

第二幕

大叔小二你給我過來!
小二:啊咧咧?怎麼了大叔
大叔:知道在URL中的+有時候會變成什麼嗎?
小二:啊咧咧?不是+嗎?
大叔:知道在URL中的空格有時候會變成什麼嗎?
小二:啊咧咧?不是空格嗎?
大叔:還不趕快本身去查查看!別也成了挖坑型選手。php

1.殺手兄弟 - 加號與空格

0.說明

維基百科中關於百分號編碼中有段說明。java

當HTML表單中的數據被提交時,表單的域名與值被編碼並經過HTTP的GET或者POST方法甚至更古遠的email把請求發送給服務器。這裏的編碼方法採用了一個很是早期的通用的URI百分號編碼方法,而且有不少小的修改如新行規範化以及 把空格符的編碼"%20"替換爲"+" . 按這套方法編碼的數據的MIME類型是application/x-www-form-urlencoded, 當前仍用於(雖然很是過期了)HTML與XForms規範中. 此外,CGI規範包括了web服務器如何解碼這類數據、利用這類數據的內容。

1.GET - 簡單的在瀏覽器中測試

URL帶有加號

在瀏覽器裏輸入URLhttps://www.baidu.com/s?wd=小二+大叔,這時候百度搜索框中出現的是小二 大叔搜索框+神奇的變成了空格git

URL帶有空格

在瀏覽器裏輸入URLhttps://www.baidu.com/s?wd=小二 大叔,這時候百度搜索框中出現的是小二 大叔URL空格的變成%20github

URL帶有%2B

在瀏覽器裏輸入URLhttps://www.baidu.com/s?wd=小二%2B大叔,這時候百度搜索框中出現的是小二+大叔搜索框%2B的變成+web

2.POST - 簡單的PHP測試

代碼
<?php
echo $_POST['word'];
POSTMAN 發送請求
POST /1.php HTTP/1.1
Host: 127.0.0.1
Cache-Control: no-cache
Postman-Token: fed5740c-aceb-0f57-edc9-cf42a275b35a
Content-Type: application/x-www-form-urlencoded

word=%2B%2B%2B+%2B%2B%2B
輸出
+++ +++

2.孕婦 - URL中的URL

0.說明

在社交登陸或微信公衆號等時候,咱們經常會在URL中使用到回調地址來處理驗證成功後的頁面跳轉。segmentfault

例如:瀏覽器

  • 回調地址爲:lionis.taroball.com?username=lionis&sex=man
  • 這時候在URL中附加回調信息時
  • 地址變爲www.xxx.com?redirect=lionis.taroball.com?username=lionis&sex=man

這個時候尷尬的問題出現了,sex=man在這個時候變成了www.xxx.com的參數了,而不是lionis.taroball.com的參數了。服務器

這個時候就須要對回調信息進行encodeURL微信

2.代碼

<?php
// 文件名爲test.php
echo $_GET['redirect'];

3.有 encodeURL

URL
localhost/test.php?redirect=lionis.taroball.com%3Fusername%3Dlionis%26sex%3Dman
輸出
lionis.taroball.com?username=lionis&sex=man

4.無 encodeURL

URL
localhost/test.php?redirect=lionis.taroball.com?username=lionis&sex=man
輸出
lionis.taroball.com?username=lionis

3.結論

GET

  • 若是想在URL中使用+須要對URL進行encodeURL,把+編碼成%2B
  • 在服務端渲染頁面的時候,對URL須要encodeURL
  • 在客戶端發送請求的時候,javascript須要使用正則來進行替換
  • 在服務端接受參數的時候,對關鍵字使用decodeURL
  • 對於URL中的URL也須要進行encodeURL

POST

  • POSTContent-Type默認是application/x-www-form-urlencoded,顧名思義對URL進行了encodeURL
  • 想要了解更多有關POST能夠看我以前寫的你所不知道的POST

一塊兒成長

在困惑的城市裏總少不了並肩同行的 夥伴 讓咱們一塊兒成長。
  • 若是您想讓更多人看到文章能夠點個 點贊
  • 若是您想激勵小二能夠到 Github 給個 小星星
  • 若是您想與小二更多交流添加微信 m353839115

微信公衆號

本文原稿來自 PushMeTop
相關文章
相關標籤/搜索