① WebService和Webapi的區別
webapi用的是http協議,webservice用的是soap協議
webapi無狀態,相對webservice更輕量級。webapi支持如get,post等http操作
http soap關系
http:是一個客戶端和伺服器端請求和應答的標准(TCP)。http協議其目的是為了提供一種發布和接收htttp頁面的方法
一http協議的客戶端與伺服器的交互:由HTTP客戶端發起一個請求,建立一個到伺服器指定埠(默認是80埠)的TCP連接。HTTP伺服器則在那個埠監聽客戶端發送過來的請求。一旦收到請求,伺服器(向客戶端)發回一個狀態行,比如」HTTP/1.1 200 OK」,和(響應的)消息,消息的消息體可能是請求的文件、錯誤消息、或者其它一些信息。
soap 協議:它描述了一種在分散或分布式的環境中如何交換信息的輕量級協議。soap在http協議的基礎上,一個基於XML的協議。
不同:都是底層的通信協議,請求包的格式不同而已,soap包是XML格式,http純文本格式。
關系:SOAP是個通信協議, SOAP在HTTP協議的基礎上,把編寫成XML的REQUEST參數, 放在HTTP BODY上提交個WEB SERVICE伺服器(SERVLET,ASP什麼的) 處理完成後,結果也寫成XML作為RESPONSE送回用戶端, 為了使用戶端和WEB SERVICE可以相互對應,可以使用WSDL作為這種通信方式的描述文件,利用WSDL工具可以自動生成WS和用戶端的框架文件,SOAP具備把復雜對象序列化捆綁到XML里去的能力。
WCF和WEB API我該選擇哪個?
1、當你想創建一個支持消息、消息隊列、雙工通信的服務時,你應該選擇WCF
2、當你想創建一個服務,可以用更快速的傳輸通道時,像TCP、Named Pipes或者甚至是UDP(在WCF4.5中),在其他傳輸通道不可用的時候也可以支持HTTP。
3、當你想創建一個基於HTTP的面向資源的服務並且可以使用HTTP的全部特徵時(比如URIs、request/response頭,緩存,版本控制,多種內容格式),你應該選擇Web API
4、當你想讓你的服務用於瀏覽器、手機、iPhone和平板電腦時,你應該選擇Web API
SOAP:Simple Object Access Protocol
簡單對象訪問協議(SOAP)是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多網際網路協議和格式結合使用,包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。
HTTP協議: 應用層
TCP協議 : 傳輸層
HTTP協議詳解之響應篇
在接收和解釋請求消息後,伺服器返回一個HTTP響應消息。
HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
1、狀態行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示伺服器HTTP協議的版本;Status-Code表示伺服器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息–表示請求已接收,繼續處理
2xx:成功–表示請求已被成功接收、理解、接受
3xx:重定向–要完成請求必須進行更進一步的操作
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現
5xx:伺服器端錯誤–伺服器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //伺服器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常
eg:HTTP/1.1 200 OK (CRLF)
2、響應報頭後述
3、響應正文就是伺服器返回的資源的內容
② auth返回狀態碼異常
throw new AuthException("ssCode","登錄錯了");
返回:
{
"error" : "ssCode",
"error_description" : "登錄錯了"
}
文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
86213 人正在系統學習中
打開CSDN,閱讀體驗更佳
springsecurity+oauth2+jwt實現單點吵備冊登錄demo
該資源是springsecurity+oauth2+jwt實現的單點登錄demo,模式為授權碼模式,實現自定義登錄頁面和自定義授權頁面。應用數據存在內存中或者存在資料庫中(附帶資料庫表結構),token存儲分為資料庫或者Redis。demo包含服務端和客戶端,可直接運行測試。
Spring Security OAuth2 認證伺服器自定義異常處理
認證伺服器默認返回的數據格式如下: { "error": "unsupported_grant_type", "error_description": "Unsupported grant type: password1" } 上面的返回結果很不友好,而且前端代碼也很難判斷是什麼錯誤,所以我們需要對返回的錯誤進行統一的異常處理 1.默認的異常處理器 默認情況是使用WebRespo...
繼續訪問
自定義spring security oauth /auth/token的返回內容格式
場景 在前後端分離的項目中,一般後端返回給前端的格式是一個固定的json格式。 在這個前提下,spring security oauth 生成access token的請求/auth/token的返回內容就需要自定義 原返回值 我們希望使用我們自己固定的json格式 需求 我們的BaseResponse類 public class BaseResponse { pri...
繼續訪問
Spring Security OAuth2模塊/oauth/token授權介面自定義返回結果
spring security提供了默認的oauth登錄授權升宏介面/oauth/token,該介面位於org.springframework.security.oauth2.provider.endpoint包中的TokenEndpoint類。 公司要實現自定義的登錄授權介面,且返回值滾型也要實現私有結構,下面大概講一下怎麼改造這個類來實現要求的業務邏輯。 一、利用Spring AOP方式 二、自定義Controller介面實現 簡單粗暴,直接把TokenEndpointer類注入到自定義Controller中;
繼續訪問
Spring Security Oauth2 自定義異常返回信息
開頭引用 https://my.oschina.net/merryyou/blog/1819572 在使用Spring Security Oauth2登錄和鑒權失敗時,默認返回的異常信息如下 { "error": "unauthorized", "error_description": "Full authentication is required to access this r...
繼續訪問
oauth2.0源碼分析之oauth/token申請令牌
本期介紹的是在oauth2.0中 , 通過調用oauth/token介面 , 框架是如何給我們申請到JWT令牌的 , 內部做了些什麼事情 ? 在分析源碼之前 , 我們首先需要知道的是我們需要具備哪些調試條件 , 不然會發現許多奇奇怪怪的錯誤 (比如通過/oauth/token時出現401) 1.一張oauth2.0的內置表(oauth_client_details) 注意:這里的密碼需要用Bcript加密 , 因為源碼內部是用Bcript解密的 2.兩把鑰匙: 一本是後綴為jks的私鑰 另一本是後綴為k
繼續訪問
SpringSecurity+OAuth2認證/oauth/token登錄報錯There is no client authentication
報錯信息: { "error": "unauthorized", "error_description": "There is no client authentication. Try adding an appropriate authentication filter." } 找到這個問題原因後,發現自己被自己蠢哭了。 在自己的核心配置類里,把這個/oauth/token加入到忽...
繼續訪問
spring security+Oauth2密碼模式認證時,報401,Unauthorized的問題排查
第一種情況: 進行 /auth/token的post請求時,沒有進行httpbasic認證。 什麼是http Basic認證? http協議的一種認證方式,將客戶端id和客戶端密碼按照「客戶端ID:客戶端密碼」的格式拼接,並用base64編碼,放在 header中請求服務端。例子如下: Authorization:Basic ASDLKFALDSFAJSLDFKLASD= ASDLKFALDSFAJSLDFKLASD= 就是 客戶端ID:客戶端密碼 的64編碼 springsecurity中的...
繼續訪問
最新發布 SpringBoot使用SpringSecurity,使用oauth2登錄,使用自定義/uaa/oauth/token報錯解決
SpringBoot使用SpringSecurity,使用oauth2登錄,使用自定義/uaa/oauth/token報錯解決
繼續訪問
asp.net WebAPI OWIN OAuth2.0授權自定義返回結果及錯誤或異常問題處理辦法
asp.net WebAPI OWIN OAuth2.0授權自定義返回結果及錯誤或異常問題處理核心代碼,詳情: https://www.cnblogs.com/wgx0428/p/12315546.html
ASP.NET WebAPI Token JWT Bearer 認證失敗和成功返回自定義數據 Json
asp.net WebAPI Token Oauth2.0授權自定義返回結果(包括登錄正確返回,登錄失敗返回)。 詳細參考:https://blog.csdn.net/u013546115/article/details/105580532
Spring Security OAuth2 token許可權隔離實例解析
主要介紹了Spring Security OAuth2 token許可權隔離實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
spring security oauth其中的/oauth/token做了哪些
項目場景: 問題描述: 提示:這里描述項目中遇到的問題: 例如:數據傳輸過程中數據不時出現丟失的情況,偶爾會丟失一部分數據 APP 中接收數據代碼: 原因分析: 提示:這里填寫問題的分析: 例如:Handler 發送消息有兩種方式,分別是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式當數據量過大時,由於 MessageQuene 大小也有限,所以當 message 處理不及時時,會造成先傳的數據被覆蓋,進而.
繼續訪問
Spring Security OAuth2 自定義 token Exception
https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/spring-security-OAuth208.png 1. 前言 在使用Spring Security Oauth2登錄和鑒權失敗時,默認返回的異常信息如下 { "error": "unauthorized", "error_description": "Full authentication is required to
繼續訪問
前後端分離 token過期 返回狀態碼
1.首先配置Mvc配置文件類 @Configuration public class BackendConfiguration extends WebMvcConfigurationSupport { @Autowired private LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { regi
繼續訪問
SpringSecurityOAuth2(2)請求攜帶客戶端信息校驗,自定義異常返回,無權處理,token失效處理...
上文地址:SpringSecurityOAuth2(1)(password,authorization_code,refresh_token,client_credentials)獲取token 上一篇博客寫了一個至簡的OAuth2的token認證伺服器,只實現了4種獲取token的方式 ,對...
繼續訪問
oauth2.0自定義token失效返回信息
oauth2.0自定義token失效返回信息 一、問題 由於spring security oauth2返回的失效信息對於客戶端不太有好,在網上找了自定義的解決方案以便更優雅的展示返回信息。 重寫框架里的方法,實現自定義。 二、配置類 Oauth2ResourceServer extends @Override public void configure( reso
繼續訪問
熱門推薦 解決Spring Security OAuth在訪問/oauth/token時候報401 authentication is required
先來張圖片 我在用psotman 測試oauth授權碼模式的出現了401的異常, 就是調用oauth/token. 我是想用code換token,但是發現報錯了。這是為什麼呢? 首先你要理解 /oauth/token 這個如果配置支持的,且url中有client_...
繼續訪問
spring security 和OAuth2 整合訪問 localhost:8082/oauth/token 報401的問題,或者403的問題
@Bean public PasswordEncoder passwordEncoder() { /** * 采坑 * spring-boot2 之後廢棄了MD5,使用BCryptPasswordEncoder()加密; * */ return new BCryptPasswordEncoder(); } 注意在security的配置內中,要使用BCryptPasswordEncoder 加密,..
繼續訪問
資料庫課程設計
c語言文件讀寫操作代碼
html+css+js網頁設計
③ WebService與WebApi的區別
1 基於SOAP協議的,數據格式為XML
2 只支持HTTP協議
3 不是開源的,但可以被任意一個了解XML的人使用
4 只能部署在IIS上
SOAP :簡單對象訪問協議Simple Object Access Protocol,傳輸層 ,返銷,XML傳輸消息
WSDL :Web Server Description Language :Web Server描述語言(元數據),給客戶端生成代理類的一個描述信息
UDDI :提供了一組基於標準的規范用於描述和發現服務,統一描述,發現和集成(UDDI-Universal Descript,Discovery,Integration),提供注冊和查找服務
客戶端在UDDI注冊表(Registry)查找服務,取得服務的WSDL描述,通過SOAP調用服務。
1 是簡單的 構建HTTP服務的新框架
2 在.net平台上WebApi是一個開源的,理想的,構建REST-FUL服務的技術
3 不想WCF REST Server 它可以使用HTTP的全部特點(URI,request/response頭,緩存,版本控制,多種內容格式)
4 支持MVC的特徵。像路由、控制器、action、filter、模型綁定、控制反轉(IOC)或依賴注入(DI),單元測試。
4 可以部署在IIS和應用程序上
6 輕量級框架,並且對限制帶寬的設備,比如智能手機等支持的很好
7、Response可以被Web API的MediaTypeFormatter轉換成Json、XML 或者任何你想轉換的格式。
8、Web API非常適合構建移動客戶端服務
1、 需要Web Service但是不需要SOAP
2、 需要在漏簡游已有的WCF服務基礎上建立non-soap-based http服務
3、 只想發布一些簡單的Http服務,不想使用相對復雜的WCF配置
4、 發布的服務可能會被帶寬受限的設備訪問
5、 希望使用開源框架,關鍵時候可以自己調試或者自定義一下框架
6、如果服務需要在http協議上,並且希望利用http協議的各種功能
7、如果服務需要被各種客戶端(特別是移動客戶端)調用
webapi多用於基於http請求的服務應用,比如說移動服務端或者需要提供第三方API 服務的場景下
webservice也可以應用於webapi所在的場景,一般是做為內部服務的使用,好比如果一個系咐嫌統用wcf/webservice作為內部子系統間的服務通信,而webapi用於外部服務的請求。
④ js調用跨域get請求調用webApi 多出個options請求是為什麼
我嘗試用我的語言描述一下吧:
先說跨域請求的原理,瀏覽器的安全機制是不允許出現跨域請求的,否則會有很嚴重的安全問題,解決跨域問題有幾種不同的方法,你題目中提到的方法就是通過在Response header中添加Access-Control-Allow-Origin 來讓瀏覽器知道伺服器所在的域,對用於訪問的域進行了授權。
但是因為這個Header要伺服器提供,所以無論如何,請求是要先發出去才能指導是不是允許跨域請求,所以在報跨域錯誤的時候,雖然報錯了,但是請求實際上依然發送到伺服器了,只是瀏覽器看了一眼伺服器的返回,然後發覺不行,這個請求返回的header里沒有授權,所以瀏覽器不能用。
這樣就帶來一個問題,請求會對伺服器造成影響,試想一下,要使用XHR跨域提交一個表單,無論返回頭裡面是否添加了跨域的header,都會提交一個請求到伺服器,伺服器要進行相應的操作。這種情況其實在一定條件下也是可以接受的,但是如果有更大的安全隱患,就不可以了,所以就需要OPTIONS請求了。
OPTIONS請求就是在符合一定條件下的跨域請求發送之前,瀏覽器會先發一個OPTIONS請求,問一下伺服器,是不是能跨域,如果能,就發真正的請求,如果不能,就不發了。這個的作用就很好理解了。
如上面所說,不是所有的跨域請求都要先發OPTIONS請求的,規范裡面規定,以下情況不需要先發一個 OPTIONS請求:
請求類型必須是GET、HEAD、POST中的一種。
請求的Header裡面只能包涵一些規范重點Header,以及規范的值,包括:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save、Data、Viewport-Width、Width
Content-Type的類型必須是以下幾種:application/x-www-form-urlencoded、multipart/form-data、text/plain
所以,如果你不希望瀏覽器多餘的發一個OPTIONS請求,只要遵循這個規范就可以了。
但是有時候因為需求原因,也難避免要自定義一些Header。比如,很多JS的AJAX庫,都會自定義一個Header,讓伺服器可以識別出這是否是一個非同步請求,這樣OPTIONS請求就一定要被先發送了。
順便說,伺服器端也要判斷OPTIONS類型的請求,進行一系列操作,不要讓OPTIONS請求影響到數據。
更多內容,可以看相關資料和文檔:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html